Name: series-workflowfdfnn Phase: Failed StartedAt: 2026-09-04 03:24:42 +0000 UTC FinishedAt: 2026-09-04 03:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfdfnn[0] Phase: Succeeded StartedAt: 2026-09-04 03:24:42 +0000 UTC FinishedAt: 2026-09-04 03:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfdfnn[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 03:24:42 +0000 UTC FinishedAt: 2026-09-04 03:27:08 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZDgwMzNiMzcwNWEzNGM0NzllZjBkNGU5MzViNzJmY2I0NDU0NWZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMzoyNjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5pbmRleCA5ZGY0MDFhOTE0ZmY1Li4yNWVhYzgwZGIzZTJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG5AQCAtMTQsNiAmIzQzOzE1LDE1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21jdHBkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXHUwMDNlXG4gXG4mIzQzOyNkZWZpbmUgSERSX0xFTiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcilcbiYjNDM7XG4mIzQzO3N0cnVjdCB0eF9idWZmIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1xuJiM0MztcdHNpemVfdCBsZW5ndGg7XG4mIzQzO1x0dTggZGF0YVtdIF9fY291bnRlZF9ieShsZW5ndGgpO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4gXHRzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7XG5AQCAtMjIsOSAmIzQzOzMyLDEwNCBAQCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xuIFxuIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XG4gXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHR4X3hmZXJzO1xuIFx0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuJiM0MztcdFx0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IHR4X2J1ZmYgKm5ld19ub2RlO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpO1xuJiM0MztcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4mIzQzO1xuJiM0MztcdG5ld19ub2RlID0ga3phbGxvY19mbGV4KCpuZXdfbm9kZSwgZGF0YSwgbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW5ld19ub2RlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG5ld19ub2RlLVx1MDAzZWxlbmd0aCA9IGxlbjtcbiYjNDM7XHRtZW1jcHkobmV3X25vZGUtXHUwMDNlZGF0YSwgZGF0YSwgbGVuKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNm5ld19ub2RlLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycyk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZGV2LCB0cnVlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdFx0XHQgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppbixcbiYjNDM7XHRcdFx0XHRcdCAgICBzaXplX3QgKmxlbmd0aF9vdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdHhfYnVmZiAqcG9zO1xuJiM0MztcdHNpemVfdCBsZW5ndGg7XG4mIzQzO1x0dTggKmJ1ZiwgKnRhaWw7XG4mIzQzO1xuJiM0MztcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGxlbmd0aF9vdXQpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGluKTtcbiYjNDM7XG4mIzQzO1x0bGVuZ3RoID0gMDtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaW4sIGxpc3QpXG4mIzQzO1x0XHRsZW5ndGggPSBzaXplX2FkZChsZW5ndGgsIHBvcy1cdTAwM2VsZW5ndGgpO1xuJiM0MztcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCAwKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCBTSVpFX01BWCk7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmKTtcbiYjNDM7XG4mIzQzO1x0dGFpbCA9IGJ1ZjtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaW4sIGxpc3QpIHtcbiYjNDM7XHRcdG1lbWNweSh0YWlsLCBwb3MtXHUwMDNlZGF0YSwgcG9zLVx1MDAzZWxlbmd0aCk7XG4mIzQzO1x0XHR0YWlsICYjNDM7PSBwb3MtXHUwMDNlbGVuZ3RoO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Kmxlbmd0aF9vdXQgPSBsZW5ndGg7XG4mIzQzO1x0cmV0dXJuIGJ1ZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4ICptY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IGxlbmd0aClcbiYjNDM7e1xuJiM0MztcdHU4ICpidWZmZXI7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGJ1ZmZlciA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmZmVyKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuZ3RoOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJ1ZmZlcltpXSA9IGkgJSAyNTY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidWZmZXI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhlYWQsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRsZW4gJiM0Mzs9IEhEUl9MRU47XG4mIzQzO1x0aGVhZC1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuJiM0MztcdGhlYWQtXHUwMDNlbGVuID0gY3B1X3RvX2JlMTYobGVuIFx1MDAyNiBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4mIzQzO1xuJiM0MztcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEsIGxlbmd0aCk7XG4mIzQzO1x0cmV0dXJuIHNrYjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG5AQCAtMTE3LDYgJiM0MzsyMjIsNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCxcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xuJiM0MztcdHN0cnVjdCB0eF9idWZmICpjdXJyLCAqdGVtcDtcbiBcbiBcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cbiBcdCAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLlxuQEAgLTEyNCw2ICYjNDM7MjMwLDggQEAgc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxuIFx0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cdTAwM2VrdW5pdF90ZXN0LFxuIFx0XHRcdCAgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VydC5yZWZzKSk7XG4gXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIHRlbXAsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycywgbGlzdClcbiYjNDM7XHRcdGtmcmVlKGN1cnIpO1xuIFx0a2ZyZWUoY3R4KTtcbiB9XG4gXG5AQCAtMTM5LDYgJiM0MzsyNDcsNyBAQCBzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QpO1xuIFx0cnQgPSBcdTAwMjZjdHgtXHUwMDNlcnQ7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2cnQtXHUwMDNlcmVmcywgMSk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKTtcbiBcbiBcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbkBAIC0yMDAsMTEgJiM0MzszMDksOSBAQCBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pXG4gXHRpbnQgcmM7XG4gXG4gXHRyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7XG4tXHRpZiAocngpIHtcbi1cdFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XG4tXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4tXHR9XG4gXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4gXG4gXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuQEAgLTIyNyw2ICYjNDM7MzM0LDMyIEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYWN0aW9uX3R4X2Zpbmkodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHggPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9maW5pKHR4KTtcbiYjNDM7XHRrZnJlZSh0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKlxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxuJiM0MztcdFx0XHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHR4ID0ga3phbGxvY19vYmooKnR4KTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgdHgpO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fdHhfZmluaSwgdHgpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2luaXQodHgsIG9wcywgcHJpdiwgc3Bhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0eDtcbiYjNDM7fVxuJiM0MztcbiAvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4gICogdGhlIHRyYW5zZmVyXG4gICovXG5AQCAtMzc4LDI5ICYjNDM7NTExLDQxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbiBcdHsgXCYjMzQ7MXAxeC1jb21wbGV0ZVwmIzM0OywgMSwgeyA4IH0sIDEsIHsgOCB9IH0sXG4gXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXG4gXHR7IFwmIzM0OzJwMXgtY29tYmluZWRcJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSxcbi1cdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqL1xuLVx0eyBcJiMzNDsxcDJ4LXNwbGl0LXBheWxvYWRcJiMzNDssIDEsIHsgMTYgfSwgMiwgeyA4LCA4IH0gfSxcbi1cdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4tXHR7IFwmIzM0OzFwMngtc3BsaXQtdXNiaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgMiwgMTQgfSB9LFxuLVx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cbi1cdHsgXCYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LFxuIFx0LyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovXG4gXHR7IFwmIzM0OzFwM3gtc3BsaXRcJiMzNDssIDEsIHsgMTIgfSwgMywgeyA0LCA0LCA0IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIDUgdHJhbnNmZXJzLCBzcGxpdHRpbmcgb24gYW5kIGJldHdlZW4gZWFjaCBoZWFkZXIuICovXG4mIzQzO1x0eyBcJiMzNDsxcDV4LXNwbGl0XCYjMzQ7LCAxLCB7IDEyIH0sIDUsIHsgMywgMSwgMSwgMywgNH19LFxuIFx0LyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqL1xuIFx0eyBcJiMzNDsxcDF4LWxhcmdlXCYjMzQ7LCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSxcbiBcdC8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhXG4gXHQgKiBzaW5nbGUgYnl0ZSBjb250aW51aW5nIHRoZSBzcGFuXG4gXHQgKi9cbi1cdHsgXCYjMzQ7MnAyeC1sYXJnZS1zcGxpdFwmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4mIzQzO1x0eyBcJiMzNDsycDJ4LWxhcmdlLXNwbGl0XCYjMzQ7LCAyLCB7IDgxOTAsIDgxOTEgfSwgMiwgeyA4MTkxLCA4MTkwIH0gfSxcbiYjNDM7XHQvKiBUaHJlZSBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbixcbiYjNDM7XHQgKiB3aXRoIGEgc2luZ2xlIGJ5dGUgY29udGludWluZyBlYWNoIHNwYW5cbiYjNDM7XHQgKi9cbiYjNDM7XHR7IFwmIzM0OzNwM3gtbGFyZ2Utc3BsaXRcJiMzNDssIDMsIHsgODE5MCwgODE5MSwgODE5MSB9LCAzLCB7IDgxOTEsIDgxOTEsIDgxOTAgfSB9LFxuIH07XG4gXG4gS1VOSVRfQVJSQVlfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbiwgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnMsXG4gXHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0c2l6ZV90IGJ1ZmxlbiwgbGVuO1xuJiM0MztcdHU4IHBhY2tldFsxNl07XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHBhY2tldCk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwYWNrZXQsIGxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGJ1ZiwgcGFja2V0LCBvZmZzZXQpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBvZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBcdTAwMjZidWYsIFx1MDAyNmJ1ZmxlbixcbiYjNDM7XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGJ1ZiwgcGFja2V0ICYjNDM7IG9mZnNldCwgbGVuIC0gb2Zmc2V0KTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuIC0gb2Zmc2V0KTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgMSk7XG4mIzQzO1xuJiM0MztcdHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xuJiM0MztcdGlmIChza2IpIHtcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBsZW4gLSBIRFJfTEVOKTtcbiYjNDM7XHRcdGtmcmVlKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X2hlYWRlcl9zcGxpdHMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdC8qIFVucm9sbGluZyBoZXJlIHNvIHN0YWNrIHRyYWNlcyBwb2ludCB0byB0aGUgaW52b2NhdGlvbiB3aXRoIHRoZVxuJiM0MztcdCAqIGZhaWxpbmcgbGVuZ3RoLlxuJiM0MztcdCAqL1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDEsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDIsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDMsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDQsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDUsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDYsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDcsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDgsIGRldiwgcngpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUZXN0IHRoZSBzdWJtaXNzaW9uIG9mIGEgcGFja2V0IHdpdGggYW4gaW1wb3NzaWJseSBzbWFsbCB2YWx1ZSBpbiB0aGVcbiYjNDM7ICogaGVhZGVyJiMzOTtzIGxlbmd0aCBmaWVsZC4gVmFsdWVzIGxlc3MgdGhhbiBIRFJfTEVOIGFyZSBpbnZhbGlkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaG9ydF9wYWNrZXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzaXplX3QgbGVuLCBidWZsZW47XG4mIzQzO1x0dTggcGt0YnVmWzEyXTtcbiYjNDM7XHR2b2lkICpidWY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4mIzQzO1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4mIzQzO1x0ZGV2ID0gY3R4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgSERSX0xFTiAtIDEpO1xuJiM0MztcbiYjNDM7XHRidWZsZW4gPSAwO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4mIzQzO1xuJiM0MztcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9pbnZhbGlkX2RtdGZfaWQoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzaXplX3QgbGVuLCBidWZsZW47XG4mIzQzO1x0dTggcGt0YnVmWzEyXTtcbiYjNDM7XHR2b2lkICpidWY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4mIzQzO1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4mIzQzO1x0ZGV2ID0gY3R4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0Ly8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkXG4mIzQzO1x0cGt0YnVmWzFdID0gfnBrdGJ1ZlsxXTtcbiYjNDM7XG4mIzQzO1x0YnVmbGVuID0gMDtcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBcdTAwMjZidWYsIFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XG4mIzQzO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBsZW4pO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdHNpemVfdCBsZW4sIGJ1ZmxlbjtcbiYjNDM7XHR1OCBwa3RidWZbM107XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRidWZsZW4gPSAwO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4mIzQzO1xuJiM0MztcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRU5PTVNHKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ19wYXJ0aWFsKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4mIzQzO1x0c2l6ZV90IGxlbiwgYnVmbGVuO1xuJiM0MztcdHU4IHBrdGJ1ZlsyMF07XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4gJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdGJ1ZmxlbiA9IDA7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FUFJPVE8pO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiX2hkciBoZWFkO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0c2l6ZV90IGxlbiwgdHhfbGVuO1xuJiM0MztcdHU4ICpidWYsICpmbGF0X3R4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bGVuID0gMTAwMDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4mIzQzO1xuJiM0MztcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kO1xuJiM0MztcbiYjNDM7XHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbGVuKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcdTAwMjZoZWFkLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycykpO1xuJiM0MztcbiYjNDM7XHRmbGF0X3R4ID0gbWN0cF91c2JsaWJfdGVzdF9mbGF0dGVuX3R4X2J1ZmYodGVzdCwgXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZ0eF9sZW4pO1xuJiM0MztcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBmbGF0X3R4KTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHR4X2xlbiwgbGVuICYjNDM7IEhEUl9MRU4pO1xuJiM0MztcdEtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBmbGF0X3R4LCBcdTAwMjZoZWFkLCBIRFJfTEVOKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCAmIzQzOyBIRFJfTEVOLCBidWYsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfZmFpbGluZ19zZW5kKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRzaXplX3QgbGVuO1xuJiM0MztcdHU4ICpidWY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRsZW4gPSAxMDA7XG4mIzQzO1xuJiM0MztcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbiYjNDM7XHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuJiM0MztcbiYjNDM7XHRvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZF9mYWlsO1xuJiM0MztcbiYjNDM7XHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgZmFsc2UpO1xuJiM0MztcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbGVuKTtcbiYjNDM7XHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbiYjNDM7XG4mIzQzO1x0LyogRG9lc24mIzM5O3QgY2FsbCBvcHMuc2VuZCBhcyBtb3JlIHBhY2tldHMgYXJlIGV4cGVjdGVkLFxuJiM0MztcdCAqIHNvIHRoZSBwdXNoIHNob3VsZG4mIzM5O3QgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgdHJ1ZSk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIENhbGxzIG9wcy5zZW5kIGFzIG5vIGZ1cnRoZXIgcGFja2V0cyBhcmUgZXhwZWN0ZWQuICovXG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHR4LVx1MDAzZWN1cl9jdHgpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGxpc3RfZW1wdHkoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlc3Qgc2VuZGluZyBtdWx0aXBsZSBwYWNrZXRzIGluIHRoZSBzYW1lIHRyYW5zZmVyLCBmb2xsb3dlZCBieSBvbmUgdGhhdFxuJiM0MzsgKiBzcGFucyBtdWx0aXBsZSBzdWJzZXF1ZW50IHRyYW5zZmVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfbXVsdGlfcHVzaChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzaXplX3QgaSwgbWF4X2xlbmd0aCwgdHhfbGVuZ3RoO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xuJiM0MztcdHU4ICpidWYsICpmbGF0X3R4LCAqaW5kZXg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB7XG4mIzQzO1x0XHRzaXplX3QgbGVuO1xuJiM0MztcdFx0Ym9vbCBtb3JlO1xuJiM0MztcdH0gc2VuZHNbXSA9IHtcbiYjNDM7XHRcdHsgMTAwMCwgdHJ1ZSAgfSxcbiYjNDM7XHRcdHsgIDUwMCwgZmFsc2UgfSxcbiYjNDM7XHRcdHsgNTAwMCwgZmFsc2UgfSxcbiYjNDM7XHR9O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0c3RhdGljX2Fzc2VydCghc2VuZHNbQVJSQVlfU0laRShzZW5kcykgLSAxXS5tb3JlLFxuJiM0MztcdFx0ICAgICAgXCYjMzQ7VGhlIGxhc3QgcHVzaCBtdXN0IGNsYWltIHRoZXJlIHdpbGwgYmUgbm8gbW9yZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG1heF9sZW5ndGggPSAwO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2VuZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNlbmRzW2ldLmxlbiBcdTAwM2UgbWF4X2xlbmd0aClcbiYjNDM7XHRcdFx0bWF4X2xlbmd0aCA9IHNlbmRzW2ldLmxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbiYjNDM7XHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuJiM0MztcbiYjNDM7XHRvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZDtcbiYjNDM7XG4mIzQzO1x0dHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgXHUwMDI2b3BzLCBjdHgsIHRydWUpO1xuJiM0MztcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbWF4X2xlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2VuZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBzZW5kc1tpXS5sZW4sIG5kZXYsIGJ1Zik7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIHNlbmRzW2ldLm1vcmUpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0ZBTFNFKHRlc3QsIGxpc3RfZW1wdHkoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKSk7XG4mIzQzO1xuJiM0MztcdGZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCBcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFx1MDAyNnR4X2xlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDAsIGluZGV4ID0gZmxhdF90eDsgaSBcdTAwM2MgQVJSQVlfU0laRShzZW5kcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzaXplX3QgbGVuZ3RoX3RvX2NoZWNrLCByZW1haW5pbmdfYnl0ZXM7XG4mIzQzO1x0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyIGhlYWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZGV4IC0gZmxhdF90eCBcdTAwM2U9IHR4X2xlbmd0aCAtIEhEUl9MRU4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKFx1MDAyNmhlYWQsIHNlbmRzW2ldLmxlbik7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgaW5kZXgsIFx1MDAyNmhlYWQsIEhEUl9MRU4pO1xuJiM0MztcdFx0aW5kZXggJiM0Mzs9IEhEUl9MRU47XG4mIzQzO1x0XHRyZW1haW5pbmdfYnl0ZXMgPSB0eF9sZW5ndGggLSAoaW5kZXggLSBmbGF0X3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRsZW5ndGhfdG9fY2hlY2sgPSBzZW5kc1tpXS5sZW47XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spO1xuJiM0MztcdFx0bGVuZ3RoX3RvX2NoZWNrID0gbWluKHJlbWFpbmluZ19ieXRlcywgbGVuZ3RoX3RvX2NoZWNrKTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICAgYnVmLCBsZW5ndGhfdG9fY2hlY2spO1xuJiM0MztcbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBsZW5ndGhfdG9fY2hlY2s7XG4mIzQzO1x0fVxuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBBUlJBWV9TSVpFKHNlbmRzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfb3ZlcmZsb3coc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHM7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XHRzaXplX3QgbGVuLCBpO1xuJiM0MztcdHU2NCBzdGF0cztcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bGVuID0gMjAwO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4mIzQzO1x0bmRldiA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmRldjtcbiYjNDM7XG4mIzQzO1x0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDtcbiYjNDM7XG4mIzQzO1x0dHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgXHUwMDI2b3BzLCBjdHgsIGZhbHNlKTtcbiYjNDM7XHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XG4mIzQzO1xuJiM0MztcdGRzdGF0cyA9IGdldF9jcHVfcHRyKG5kZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGkgIT0gMik7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdHN0YXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbiYjNDM7XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuJiM0MztcdHB1dF9jcHVfcHRyKGRzdGF0cyk7XG4mIzQzO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzdGF0cywgMyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxuIFx0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuIFx0XHRcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9oZWFkZXJfc3BsaXRzKSxcbiYjNDM7XHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2hvcnRfcGFja2V0KSxcbiYjNDM7XHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaW52YWxpZF9kbXRmX2lkKSxcbiYjNDM7XHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueSksXG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9wa3Rfc3BhbiksXG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X211bHRpX3B1c2gpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyksXG4gXHR7fVxuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZDgwMzNiMzcwNWEzNGM0NzllZjBkNGU5MzViNzJmY2I0NDU0NWZlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMzoyNjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMKaW5kZXggOWRmNDAxYTkxNGZmNS4uMjVlYWM4MGRiM2UyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGQKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FycmF5X3NpemUuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2t1bml0L3Rlc3QuaCZndDsKQEAgLTE0LDYgJiM0MzsxNSwxNSBAQAogI2luY2x1ZGUgJmx0O25ldC9tY3RwZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiAKJiM0MzsjZGVmaW5lIEhEUl9MRU4gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpCiYjNDM7CiYjNDM7c3RydWN0IHR4X2J1ZmYgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7CiYjNDM7CXNpemVfdCBsZW5ndGg7CiYjNDM7CXU4IGRhdGFbXSBfX2NvdW50ZWRfYnkobGVuZ3RoKTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7CkBAIC0yMiw5ICYjNDM7MzIsMTA0IEBAIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7CiAKIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7CiAJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgdHhfeGZlcnM7CiAJc3RydWN0IG1jdHBfcm91dGUgcnQ7CiB9OwogCiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LAomIzQzOwkJCQkgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgdHhfYnVmZiAqbmV3X25vZGU7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpOwomIzQzOwluZGV2ID0gY3R4LSZndDtkZXYtJmd0O25kZXY7CiYjNDM7CiYjNDM7CW5ld19ub2RlID0ga3phbGxvY19mbGV4KCpuZXdfbm9kZSwgZGF0YSwgbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFuZXdfbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwluZXdfbm9kZS0mZ3Q7bGVuZ3RoID0gbGVuOwomIzQzOwltZW1jcHkobmV3X25vZGUtJmd0O2RhdGEsIGRhdGEsIGxlbik7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtuZXdfbm9kZS0mZ3Q7bGlzdCwgJmFtcDtjdHgtJmd0O3R4X3hmZXJzKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5kZXYsIHRydWUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsCiYjNDM7CQkJCQkgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICppbiwKJiM0MzsJCQkJCSAgICBzaXplX3QgKmxlbmd0aF9vdXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdHhfYnVmZiAqcG9zOwomIzQzOwlzaXplX3QgbGVuZ3RoOwomIzQzOwl1OCAqYnVmLCAqdGFpbDsKJiM0MzsKJiM0MzsJS1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgbGVuZ3RoX291dCk7CiYjNDM7CUtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGluKTsKJiM0MzsKJiM0MzsJbGVuZ3RoID0gMDsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGluLCBsaXN0KQomIzQzOwkJbGVuZ3RoID0gc2l6ZV9hZGQobGVuZ3RoLCBwb3MtJmd0O2xlbmd0aCk7CiYjNDM7CiYjNDM7CUtVTklUX0FTU0VSVF9ORSh0ZXN0LCBsZW5ndGgsIDApOwomIzQzOwlLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCBTSVpFX01BWCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJ1Zik7CiYjNDM7CiYjNDM7CXRhaWwgPSBidWY7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBpbiwgbGlzdCkgewomIzQzOwkJbWVtY3B5KHRhaWwsIHBvcy0mZ3Q7ZGF0YSwgcG9zLSZndDtsZW5ndGgpOwomIzQzOwkJdGFpbCAmIzQzOz0gcG9zLSZndDtsZW5ndGg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmxlbmd0aF9vdXQgPSBsZW5ndGg7CiYjNDM7CXJldHVybiBidWY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCAqbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1ZihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBsZW5ndGgpCiYjNDM7ewomIzQzOwl1OCAqYnVmZmVyOwomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJYnVmZmVyID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBsZW5ndGgsIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmZmVyKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbmd0aDsgaSYjNDM7JiM0MzspCiYjNDM7CQlidWZmZXJbaV0gPSBpICUgMjU2OwomIzQzOwomIzQzOwlyZXR1cm4gYnVmZmVyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZWFkLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJbGVuICYjNDM7PSBIRFJfTEVOOwomIzQzOwloZWFkLSZndDtpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpOwomIzQzOwloZWFkLSZndDtsZW4gPSBjcHVfdG9fYmUxNihsZW4gJmFtcDsgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2Ioc3RydWN0IGt1bml0ICp0ZXN0LAomIzQzOwkJCQkJCSB1bnNpZ25lZCBpbnQgbGVuZ3RoLAomIzQzOwkJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJCQkgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBsZW5ndGgsIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgc2tiKTsKJiM0MzsKJiM0MzsJc2tiX3B1dF9kYXRhKHNrYiwgZGF0YSwgbGVuZ3RoKTsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CkBAIC0xMTcsNiAmIzQzOzIyMiw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LAogc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTsKJiM0MzsJc3RydWN0IHR4X2J1ZmYgKmN1cnIsICp0ZW1wOwogCiAJLyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC0mZ3Q7cnQgd2lsbCBiZSB1bmxpbmtlZC4KIAkgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC4KQEAgLTEyNCw2ICYjNDM7MjMwLDggQEAgc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKQogCUtVTklUX0VYUEVDVF9UUlVFKGN1cnJlbnQtJmd0O2t1bml0X3Rlc3QsCiAJCQkgIHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2N0eC0mZ3Q7cnQucmVmcykpOwogCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyLCB0ZW1wLCAmYW1wO2N0eC0mZ3Q7dHhfeGZlcnMsIGxpc3QpCiYjNDM7CQlrZnJlZShjdXJyKTsKIAlrZnJlZShjdHgpOwogfQogCkBAIC0xMzksNiAmIzQzOzI0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3J0Lmxpc3QpOwogCXJ0ID0gJmFtcDtjdHgtJmd0O3J0OwogCXJlZmNvdW50X3NldCgmYW1wO3J0LSZndDtyZWZzLCAxKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3R4X3hmZXJzKTsKIAogCXJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpOwogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CkBAIC0yMDAsMTEgJiM0MzszMDksOSBAQCBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pCiAJaW50IHJjOwogCiAJcnggPSBremFsbG9jX29iaigqcngpOwotCWlmIChyeCkgewotCQlyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTsKLQkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKLQl9CiAJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiAKIAlyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7CiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKQEAgLTIyNyw2ICYjNDM7MzM0LDMyIEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiByYzsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFjdGlvbl90eF9maW5pKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4ID0gZGF0YTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfZmluaSh0eCk7CiYjNDM7CWtmcmVlKHR4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqCiYjNDM7bWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLAomIzQzOwkJCSB2b2lkICpwcml2LCBib29sIHNwYW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4OwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXR4ID0ga3phbGxvY19vYmooKnR4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHR4KTsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl90eF9maW5pLCB0eCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3R4X2luaXQodHgsIG9wcywgcHJpdiwgc3Bhbik7CiYjNDM7CiYjNDM7CXJldHVybiB0eDsKJiM0Mzt9CiYjNDM7CiAvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluCiAgKiB0aGUgdHJhbnNmZXIKICAqLwpAQCAtMzc4LDI5ICYjNDM7NTExLDQxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHsKIAl7ICYjMzQ7MXAxeC1jb21wbGV0ZSYjMzQ7LCAxLCB7IDggfSwgMSwgeyA4IH0gfSwKIAkvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovCiAJeyAmIzM0OzJwMXgtY29tYmluZWQmIzM0OywgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LAotCS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqLwotCXsgJiMzNDsxcDJ4LXNwbGl0LXBheWxvYWQmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LAotCS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovCi0JeyAmIzM0OzFwMngtc3BsaXQtdXNiaGRyJiMzNDssIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sCi0JLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi8KLQl7ICYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyJiMzNDssIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sCiAJLyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovCiAJeyAmIzM0OzFwM3gtc3BsaXQmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LAomIzQzOwkvKiBBIHBhY2tldCBzcGxpdCBvdmVyIDUgdHJhbnNmZXJzLCBzcGxpdHRpbmcgb24gYW5kIGJldHdlZW4gZWFjaCBoZWFkZXIuICovCiYjNDM7CXsgJiMzNDsxcDV4LXNwbGl0JiMzNDssIDEsIHsgMTIgfSwgNSwgeyAzLCAxLCAxLCAzLCA0fX0sCiAJLyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqLwogCXsgJiMzNDsxcDF4LWxhcmdlJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LAogCS8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhCiAJICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhbgogCSAqLwotCXsgJiMzNDsycDJ4LWxhcmdlLXNwbGl0JiMzNDssIDIsIHsgODE5MCwgODE5MCB9LCAyLCB7IDgxOTEsIDgxODkgfSB9LAomIzQzOwl7ICYjMzQ7MnAyeC1sYXJnZS1zcGxpdCYjMzQ7LCAyLCB7IDgxOTAsIDgxOTEgfSwgMiwgeyA4MTkxLCA4MTkwIH0gfSwKJiM0MzsJLyogVGhyZWUgbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sCiYjNDM7CSAqIHdpdGggYSBzaW5nbGUgYnl0ZSBjb250aW51aW5nIGVhY2ggc3BhbgomIzQzOwkgKi8KJiM0MzsJeyAmIzM0OzNwM3gtbGFyZ2Utc3BsaXQmIzM0OywgMywgeyA4MTkwLCA4MTkxLCA4MTkxIH0sIDMsIHsgODE5MSwgODE5MSwgODE5MCB9IH0sCiB9OwogCiBLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucywKIAkJICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpOwogCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgb2Zmc2V0LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiwKJiM0MzsJCQkJCSAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBidWZsZW4sIGxlbjsKJiM0MzsJdTggcGFja2V0WzE2XTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWxlbiA9IHNpemVvZihwYWNrZXQpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBhY2tldCwgbGVuLCBsZW4pOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwgJmFtcDtidWYsICZhbXA7YnVmbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGFja2V0LCBvZmZzZXQpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIG9mZnNldCk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtJmd0O25kZXYsIHJ4LCAmYW1wO2J1ZiwgJmFtcDtidWZsZW4sCiYjNDM7CQkJCSAgICBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIGRldi0mZ3Q7cnhfcGt0cy5xbGVuLCAwKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGFja2V0ICYjNDM7IG9mZnNldCwgbGVuIC0gb2Zmc2V0KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCBsZW4gLSBvZmZzZXQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIDEpOwomIzQzOwomIzQzOwlza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7ZGV2LSZndDtyeF9wa3RzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7CiYjNDM7CWlmIChza2IpIHsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItJmd0O2xlbiwgbGVuIC0gSERSX0xFTik7CiYjNDM7CQlrZnJlZShza2IpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwkvKiBVbnJvbGxpbmcgaGVyZSBzbyBzdGFjayB0cmFjZXMgcG9pbnQgdG8gdGhlIGludm9jYXRpb24gd2l0aCB0aGUKJiM0MzsJICogZmFpbGluZyBsZW5ndGguCiYjNDM7CSAqLwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCAxLCBkZXYsIHJ4KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgMiwgZGV2LCByeCk7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDMsIGRldiwgcngpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA0LCBkZXYsIHJ4KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgNSwgZGV2LCByeCk7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDYsIGRldiwgcngpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA3LCBkZXYsIHJ4KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgOCwgZGV2LCByeCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlc3QgdGhlIHN1Ym1pc3Npb24gb2YgYSBwYWNrZXQgd2l0aCBhbiBpbXBvc3NpYmx5IHNtYWxsIHZhbHVlIGluIHRoZQomIzQzOyAqIGhlYWRlciYjMzk7cyBsZW5ndGggZmllbGQuIFZhbHVlcyBsZXNzIHRoYW4gSERSX0xFTiBhcmUgaW52YWxpZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3Nob3J0X3BhY2tldChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CXNpemVfdCBsZW4sIGJ1ZmxlbjsKJiM0MzsJdTggcGt0YnVmWzEyXTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgSERSX0xFTiAtIDEpOwomIzQzOwomIzQzOwlidWZsZW4gPSAwOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwgJmFtcDtidWYsICZhbXA7YnVmbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIGxlbik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LSZndDtza2IpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X2ludmFsaWRfZG10Zl9pZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CXNpemVfdCBsZW4sIGJ1ZmxlbjsKJiM0MzsJdTggcGt0YnVmWzEyXTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJLy8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkCiYjNDM7CXBrdGJ1ZlsxXSA9IH5wa3RidWZbMV07CiYjNDM7CiYjNDM7CWJ1ZmxlbiA9IDA7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtJmd0O25kZXYsIHJ4LCAmYW1wO2J1ZiwgJmFtcDtidWZsZW4sIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApOwomIzQzOwlLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pOwomIzQzOwomIzQzOwltZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LSZndDtuZGV2LCByeCwgbGVuKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtJmd0O3NrYik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtJmd0O3J4X3BrdHMucWxlbiwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CXNpemVfdCBsZW4sIGJ1ZmxlbjsKJiM0MzsJdTggcGt0YnVmWzNdOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpOwomIzQzOwlyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCBmYWxzZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJYnVmbGVuID0gMDsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi0mZ3Q7bmRldiwgcngsICZhbXA7YnVmLCAmYW1wO2J1ZmxlbiwgR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CUtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7CiYjNDM7CiYjNDM7CW1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTsKJiM0MzsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCBsZW4pOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FTk9NU0cpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC0mZ3Q7c2tiKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi0mZ3Q7cnhfcGt0cy5xbGVuLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ19wYXJ0aWFsKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJc2l6ZV90IGxlbiwgYnVmbGVuOwomIzQzOwl1OCBwa3RidWZbMjBdOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpOwomIzQzOwlyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCBmYWxzZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuICYjNDM7IDEpOwomIzQzOwomIzQzOwlidWZsZW4gPSAwOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwgJmFtcDtidWYsICZhbXA7YnVmbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIGxlbik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LSZndDtza2IpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNiX2hkciBoZWFkOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJc2l6ZV90IGxlbiwgdHhfbGVuOwomIzQzOwl1OCAqYnVmLCAqZmxhdF90eDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsZW4gPSAxMDAwOwomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CW5kZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bmRldjsKJiM0MzsKJiM0MzsJb3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7CiYjNDM7CiYjNDM7CXR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsICZhbXA7b3BzLCBjdHgsIHRydWUpOwomIzQzOwomIzQzOwlidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKCZhbXA7aGVhZCwgbGVuKTsKJiM0MzsKJiM0MzsJc2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBmYWxzZSk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CUtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KCZhbXA7Y3R4LSZndDt0eF94ZmVycykpOwomIzQzOwomIzQzOwlmbGF0X3R4ID0gbWN0cF91c2JsaWJfdGVzdF9mbGF0dGVuX3R4X2J1ZmYodGVzdCwgJmFtcDtjdHgtJmd0O3R4X3hmZXJzLAomIzQzOwkJCQkJCSAgICZhbXA7dHhfbGVuKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGZsYXRfdHgpOwomIzQzOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHhfbGVuLCBsZW4gJiM0MzsgSERSX0xFTik7CiYjNDM7CUtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBmbGF0X3R4LCAmYW1wO2hlYWQsIEhEUl9MRU4pOwomIzQzOwlLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCAmIzQzOyBIRFJfTEVOLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfZmFpbGluZ19zZW5kKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CXU4ICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbGVuID0gMTAwOwomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CW5kZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bmRldjsKJiM0MzsKJiM0MzsJb3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDsKJiM0MzsKJiM0MzsJdHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgJmFtcDtvcHMsIGN0eCwgZmFsc2UpOwomIzQzOwlidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7CiYjNDM7CXNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpOwomIzQzOwomIzQzOwkvKiBEb2VzbiYjMzk7dCBjYWxsIG9wcy5zZW5kIGFzIG1vcmUgcGFja2V0cyBhcmUgZXhwZWN0ZWQsCiYjNDM7CSAqIHNvIHRoZSBwdXNoIHNob3VsZG4mIzM5O3QgZmFpbC4KJiM0MzsJICovCiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCB0cnVlKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJc2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7CiYjNDM7CiYjNDM7CS8qIENhbGxzIG9wcy5zZW5kIGFzIG5vIGZ1cnRoZXIgcGFja2V0cyBhcmUgZXhwZWN0ZWQuICovCiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBmYWxzZSk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHR4LSZndDtjdXJfY3R4KTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbGlzdF9lbXB0eSgmYW1wO2N0eC0mZ3Q7dHhfeGZlcnMpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVzdCBzZW5kaW5nIG11bHRpcGxlIHBhY2tldHMgaW4gdGhlIHNhbWUgdHJhbnNmZXIsIGZvbGxvd2VkIGJ5IG9uZSB0aGF0CiYjNDM7ICogc3BhbnMgbXVsdGlwbGUgc3Vic2VxdWVudCB0cmFuc2ZlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzaXplX3QgaSwgbWF4X2xlbmd0aCwgdHhfbGVuZ3RoOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJdTggKmJ1ZiwgKmZsYXRfdHgsICppbmRleDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWNvbnN0IHN0cnVjdCB7CiYjNDM7CQlzaXplX3QgbGVuOwomIzQzOwkJYm9vbCBtb3JlOwomIzQzOwl9IHNlbmRzW10gPSB7CiYjNDM7CQl7IDEwMDAsIHRydWUgIH0sCiYjNDM7CQl7ICA1MDAsIGZhbHNlIH0sCiYjNDM7CQl7IDUwMDAsIGZhbHNlIH0sCiYjNDM7CX07CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJc3RhdGljX2Fzc2VydCghc2VuZHNbQVJSQVlfU0laRShzZW5kcykgLSAxXS5tb3JlLAomIzQzOwkJICAgICAgJiMzNDtUaGUgbGFzdCBwdXNoIG11c3QgY2xhaW0gdGhlcmUgd2lsbCBiZSBubyBtb3JlJiMzNDspOwomIzQzOwomIzQzOwltYXhfbGVuZ3RoID0gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoc2VuZHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHNlbmRzW2ldLmxlbiAmZ3Q7IG1heF9sZW5ndGgpCiYjNDM7CQkJbWF4X2xlbmd0aCA9IHNlbmRzW2ldLmxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CW5kZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bmRldjsKJiM0MzsKJiM0MzsJb3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7CiYjNDM7CiYjNDM7CXR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsICZhbXA7b3BzLCBjdHgsIHRydWUpOwomIzQzOwlidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIG1heF9sZW5ndGgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShzZW5kcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIHNlbmRzW2ldLmxlbiwgbmRldiwgYnVmKTsKJiM0MzsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBzZW5kc1tpXS5tb3JlKTsKJiM0MzsJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CX0KJiM0MzsJS1VOSVRfQVNTRVJUX0ZBTFNFKHRlc3QsIGxpc3RfZW1wdHkoJmFtcDtjdHgtJmd0O3R4X3hmZXJzKSk7CiYjNDM7CiYjNDM7CWZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCAmYW1wO2N0eC0mZ3Q7dHhfeGZlcnMsCiYjNDM7CQkJCQkJICAgJmFtcDt0eF9sZW5ndGgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwLCBpbmRleCA9IGZsYXRfdHg7IGkgJmx0OyBBUlJBWV9TSVpFKHNlbmRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNpemVfdCBsZW5ndGhfdG9fY2hlY2ssIHJlbWFpbmluZ19ieXRlczsKJiM0MzsJCXN0cnVjdCBtY3RwX3VzYl9oZHIgaGVhZDsKJiM0MzsKJiM0MzsJCWlmIChpbmRleCAtIGZsYXRfdHggJmd0Oz0gdHhfbGVuZ3RoIC0gSERSX0xFTikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKCZhbXA7aGVhZCwgc2VuZHNbaV0ubGVuKTsKJiM0MzsJCUtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCwgJmFtcDtoZWFkLCBIRFJfTEVOKTsKJiM0MzsJCWluZGV4ICYjNDM7PSBIRFJfTEVOOwomIzQzOwkJcmVtYWluaW5nX2J5dGVzID0gdHhfbGVuZ3RoIC0gKGluZGV4IC0gZmxhdF90eCk7CiYjNDM7CiYjNDM7CQlsZW5ndGhfdG9fY2hlY2sgPSBzZW5kc1tpXS5sZW47CiYjNDM7CQlLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spOwomIzQzOwkJbGVuZ3RoX3RvX2NoZWNrID0gbWluKHJlbWFpbmluZ19ieXRlcywgbGVuZ3RoX3RvX2NoZWNrKTsKJiM0MzsKJiM0MzsJCUtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCwKJiM0MzsJCQkJICAgYnVmLCBsZW5ndGhfdG9fY2hlY2spOwomIzQzOwomIzQzOwkJaW5kZXggJiM0Mzs9IGxlbmd0aF90b19jaGVjazsKJiM0MzsJfQomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgaSwgQVJSQVlfU0laRShzZW5kcykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHM7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CXNpemVfdCBsZW4sIGk7CiYjNDM7CXU2NCBzdGF0czsKJiM0MzsJdTggKmJ1ZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsZW4gPSAyMDA7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJbmRldiA9IGN0eC0mZ3Q7ZGV2LSZndDtuZGV2OwomIzQzOwomIzQzOwlvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZF9mYWlsOwomIzQzOwomIzQzOwl0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCAmYW1wO29wcywgY3R4LCBmYWxzZSk7CiYjNDM7CWJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbGVuKTsKJiM0MzsKJiM0MzsJZHN0YXRzID0gZ2V0X2NwdV9wdHIobmRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTsKJiM0MzsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBpICE9IDIpOwomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO2RzdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwkJc3RhdHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMpOwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtkc3RhdHMtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzOwlwdXRfY3B1X3B0cihkc3RhdHMpOwomIzQzOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3RhdHMsIDMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksCiAJS1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLAogCQkJIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9oZWFkZXJfc3BsaXRzKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3Nob3J0X3BhY2tldCksCiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9pbnZhbGlkX2RtdGZfaWQpLAomIzQzOwlLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueSksCiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ19wYXJ0aWFsKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X211bHRpX3B1c2gpLAomIzQzOwlLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfdHhfZmFpbGluZ19zZW5kKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KSwKIAl7fQogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUYXJnZXRlZCBLVW5pdCBUZXN0IFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgc3BlY2lmaWNhbGx5IHRvdWNoZXMgYGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jYC4gUmlnaHQgYXdheSwgdGhhdCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gS1VuaXQgdGVzdGluZywgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgTUNUUCBVU0IgbGlicmFyeS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgZmlsZSBuYW1lIGNvbnZlbnRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGlzIHRoZSAqb25seSogZmlsZSBpbXBhY3RlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlOyBhIHRhcmdldGVkIGVkaXQgbGlrZSB0aGlzIHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYyBpc3N1ZSBvciByZWZpbmVtZW50IHdpdGhpbiB0aGF0IHRlc3QgbW9kdWxlLgoKVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBnaXRgIHN0YXR1cyBvciBkaWZmLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2hhbmdlLiBJZiBvdGhlciBmaWxlcyBhcmUgaW52b2x2ZWQsIEkmIzM5O2xsIGFkanVzdCBteSBhbmFseXNpcyBhY2NvcmRpbmdseSwgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIHdpZGVyIGltcGxpY2F0aW9ucy4gRmluYWxseSwgSSYjMzk7bGwgcnVuIG15IHN0YW5kYXJkIHN1aXRlIG9mIHZlcmlmaWNhdGlvbiB0b29scyDigJMgbWF5YmUgYSBsaW50aW5nIGNoZWNrIG9yIGEgc3BlY2lmaWMgdG9vbCBkZXNpZ25lZCB0byBhc3Nlc3MgS1VuaXQgdGVzdCBpbnRlZ3JpdHkuIFRoaXMgc3lzdGVtYXRpYyBhcHByb2FjaCBlbnN1cmVzIEkgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNibGliX3Rlc3RfY2FzZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYz04NzA9c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMtOTEwLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmM6OTExOnN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy05MTItXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKSxcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYz05Mjc9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMtOTI4LVx0Lm5hbWUgPSBcJiMzNDttY3RwLXVzYmxpYlwmIzM0OyxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jOjkyOTpcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTkzMC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgV29ydGhGdXp6aW5nIGZvciBOb24tRXhlY3V0YWJsZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBxdWlja2x5IGNsYXJpZnkgdGhlIFdvcnRoRnV6emluZyBydWxlcyByZWdhcmRpbmcgdW5pdCB0ZXN0cywgc3BlY2lmaWNhbGx5IEtVbml0IHRlc3RzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBub24tZXhlY3V0YWJsZSBtb2RpZmljYXRpb25zLiBTZWN0aW9uIDIgb3V0bGluZXMgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGUgc2NlbmFyaW9zIHdoZXJlIHdlJiMzOTtkIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0IGV4cGxpY2l0bHkgbWVudGlvbnMgdGhhdCBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzIGFyZSBnZW5lcmFsbHkgZXhjbHVkZWQuIFRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgY29tbWVudHMsIHNwZWxsaW5nIGNvcnJlY3Rpb25zLCBhbmQgYW55dGhpbmcgaW4gdXNlci1zcGFjZSBkaXJlY3RvcmllcyBsaWtlIHRvb2xzLCBzYW1wbGVzLCBzY3JpcHRzLCBpZiB0aGV5IGRvbiYjMzk7dCBpbXBhY3QgdGhlIGNvcmUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBtb2R1bGVzLCBhcmUgdHlwaWNhbGx5IGEgbm8tZ28gZm9yIGZ1enppbmcuIEFsc28gZGVjb3JhdGl2ZSBsb2dnaW5nIGFuZCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBDIGxvZ2ljIGFyZSBhbHNvIGV4Y2x1ZGVkLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyDigJMgaXMgYSBLVW5pdCB0ZXN0IGNvbnNpZGVyZWQgc2VsZi10ZXN0IGNvZGU/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gYXNzZXNzIGEgc3BlY2lmaWMgZXhhbXBsZSBmaWxlLCBzYXkgYG1jdHAtdXNibGliLXRlc3QuY2AsIHRvIGZpZ3VyZSBvdXQgaXRzIG5hdHVyZS4gV2hhdCBleGFjdGx5ICppcyogdGhpcyBmaWxlIGRvaW5nPyBBbmQgdGhlbiwgY3J1Y2lhbCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzZXR0aW5ncyBmb3IgYG1jdHAtdXNibGliLXRlc3QuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBjb21waWxlZC4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cC11c2JsaWItdGVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTItLypcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jOjM6ICogbWN0cC11c2JsaWItdGVzdC5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgaGVscGVyIGxpYnJhcnksXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy00LSAqIHVuaXQgdGVzdCBkZWZpbml0aW9ucy5cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NjIxPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1QpXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjI0OiNpbmNsdWRlIFwmIzM0O21jdHAtdXNibGliLXRlc3QuY1wmIzM0O1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY5MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIENoZWNrIGZvciBVU0JsaWIgVGVzdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIEtjb25maWcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVGAuIElzIGl0IGVuYWJsZWQ/IERpc2FibGVkPyBEb2VzIGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZCBvbiBvdGhlciBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIGlzIGxpa2VseSB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgY29uZmlndXJpbmcgYSByZWxhdGVkIGZlYXR1cmUsIGFuZCBhIHF1aWNrIEtjb25maWcgY2hlY2sgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIGhvdyB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz01MD1jb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTU5LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTYyMT1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcJiMzNDspO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyMi1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo2MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNC0jaW5jbHVkZSBcJiMzNDttY3RwLXVzYmxpYi10ZXN0LmNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gYG1jdHAtdXNibGliLXRlc3QuY2AgaXMgdGhlIG9ubHkgZmlsZSBjaGFuZ2VkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgU2luY2UgdGhpcyBpcyBpbiB0aGUgY29udGV4dCBvZiBLVW5pdCB0ZXN0cywgSSBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBldmVuICpjb25zaWRlcnMqIEtVbml0IHRlc3RzIHRvIGJlIHBhcnQgb2YgdGhlIGF0dGFjayBzdXJmYWNlLCBvciBpZiB0aGV5IGFyZSBzZXBhcmF0ZSBleGVjdXRpb24gcGF0aHMgb25seSBmb3IgdGVzdGluZyBhdCBib290IG9yIG1vZHVsZSBsb2FkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcmUtcmVhZCB0aGUgZ3VpZGVsaW5lczsgJiMzNDtSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURSYjMzQ7LiBUaGUgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIHRoYXQgZnV6emluZyBzaG91bGQgb25seSB0YXJnZXQgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIEdDRSBvciBRRU1VLCBhbmQgdmlhIHN5c2NhbGxzLCBvciBlbXVsYXRlZCBkZXZpY2VzLiBOb3QgY29kZSB0aGF0IHJ1bnMgaW4gYSB1bml0IHRlc3QgaGFybmVzcy4KClRoZSBndWlkZWxpbmVzIGFsc28gc2F5IHRvIGV4Y2x1ZGUgdGhpbmdzIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgYW5kIHNhbXBsZXMsIGFuZCBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgYC91c3IvYCBgL3Rvb2xzL2AgYC9zYW1wbGVzL2AgYW5kIGAvc2NyaXB0cy9gIGFzIHRoaW5ncyB0byBza2lwLCBpZiB0aGV5IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBvciBrZXJuZWwgbW9kdWxlcy4KCkFoLCByaWdodCEgS1VuaXQgdGVzdHMgYXJlIHVuaXQgdGVzdHMuIFRoZXkmIzM5O3JlIG5vdCBydW50aW1lIGtlcm5lbCBjb2RlLiBUaGV5IGV4ZWN1dGUgd2hlbiB0aGUga2VybmVsIHN0YXJ0cyBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIG9yIGlmIHRyaWdnZXJlZCBieSBkZWJ1Z2ZzLiBUaGV5IHJ1biBpbiBhIHN5bnRoZXRpYyBzY2VuYXJpbyB3aXRoaW4gdGhlIEtVbml0IGhhcm5lc3MuIFRoZXkmIzM5O3JlIHNlbGYtdGVzdHMgYW5kIHVuaXQgdGVzdHMgdGhhdCBydW4gYXQgYSBkaWZmZXJlbnQgc3RhZ2UuIFNvLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHN5emthbGxlciAod2l0aCBpdHMgZm9jdXMgb24gc3lzY2FsbHMsIGRldmljZSBpbnRlcmFjdGlvbiwgYW5kIHNvIG9uKSB3b24mIzM5O3QgcmVhY2ggdGhpcyBjb2RlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIHdhc24mIzM5O3QgYSBoaWRkZW4gY2hhbmdlIHRvIGBtY3RwLXVzYmxpYi5jYCBpdHNlbGYuCgpMb29raW5nIGF0IHRoZSBjb21taXQgZGlmZiwgaXQmIzM5O3MgY2xlYXI6CmBgYGRpZmYKY29tbWl0IGVkODAzM2IzNzA1YTM0YzQ3OWVmMGQ0ZTkzNWI3MmZjYjQ0NTQ1ZmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDAzOjI2OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwppbmRleCA5ZGY0MDFhOTE0ZmY1Li4yNWVhYzgwZGIzZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwpgYGAKTm9wZS4gKk9ubHkqIGBtY3RwLXVzYmxpYi10ZXN0LmNgIHdhcyB0b3VjaGVkLgoKSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgY2hhbmdlcyBpbiB0aGlzIGNvbW1pdC4gQ2hlY2tpbmcgdGhlIGdpdCBsb2dzIGFuZCB0aGUgZmlsZXMgbW9kaWZpZWQsIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB0aGUgb25seSBmaWxlIGFmZmVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gIDUxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5XCYjMzQ7XG4gIDUyOlx0XHRkZXBlbmRzIG9uIFVTQlxuICA1MzpcdFx0aGVscFxuICA1NDpcdFx0ICBDb21tb24gcHJvdG9jb2wgaGFuZGxpbmcgZnVuY3Rpb25zIGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydFxuICA1NTpcdFx0ICBpbXBsZW1lbnRhdGlvbnMsIHN1aXRhYmxlIGZvciB1c2UgaW4gZWl0aGVyIGhvc3QtIG9yIGdhZGdldC1zaWRlXG4gIDU2Olx0XHQgIHRyYW5zcG9ydCBkcml2ZXJcbiAgNTc6XHRcbiAgNTg6XHRcdCAgVGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSB0aGUgdHJhbnNwb3J0IGRyaXZlci5cbiAgNTk6XHRcbiAgNjA6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcbiAgNjE6XHQgICAgICAgIGJvb2wgXCYjMzQ7TUNUUCB1c2JsaWIgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA2MjpcdCAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA2MzpcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNjQ6XHRcbiAgNjU6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gIDY2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbiAgNjc6XHRcdGRlcGVuZHMgb24gVVNCXG4gIDY4Olx0XHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gIDY5Olx0XHRoZWxwXG4gIDcwOlx0XHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuICA3MTpcdFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuICA3MjpcdFxuICA3MzpcdFx0ICBNQ1RQLW92ZXItVVNCIGludGVyZmFjZXMgYXJlIHBlZXItdG8tcGVlciwgc28gZWFjaCBpbnRlcmZhY2VcbiAgNzQ6XHRcdCAgcmVwcmVzZW50cyBhIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gb25lIHJlbW90ZSBNQ1RQIGVuZHBvaW50LlxuICA3NTpcdFxuICA3NjpcdGVuZG1lbnVcbiAgNzc6XHRcbiAgNzg6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4NgoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBldmFsdWF0aW5nIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgcG90ZW50aWFsLiBNeSBpbml0aWFsIGNoZWNrIGNvbmZpcm1zIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1jdHAtdXNibGliLXRlc3QuY2AsIGlzIHBhcnQgb2YgdGhlIEtVbml0IHRlc3Qgc3VpdGUgZm9yIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeS4gU2luY2UgS1VuaXQgdGVzdHMgYXJlIGV4cGxpY2l0bHkgZGVzaWduZWQgdG8gYmUgKm5vbi1mdXp6YWJsZSog4oCTIHRoZXkgZXhlY3V0ZSBkdXJpbmcgYm9vdC90ZXN0IHJ1bnMgYW5kIGFyZW4mIzM5O3QgYWNjZXNzaWJsZSBkdXJpbmcgcnVudGltZSBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIOKAkyBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBhICYjMzQ7bm8gZ28mIzM0OyBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlc2Ugc2VsZi10ZXN0IGNhc2VzLCB0aGV5IGFyZW4mIzM5O3QgZ29pbmcgdG8gaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGFjY2Vzc2libGUgZHVyaW5nIG5vcm1hbCBzeXN0ZW0gb3BlcmF0aW9uLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9ucyBhcmUgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBjb25maWd1cmF0aW9uIHdvdWxkIGJlOgoKKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUpCiogICBgRm9jdXNTeW1ib2xzOiBbXWAgKG5vIHNwZWNpZmljIHN5bWJvbHMgbmVlZCBhdHRlbnRpb24pCiogICBgUmVhc29uaW5nOiBUaGUgcGF0Y2ggc29sZWx5IGFsdGVycyBLVW5pdCB0ZXN0IGNhc2VzIHdpdGhpbiBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgIGZvciB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnkuIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSBhbnkgcnVudGltZSBkcml2ZXIgb3Iga2VybmVsIGxvZ2ljIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkIHZpYSBzeXprYWxsZXIgZnV6emluZy4pCgpCZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSYjMzk7bSBqdXN0IGdvaW5nIHRvIHZlcmlmeSB0aGF0IG15IG1lbnRhbCBwaWN0dXJlIGlzIGFjY3VyYXRlLiBXb3J0aEZ1enppbmc6IGZhbHNlLCBFbmFibGVDb25maWdzIGlzIGFuIGVtcHR5IGFycmF5LCBGb2N1c1N5bWJvbHMgaXMgZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGV4cGxhaW5zIHdoeSwgc3VjY2luY3RseS4gWXVwLCBsb29rcyBnb29kLiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1VuaXQgdGVzdCBjYXNlcyBpbiBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJ1bnRpbWUgZHJpdmVyIG9yIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcgc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtVbml0IHRlc3QgY2FzZXMgaW4gZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBydW50aW1lIGRyaXZlciBvciBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjMyLjIyMTc1OTA2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzIyMjk3NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjMyLjIyMTc2MzY1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYxNDE0Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWQ4MDMzYjM3MDVhMzRjNDc5ZWYwZDRlOTM1YjcyZmNiNDQ1NDVmZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjI2OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5pbmRleCA5ZGY0MDFhOTE0ZmY1Li4yNWVhYzgwZGIzZTJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4gICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvdGVzdC5oXFx1MDAzZVxcbkBAIC0xNCw2ICsxNSwxNSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21jdHBkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXFx1MDAzZVxcbiBcXG4rI2RlZmluZSBIRFJfTEVOIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKVxcbitcXG4rc3RydWN0IHR4X2J1ZmYge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcbitcXHRzaXplX3QgbGVuZ3RoO1xcbitcXHR1OCBkYXRhW10gX19jb3VudGVkX2J5KGxlbmd0aCk7XFxuK307XFxuK1xcbiBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4gXFx0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xcbkBAIC0yMiw5ICszMiwxMDQgQEAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHtcXG4gXFxuIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XFxuIFxcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHR4X3hmZXJzO1xcbiBcXHRzdHJ1Y3QgbWN0cF9yb3V0ZSBydDtcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCB0eF9idWZmICpuZXdfbm9kZTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpO1xcbitcXHRuZGV2ID0gY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW5kZXY7XFxuK1xcbitcXHRuZXdfbm9kZSA9IGt6YWxsb2NfZmxleCgqbmV3X25vZGUsIGRhdGEsIGxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbmV3X25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bmV3X25vZGUtXFx1MDAzZWxlbmd0aCA9IGxlbjtcXG4rXFx0bWVtY3B5KG5ld19ub2RlLVxcdTAwM2VkYXRhLCBkYXRhLCBsZW4pO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuZXdfbm9kZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5kZXYsIHRydWUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmluLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90ICpsZW5ndGhfb3V0KVxcbit7XFxuK1xcdHN0cnVjdCB0eF9idWZmICpwb3M7XFxuK1xcdHNpemVfdCBsZW5ndGg7XFxuK1xcdHU4ICpidWYsICp0YWlsO1xcbitcXG4rXFx0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgbGVuZ3RoX291dCk7XFxuK1xcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGluKTtcXG4rXFxuK1xcdGxlbmd0aCA9IDA7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBpbiwgbGlzdClcXG4rXFx0XFx0bGVuZ3RoID0gc2l6ZV9hZGQobGVuZ3RoLCBwb3MtXFx1MDAzZWxlbmd0aCk7XFxuK1xcbitcXHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX05FKHRlc3QsIGxlbmd0aCwgU0laRV9NQVgpO1xcbitcXG4rXFx0YnVmID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmKTtcXG4rXFxuK1xcdHRhaWwgPSBidWY7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBpbiwgbGlzdCkge1xcbitcXHRcXHRtZW1jcHkodGFpbCwgcG9zLVxcdTAwM2VkYXRhLCBwb3MtXFx1MDAzZWxlbmd0aCk7XFxuK1xcdFxcdHRhaWwgKz0gcG9zLVxcdTAwM2VsZW5ndGg7XFxuK1xcdH1cXG4rXFxuK1xcdCpsZW5ndGhfb3V0ID0gbGVuZ3RoO1xcbitcXHRyZXR1cm4gYnVmO1xcbit9XFxuK1xcbitzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3QgbGVuZ3RoKVxcbit7XFxuK1xcdHU4ICpidWZmZXI7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0YnVmZmVyID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmZmVyKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW5ndGg7IGkrKylcXG4rXFx0XFx0YnVmZmVyW2ldID0gaSAlIDI1NjtcXG4rXFxuK1xcdHJldHVybiBidWZmZXI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhlYWQsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0bGVuICs9IEhEUl9MRU47XFxuK1xcdGhlYWQtXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuK1xcdGhlYWQtXFx1MDAzZWxlbiA9IGNwdV90b19iZTE2KGxlbiBcXHUwMDI2IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICptY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW5ndGgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgc2tiKTtcXG4rXFxuK1xcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEsIGxlbmd0aCk7XFxuK1xcdHJldHVybiBza2I7XFxuK31cXG4rXFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYmxpYl9kZXZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG5AQCAtMTE3LDYgKzIyMiw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xcbitcXHRzdHJ1Y3QgdHhfYnVmZiAqY3VyciwgKnRlbXA7XFxuIFxcbiBcXHQvKiBUaGUgZGV2aWNlIHdpbGwgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gLVxcdTAwM2VydCB3aWxsIGJlIHVubGlua2VkLlxcbiBcXHQgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC5cXG5AQCAtMTI0LDYgKzIzMCw4IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSlcXG4gXFx0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cXHUwMDNla3VuaXRfdGVzdCxcXG4gXFx0XFx0XFx0ICByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNlcnQucmVmcykpO1xcbiBcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIHRlbXAsIFxcdTAwMjZjdHgtXFx1MDAzZXR4X3hmZXJzLCBsaXN0KVxcbitcXHRcXHRrZnJlZShjdXJyKTtcXG4gXFx0a2ZyZWUoY3R4KTtcXG4gfVxcbiBcXG5AQCAtMTM5LDYgKzI0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXJ0Lmxpc3QpO1xcbiBcXHRydCA9IFxcdTAwMjZjdHgtXFx1MDAzZXJ0O1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnJ0LVxcdTAwM2VyZWZzLCAxKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpO1xcbiBcXG4gXFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7XFxuIFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuQEAgLTIwMCwxMSArMzA5LDkgQEAgbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7XFxuLVxcdGlmIChyeCkge1xcbi1cXHRcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcXG4tXFx0XFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4tXFx0fVxcbiBcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4gXFxuIFxcdHJjID0gbWN0cF91c2JsaWJfcnhfaW5pdChyeCwgZXBfbWF4cGFja2V0LCBzcGFuKTtcXG4gXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG5AQCAtMjI3LDYgKzMzNCwzMiBAQCBzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhY3Rpb25fdHhfZmluaSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHggPSBkYXRhO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfZmluaSh0eCk7XFxuK1xcdGtmcmVlKHR4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqXFxuK21jdHBfdXNibGliX3Rlc3RfdHhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXFxuK1xcdFxcdFxcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0dHggPSBremFsbG9jX29iaigqdHgpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgdHgpO1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3R4X2ZpbmksIHR4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdG1jdHBfdXNibGliX3R4X2luaXQodHgsIG9wcywgcHJpdiwgc3Bhbik7XFxuK1xcbitcXHRyZXR1cm4gdHg7XFxuK31cXG4rXFxuIC8qIFNpbmdsZSBwYWNrZXQsIHN0YXJ0aW5nIG9uIGEgdHJhbnNmZXIgYm91bmRhcnksIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW5cXG4gICogdGhlIHRyYW5zZmVyXFxuICAqL1xcbkBAIC0zNzgsMjkgKzUxMSw0MTYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zW10gPSB7XFxuIFxcdHsgXFxcIjFwMXgtY29tcGxldGVcXFwiLCAxLCB7IDggfSwgMSwgeyA4IH0gfSxcXG4gXFx0LyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqL1xcbiBcXHR7IFxcXCIycDF4LWNvbWJpbmVkXFxcIiwgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LFxcbi1cXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cXG4tXFx0eyBcXFwiMXAyeC1zcGxpdC1wYXlsb2FkXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxcbi1cXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBVU0IgdHJhbnNwb3J0IGhlYWRlciAqL1xcbi1cXHR7IFxcXCIxcDJ4LXNwbGl0LXVzYmhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sXFxuLVxcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovXFxuLVxcdHsgXFxcIjFwMngtc3BsaXQtbWN0cGhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sXFxuIFxcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xcbiBcXHR7IFxcXCIxcDN4LXNwbGl0XFxcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxcbitcXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIDUgdHJhbnNmZXJzLCBzcGxpdHRpbmcgb24gYW5kIGJldHdlZW4gZWFjaCBoZWFkZXIuICovXFxuK1xcdHsgXFxcIjFwNXgtc3BsaXRcXFwiLCAxLCB7IDEyIH0sIDUsIHsgMywgMSwgMSwgMywgNH19LFxcbiBcXHQvKiBNYXgtc2l6ZWQgc2luZ2xlIHRyYW5zZmVyICovXFxuIFxcdHsgXFxcIjFwMXgtbGFyZ2VcXFwiLCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSxcXG4gXFx0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcXG4gXFx0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxcbiBcXHQgKi9cXG4tXFx0eyBcXFwiMnAyeC1sYXJnZS1zcGxpdFxcXCIsIDIsIHsgODE5MCwgODE5MCB9LCAyLCB7IDgxOTEsIDgxODkgfSB9LFxcbitcXHR7IFxcXCIycDJ4LWxhcmdlLXNwbGl0XFxcIiwgMiwgeyA4MTkwLCA4MTkxIH0sIDIsIHsgODE5MSwgODE5MCB9IH0sXFxuK1xcdC8qIFRocmVlIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLFxcbitcXHQgKiB3aXRoIGEgc2luZ2xlIGJ5dGUgY29udGludWluZyBlYWNoIHNwYW5cXG4rXFx0ICovXFxuK1xcdHsgXFxcIjNwM3gtbGFyZ2Utc3BsaXRcXFwiLCAzLCB7IDgxOTAsIDgxOTEsIDgxOTEgfSwgMywgeyA4MTkxLCA4MTkxLCA4MTkwIH0gfSxcXG4gfTtcXG4gXFxuIEtVTklUX0FSUkFZX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zLFxcbiBcXHRcXHQgIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyk7XFxuIFxcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgYnVmbGVuLCBsZW47XFxuK1xcdHU4IHBhY2tldFsxNl07XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bGVuID0gc2l6ZW9mKHBhY2tldCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGFja2V0LCBsZW4sIGxlbik7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCwgXFx1MDAyNmJ1ZiwgXFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwYWNrZXQsIG9mZnNldCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgb2Zmc2V0KTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBcXHUwMDI2YnVmLCBcXHUwMDI2YnVmbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwYWNrZXQgKyBvZmZzZXQsIGxlbiAtIG9mZnNldCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgbGVuIC0gb2Zmc2V0KTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cXHUwMDNlcnhfcGt0cy5xbGVuLCAxKTtcXG4rXFxuK1xcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xcbitcXHRpZiAoc2tiKSB7XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXFx1MDAzZWxlbiwgbGVuIC0gSERSX0xFTik7XFxuK1xcdFxcdGtmcmVlKHNrYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9oZWFkZXJfc3BsaXRzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdC8qIFVucm9sbGluZyBoZXJlIHNvIHN0YWNrIHRyYWNlcyBwb2ludCB0byB0aGUgaW52b2NhdGlvbiB3aXRoIHRoZVxcbitcXHQgKiBmYWlsaW5nIGxlbmd0aC5cXG4rXFx0ICovXFxuK1xcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDEsIGRldiwgcngpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCAyLCBkZXYsIHJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgMywgZGV2LCByeCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDQsIGRldiwgcngpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA1LCBkZXYsIHJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgNiwgZGV2LCByeCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDcsIGRldiwgcngpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA4LCBkZXYsIHJ4KTtcXG4rfVxcbitcXG4rLyogVGVzdCB0aGUgc3VibWlzc2lvbiBvZiBhIHBhY2tldCB3aXRoIGFuIGltcG9zc2libHkgc21hbGwgdmFsdWUgaW4gdGhlXFxuKyAqIGhlYWRlcidzIGxlbmd0aCBmaWVsZC4gVmFsdWVzIGxlc3MgdGhhbiBIRFJfTEVOIGFyZSBpbnZhbGlkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaG9ydF9wYWNrZXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c2l6ZV90IGxlbiwgYnVmbGVuO1xcbitcXHR1OCBwa3RidWZbMTJdO1xcbitcXHR2b2lkICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIEhEUl9MRU4gLSAxKTtcXG4rXFxuK1xcdGJ1ZmxlbiA9IDA7XFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBcXHUwMDI2YnVmLCBcXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcXG4rXFxuK1xcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgbGVuKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXFx1MDAzZXNrYik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfaW52YWxpZF9kbXRmX2lkKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdHNpemVfdCBsZW4sIGJ1ZmxlbjtcXG4rXFx0dTggcGt0YnVmWzEyXTtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdGxlbiA9IHNpemVvZihwa3RidWYpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4pO1xcbitcXG4rXFx0Ly8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkXFxuK1xcdHBrdGJ1ZlsxXSA9IH5wa3RidWZbMV07XFxuK1xcbitcXHRidWZsZW4gPSAwO1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCwgXFx1MDAyNmJ1ZiwgXFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIGxlbik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVxcdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3Rpbnkoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c2l6ZV90IGxlbiwgYnVmbGVuO1xcbitcXHR1OCBwa3RidWZbM107XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xcbitcXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCBmYWxzZSk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIGxlbik7XFxuK1xcbitcXHRidWZsZW4gPSAwO1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCwgXFx1MDAyNmJ1ZiwgXFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIGxlbik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVOT01TRyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVxcdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c2l6ZV90IGxlbiwgYnVmbGVuO1xcbitcXHR1OCBwa3RidWZbMjBdO1xcbitcXHR2b2lkICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgZmFsc2UpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdGxlbiA9IHNpemVvZihwa3RidWYpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4gKyAxKTtcXG4rXFxuK1xcdGJ1ZmxlbiA9IDA7XFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBcXHUwMDI2YnVmLCBcXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcXG4rXFxuK1xcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgbGVuKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXFx1MDAzZXNrYik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNiX2hkciBoZWFkO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0c2l6ZV90IGxlbiwgdHhfbGVuO1xcbitcXHR1OCAqYnVmLCAqZmxhdF90eDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bGVuID0gMTAwMDtcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0bmRldiA9IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZGV2O1xcbitcXG4rXFx0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7XFxuK1xcbitcXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcXHUwMDI2b3BzLCBjdHgsIHRydWUpO1xcbitcXG4rXFx0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBsZW4pO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcXHUwMDI2aGVhZCwgbGVuKTtcXG4rXFxuK1xcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGZhbHNlKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0ZBTFNFKHRlc3QsIGxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpKTtcXG4rXFxuK1xcdGZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2V0eF94ZmVycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnR4X2xlbik7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBmbGF0X3R4KTtcXG4rXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0eF9sZW4sIGxlbiArIEhEUl9MRU4pO1xcbitcXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCwgXFx1MDAyNmhlYWQsIEhEUl9MRU4pO1xcbitcXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCArIEhEUl9MRU4sIGJ1ZiwgbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHU4ICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGxlbiA9IDEwMDtcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0bmRldiA9IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZGV2O1xcbitcXG4rXFx0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDtcXG4rXFxuK1xcdHR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsIFxcdTAwMjZvcHMsIGN0eCwgZmFsc2UpO1xcbitcXHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XFxuK1xcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpO1xcbitcXG4rXFx0LyogRG9lc24ndCBjYWxsIG9wcy5zZW5kIGFzIG1vcmUgcGFja2V0cyBhcmUgZXhwZWN0ZWQsXFxuK1xcdCAqIHNvIHRoZSBwdXNoIHNob3VsZG4ndCBmYWlsLlxcbitcXHQgKi9cXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIHRydWUpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XFxuK1xcbitcXHQvKiBDYWxscyBvcHMuc2VuZCBhcyBubyBmdXJ0aGVyIHBhY2tldHMgYXJlIGV4cGVjdGVkLiAqL1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgZmFsc2UpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xcbitcXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCB0eC1cXHUwMDNlY3VyX2N0eCk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpKTtcXG4rfVxcbitcXG4rLyogVGVzdCBzZW5kaW5nIG11bHRpcGxlIHBhY2tldHMgaW4gdGhlIHNhbWUgdHJhbnNmZXIsIGZvbGxvd2VkIGJ5IG9uZSB0aGF0XFxuKyAqIHNwYW5zIG11bHRpcGxlIHN1YnNlcXVlbnQgdHJhbnNmZXJzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c2l6ZV90IGksIG1heF9sZW5ndGgsIHR4X2xlbmd0aDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XFxuK1xcdHU4ICpidWYsICpmbGF0X3R4LCAqaW5kZXg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRjb25zdCBzdHJ1Y3Qge1xcbitcXHRcXHRzaXplX3QgbGVuO1xcbitcXHRcXHRib29sIG1vcmU7XFxuK1xcdH0gc2VuZHNbXSA9IHtcXG4rXFx0XFx0eyAxMDAwLCB0cnVlICB9LFxcbitcXHRcXHR7ICA1MDAsIGZhbHNlIH0sXFxuK1xcdFxcdHsgNTAwMCwgZmFsc2UgfSxcXG4rXFx0fTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0c3RhdGljX2Fzc2VydCghc2VuZHNbQVJSQVlfU0laRShzZW5kcykgLSAxXS5tb3JlLFxcbitcXHRcXHQgICAgICBcXFwiVGhlIGxhc3QgcHVzaCBtdXN0IGNsYWltIHRoZXJlIHdpbGwgYmUgbm8gbW9yZVxcXCIpO1xcbitcXG4rXFx0bWF4X2xlbmd0aCA9IDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZW5kc1tpXS5sZW4gXFx1MDAzZSBtYXhfbGVuZ3RoKVxcbitcXHRcXHRcXHRtYXhfbGVuZ3RoID0gc2VuZHNbaV0ubGVuO1xcbitcXHR9XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdG5kZXYgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmRldjtcXG4rXFxuK1xcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kO1xcbitcXG4rXFx0dHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgXFx1MDAyNm9wcywgY3R4LCB0cnVlKTtcXG4rXFx0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBtYXhfbGVuZ3RoKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XFxuK1xcdFxcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgc2VuZHNbaV0ubGVuLCBuZGV2LCBidWYpO1xcbitcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIHNlbmRzW2ldLm1vcmUpO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXHR9XFxuK1xcdEtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZXR4X3hmZXJzKSk7XFxuK1xcbitcXHRmbGF0X3R4ID0gbWN0cF91c2JsaWJfdGVzdF9mbGF0dGVuX3R4X2J1ZmYodGVzdCwgXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ0eF9sZW5ndGgpO1xcbitcXG4rXFx0Zm9yIChpID0gMCwgaW5kZXggPSBmbGF0X3R4OyBpIFxcdTAwM2MgQVJSQVlfU0laRShzZW5kcyk7IGkrKykge1xcbitcXHRcXHRzaXplX3QgbGVuZ3RoX3RvX2NoZWNrLCByZW1haW5pbmdfYnl0ZXM7XFxuK1xcdFxcdHN0cnVjdCBtY3RwX3VzYl9oZHIgaGVhZDtcXG4rXFxuK1xcdFxcdGlmIChpbmRleCAtIGZsYXRfdHggXFx1MDAzZT0gdHhfbGVuZ3RoIC0gSERSX0xFTilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcXHUwMDI2aGVhZCwgc2VuZHNbaV0ubGVuKTtcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX01FTUVRKHRlc3QsIGluZGV4LCBcXHUwMDI2aGVhZCwgSERSX0xFTik7XFxuK1xcdFxcdGluZGV4ICs9IEhEUl9MRU47XFxuK1xcdFxcdHJlbWFpbmluZ19ieXRlcyA9IHR4X2xlbmd0aCAtIChpbmRleCAtIGZsYXRfdHgpO1xcbitcXG4rXFx0XFx0bGVuZ3RoX3RvX2NoZWNrID0gc2VuZHNbaV0ubGVuO1xcbitcXHRcXHRLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spO1xcbitcXHRcXHRsZW5ndGhfdG9fY2hlY2sgPSBtaW4ocmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spO1xcbitcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX01FTUVRKHRlc3QsIGluZGV4LFxcbitcXHRcXHRcXHRcXHQgICBidWYsIGxlbmd0aF90b19jaGVjayk7XFxuK1xcbitcXHRcXHRpbmRleCArPSBsZW5ndGhfdG9fY2hlY2s7XFxuK1xcdH1cXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGksIEFSUkFZX1NJWkUoc2VuZHMpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cztcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHVuc2lnbmVkIGludCBzdGFydDtcXG4rXFx0c2l6ZV90IGxlbiwgaTtcXG4rXFx0dTY0IHN0YXRzO1xcbitcXHR1OCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRsZW4gPSAyMDA7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdG5kZXYgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmRldjtcXG4rXFxuK1xcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kX2ZhaWw7XFxuK1xcbitcXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcXHUwMDI2b3BzLCBjdHgsIGZhbHNlKTtcXG4rXFx0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBsZW4pO1xcbitcXG4rXFx0ZHN0YXRzID0gZ2V0X2NwdV9wdHIobmRldi1cXHUwMDNlZHN0YXRzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDM7IGkrKykge1xcbitcXHRcXHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcXG4rXFxuK1xcdFxcdHJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBpICE9IDIpO1xcbitcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xcbitcXHR9XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0c3RhdHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9kcm9wcyk7XFxuK1xcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCwgc3RhcnQpKTtcXG4rXFx0cHV0X2NwdV9wdHIoZHN0YXRzKTtcXG4rXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzdGF0cywgMyk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxcbiBcXHRLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sXFxuIFxcdFxcdFxcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaG9ydF9wYWNrZXQpLFxcbitcXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaW52YWxpZF9kbXRmX2lkKSxcXG4rXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3RpbnkpLFxcbitcXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfcGFydGlhbCksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9wa3Rfc3BhbiksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKSxcXG4rXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X2ZhaWxpbmdfc2VuZCksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyksXFxuIFxcdHt9XFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzoyNjozMi41ODM4OTk4MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzOTYwMTQzOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtVbml0IHRlc3QgY2FzZXMgaW4gZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBydW50aW1lIGRyaXZlciBvciBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDgwMzNiMzcwNWEzNGM0NzllZjBkNGU5MzViNzJmY2I0NDU0NWZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMzoyNjozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbmluZGV4IDlkZjQwMWE5MTRmZjUuLjI1ZWFjODBkYjNlMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbkBAIC02LDYgKzYsNyBAQFxuICAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG5AQCAtMTQsNiArMTUsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbiBcbisjZGVmaW5lIEhEUl9MRU4gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpXG4rXG4rc3RydWN0IHR4X2J1ZmYge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1xuK1x0c2l6ZV90IGxlbmd0aDtcbitcdHU4IGRhdGFbXSBfX2NvdW50ZWRfYnkobGVuZ3RoKTtcbit9O1xuK1xuIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiBcdHN0cnVjdCBtY3RwX2RldiAqbWRldjtcbkBAIC0yMiw5ICszMiwxMDQgQEAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHtcbiBcbiBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHgge1xuIFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHR4X3hmZXJzO1xuIFx0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4gfTtcbiBcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCB0eF9idWZmICpuZXdfbm9kZTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbitcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4rXG4rXHRuZXdfbm9kZSA9IGt6YWxsb2NfZmxleCgqbmV3X25vZGUsIGRhdGEsIGxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW5ld19ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdG5ld19ub2RlLVx1MDAzZWxlbmd0aCA9IGxlbjtcbitcdG1lbWNweShuZXdfbm9kZS1cdTAwM2VkYXRhLCBkYXRhLCBsZW4pO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXdfbm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMpO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5kZXYsIHRydWUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kX2ZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuK1x0XHRcdFx0XHQgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHRyZXR1cm4gLUVOT01FTTtcbit9XG4rXG4rc3RhdGljIHU4ICptY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppbixcbitcdFx0XHRcdFx0ICAgIHNpemVfdCAqbGVuZ3RoX291dClcbit7XG4rXHRzdHJ1Y3QgdHhfYnVmZiAqcG9zO1xuK1x0c2l6ZV90IGxlbmd0aDtcbitcdHU4ICpidWYsICp0YWlsO1xuK1xuK1x0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgbGVuZ3RoX291dCk7XG4rXHRLVU5JVF9BU1NFUlRfVFJVRSh0ZXN0LCBpbik7XG4rXG4rXHRsZW5ndGggPSAwO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGluLCBsaXN0KVxuK1x0XHRsZW5ndGggPSBzaXplX2FkZChsZW5ndGgsIHBvcy1cdTAwM2VsZW5ndGgpO1xuK1xuK1x0S1VOSVRfQVNTRVJUX05FKHRlc3QsIGxlbmd0aCwgMCk7XG4rXHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCBTSVpFX01BWCk7XG4rXG4rXHRidWYgPSBrdW5pdF9remFsbG9jKHRlc3QsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmKTtcbitcbitcdHRhaWwgPSBidWY7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaW4sIGxpc3QpIHtcbitcdFx0bWVtY3B5KHRhaWwsIHBvcy1cdTAwM2VkYXRhLCBwb3MtXHUwMDNlbGVuZ3RoKTtcbitcdFx0dGFpbCArPSBwb3MtXHUwMDNlbGVuZ3RoO1xuK1x0fVxuK1xuK1x0Kmxlbmd0aF9vdXQgPSBsZW5ndGg7XG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbitzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3QgbGVuZ3RoKVxuK3tcbitcdHU4ICpidWZmZXI7XG4rXHRzaXplX3QgaTtcbitcbitcdGJ1ZmZlciA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBidWZmZXIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuZ3RoOyBpKyspXG4rXHRcdGJ1ZmZlcltpXSA9IGkgJSAyNTY7XG4rXG4rXHRyZXR1cm4gYnVmZmVyO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZWFkLCBzaXplX3QgbGVuKVxuK3tcbitcdGxlbiArPSBIRFJfTEVOO1xuK1x0aGVhZC1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuK1x0aGVhZC1cdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihsZW4gXHUwMDI2IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICptY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGxlbmd0aCxcbitcdFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHRcdFx0IHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4rXG4rXHRza2JfcHV0X2RhdGEoc2tiLCBkYXRhLCBsZW5ndGgpO1xuK1x0cmV0dXJuIHNrYjtcbit9XG4rXG4gc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuQEAgLTExNyw2ICsyMjIsNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCxcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xuK1x0c3RydWN0IHR4X2J1ZmYgKmN1cnIsICp0ZW1wO1xuIFxuIFx0LyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC1cdTAwM2VydCB3aWxsIGJlIHVubGlua2VkLlxuIFx0ICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuXG5AQCAtMTI0LDYgKzIzMCw4IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSlcbiBcdEtVTklUX0VYUEVDVF9UUlVFKGN1cnJlbnQtXHUwMDNla3VuaXRfdGVzdCxcbiBcdFx0XHQgIHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjdHgtXHUwMDNlcnQucmVmcykpO1xuIFxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIHRlbXAsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycywgbGlzdClcbitcdFx0a2ZyZWUoY3Vycik7XG4gXHRrZnJlZShjdHgpO1xuIH1cbiBcbkBAIC0xMzksNiArMjQ3LDcgQEAgc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqbWN0cF91c2JsaWJfdGVzdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VydC5saXN0KTtcbiBcdHJ0ID0gXHUwMDI2Y3R4LVx1MDAzZXJ0O1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnJ0LVx1MDAzZXJlZnMsIDEpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKTtcbiBcbiBcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbkBAIC0yMDAsMTEgKzMwOSw5IEBAIG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsIGJvb2wgc3BhbilcbiBcdGludCByYztcbiBcbiBcdHJ4ID0ga3phbGxvY19vYmooKnJ4KTtcbi1cdGlmIChyeCkge1xuLVx0XHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcbi1cdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbi1cdH1cbiBcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByeCk7XG4rXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4gXG4gXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuQEAgLTIyNyw2ICszMzQsMzIgQEAgc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFjdGlvbl90eF9maW5pKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCA9IGRhdGE7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9maW5pKHR4KTtcbitcdGtmcmVlKHR4KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqXG4rbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxuK1x0XHRcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbitcdGludCByYztcbitcbitcdHR4ID0ga3phbGxvY19vYmooKnR4KTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCB0eCk7XG4rXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3R4X2ZpbmksIHR4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9pbml0KHR4LCBvcHMsIHByaXYsIHNwYW4pO1xuK1xuK1x0cmV0dXJuIHR4O1xuK31cbitcbiAvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4gICogdGhlIHRyYW5zZmVyXG4gICovXG5AQCAtMzc4LDI5ICs1MTEsNDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuc1tdID0ge1xuIFx0eyBcIjFwMXgtY29tcGxldGVcIiwgMSwgeyA4IH0sIDEsIHsgOCB9IH0sXG4gXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXG4gXHR7IFwiMnAxeC1jb21iaW5lZFwiLCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sXG4tXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbi1cdHsgXCIxcDJ4LXNwbGl0LXBheWxvYWRcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuLVx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgVVNCIHRyYW5zcG9ydCBoZWFkZXIgKi9cbi1cdHsgXCIxcDJ4LXNwbGl0LXVzYmhkclwiLCAxLCB7IDE2IH0sIDIsIHsgMiwgMTQgfSB9LFxuLVx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cbi1cdHsgXCIxcDJ4LXNwbGl0LW1jdHBoZHJcIiwgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSxcbiBcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuIFx0eyBcIjFwM3gtc3BsaXRcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciA1IHRyYW5zZmVycywgc3BsaXR0aW5nIG9uIGFuZCBiZXR3ZWVuIGVhY2ggaGVhZGVyLiAqL1xuK1x0eyBcIjFwNXgtc3BsaXRcIiwgMSwgeyAxMiB9LCA1LCB7IDMsIDEsIDEsIDMsIDR9fSxcbiBcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbiBcdHsgXCIxcDF4LWxhcmdlXCIsIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuIFx0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcbiBcdCAqIHNpbmdsZSBieXRlIGNvbnRpbnVpbmcgdGhlIHNwYW5cbiBcdCAqL1xuLVx0eyBcIjJwMngtbGFyZ2Utc3BsaXRcIiwgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4rXHR7IFwiMnAyeC1sYXJnZS1zcGxpdFwiLCAyLCB7IDgxOTAsIDgxOTEgfSwgMiwgeyA4MTkxLCA4MTkwIH0gfSxcbitcdC8qIFRocmVlIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLFxuK1x0ICogd2l0aCBhIHNpbmdsZSBieXRlIGNvbnRpbnVpbmcgZWFjaCBzcGFuXG4rXHQgKi9cbitcdHsgXCIzcDN4LWxhcmdlLXNwbGl0XCIsIDMsIHsgODE5MCwgODE5MSwgODE5MSB9LCAzLCB7IDgxOTEsIDgxOTEsIDgxOTAgfSB9LFxuIH07XG4gXG4gS1VOSVRfQVJSQVlfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbiwgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnMsXG4gXHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiBcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBvZmZzZXQsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGJ1ZmxlbiwgbGVuO1xuK1x0dTggcGFja2V0WzE2XTtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGxlbiA9IHNpemVvZihwYWNrZXQpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwYWNrZXQsIGxlbiwgbGVuKTtcbitcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGFja2V0LCBvZmZzZXQpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIG9mZnNldCk7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBcdTAwMjZidWYsIFx1MDAyNmJ1ZmxlbixcbitcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGFja2V0ICsgb2Zmc2V0LCBsZW4gLSBvZmZzZXQpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbiAtIG9mZnNldCk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgMSk7XG4rXG4rXHRza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbitcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xuK1x0aWYgKHNrYikge1xuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVx1MDAzZWxlbiwgbGVuIC0gSERSX0xFTik7XG4rXHRcdGtmcmVlKHNrYik7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHQvKiBVbnJvbGxpbmcgaGVyZSBzbyBzdGFjayB0cmFjZXMgcG9pbnQgdG8gdGhlIGludm9jYXRpb24gd2l0aCB0aGVcbitcdCAqIGZhaWxpbmcgbGVuZ3RoLlxuK1x0ICovXG4rXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCAxLCBkZXYsIHJ4KTtcbitcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDIsIGRldiwgcngpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgMywgZGV2LCByeCk7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA0LCBkZXYsIHJ4KTtcbitcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDUsIGRldiwgcngpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgNiwgZGV2LCByeCk7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA3LCBkZXYsIHJ4KTtcbitcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDgsIGRldiwgcngpO1xuK31cbitcbisvKiBUZXN0IHRoZSBzdWJtaXNzaW9uIG9mIGEgcGFja2V0IHdpdGggYW4gaW1wb3NzaWJseSBzbWFsbCB2YWx1ZSBpbiB0aGVcbisgKiBoZWFkZXIncyBsZW5ndGggZmllbGQuIFZhbHVlcyBsZXNzIHRoYW4gSERSX0xFTiBhcmUgaW52YWxpZC5cbisgKi9cbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3Nob3J0X3BhY2tldChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRzaXplX3QgbGVuLCBidWZsZW47XG4rXHR1OCBwa3RidWZbMTJdO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBIRFJfTEVOIC0gMSk7XG4rXG4rXHRidWZsZW4gPSAwO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4rXG4rXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X2ludmFsaWRfZG10Zl9pZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRzaXplX3QgbGVuLCBidWZsZW47XG4rXHR1OCBwa3RidWZbMTJdO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4pO1xuK1xuK1x0Ly8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkXG4rXHRwa3RidWZbMV0gPSB+cGt0YnVmWzFdO1xuK1xuK1x0YnVmbGVuID0gMDtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FUFJPVE8pO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXHUwMDNlc2tiKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ190aW55KHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbitcdHNpemVfdCBsZW4sIGJ1ZmxlbjtcbitcdHU4IHBrdGJ1ZlszXTtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbitcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIGxlbik7XG4rXG4rXHRidWZsZW4gPSAwO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4rXG4rXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVOT01TRyk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0c2l6ZV90IGxlbiwgYnVmbGVuO1xuK1x0dTggcGt0YnVmWzIwXTtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbitcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIGxlbiArIDEpO1xuK1xuK1x0YnVmbGVuID0gMDtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FUFJPVE8pO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXHUwMDNlc2tiKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JfaGRyIGhlYWQ7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRzaXplX3QgbGVuLCB0eF9sZW47XG4rXHR1OCAqYnVmLCAqZmxhdF90eDtcbitcdGludCByYztcbitcbitcdGxlbiA9IDEwMDA7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuK1xuK1x0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7XG4rXG4rXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgdHJ1ZSk7XG4rXG4rXHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcdTAwMjZoZWFkLCBsZW4pO1xuK1xuK1x0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgZmFsc2UpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycykpO1xuK1xuK1x0ZmxhdF90eCA9IG1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHRlc3QsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycyxcbitcdFx0XHRcdFx0XHQgICBcdTAwMjZ0eF9sZW4pO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGZsYXRfdHgpO1xuK1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHR4X2xlbiwgbGVuICsgSERSX0xFTik7XG4rXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCwgXHUwMDI2aGVhZCwgSERSX0xFTik7XG4rXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCArIEhEUl9MRU4sIGJ1ZiwgbGVuKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGxlbjtcbitcdHU4ICpidWY7XG4rXHRpbnQgcmM7XG4rXG4rXHRsZW4gPSAxMDA7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuK1xuK1x0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDtcbitcbitcdHR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsIFx1MDAyNm9wcywgY3R4LCBmYWxzZSk7XG4rXHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XG4rXHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbitcbitcdC8qIERvZXNuJ3QgY2FsbCBvcHMuc2VuZCBhcyBtb3JlIHBhY2tldHMgYXJlIGV4cGVjdGVkLFxuK1x0ICogc28gdGhlIHB1c2ggc2hvdWxkbid0IGZhaWwuXG4rXHQgKi9cbitcdHJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCB0cnVlKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbitcbitcdC8qIENhbGxzIG9wcy5zZW5kIGFzIG5vIGZ1cnRoZXIgcGFja2V0cyBhcmUgZXhwZWN0ZWQuICovXG4rXHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgZmFsc2UpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHR4LVx1MDAzZWN1cl9jdHgpO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMpKTtcbit9XG4rXG4rLyogVGVzdCBzZW5kaW5nIG11bHRpcGxlIHBhY2tldHMgaW4gdGhlIHNhbWUgdHJhbnNmZXIsIGZvbGxvd2VkIGJ5IG9uZSB0aGF0XG4rICogc3BhbnMgbXVsdGlwbGUgc3Vic2VxdWVudCB0cmFuc2ZlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHNpemVfdCBpLCBtYXhfbGVuZ3RoLCB0eF9sZW5ndGg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbitcdHU4ICpidWYsICpmbGF0X3R4LCAqaW5kZXg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0Y29uc3Qgc3RydWN0IHtcbitcdFx0c2l6ZV90IGxlbjtcbitcdFx0Ym9vbCBtb3JlO1xuK1x0fSBzZW5kc1tdID0ge1xuK1x0XHR7IDEwMDAsIHRydWUgIH0sXG4rXHRcdHsgIDUwMCwgZmFsc2UgfSxcbitcdFx0eyA1MDAwLCBmYWxzZSB9LFxuK1x0fTtcbitcdGludCByYztcbitcbitcdHN0YXRpY19hc3NlcnQoIXNlbmRzW0FSUkFZX1NJWkUoc2VuZHMpIC0gMV0ubW9yZSxcbitcdFx0ICAgICAgXCJUaGUgbGFzdCBwdXNoIG11c3QgY2xhaW0gdGhlcmUgd2lsbCBiZSBubyBtb3JlXCIpO1xuK1xuK1x0bWF4X2xlbmd0aCA9IDA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XG4rXHRcdGlmIChzZW5kc1tpXS5sZW4gXHUwMDNlIG1heF9sZW5ndGgpXG4rXHRcdFx0bWF4X2xlbmd0aCA9IHNlbmRzW2ldLmxlbjtcbitcdH1cbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4rXG4rXHRvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZDtcbitcbitcdHR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsIFx1MDAyNm9wcywgY3R4LCB0cnVlKTtcbitcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbWF4X2xlbmd0aCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XG4rXHRcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgc2VuZHNbaV0ubGVuLCBuZGV2LCBidWYpO1xuK1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgc2VuZHNbaV0ubW9yZSk7XG4rXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHR9XG4rXHRLVU5JVF9BU1NFUlRfRkFMU0UodGVzdCwgbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMpKTtcbitcbitcdGZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCBcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMsXG4rXHRcdFx0XHRcdFx0ICAgXHUwMDI2dHhfbGVuZ3RoKTtcbitcbitcdGZvciAoaSA9IDAsIGluZGV4ID0gZmxhdF90eDsgaSBcdTAwM2MgQVJSQVlfU0laRShzZW5kcyk7IGkrKykge1xuK1x0XHRzaXplX3QgbGVuZ3RoX3RvX2NoZWNrLCByZW1haW5pbmdfYnl0ZXM7XG4rXHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgaGVhZDtcbitcbitcdFx0aWYgKGluZGV4IC0gZmxhdF90eCBcdTAwM2U9IHR4X2xlbmd0aCAtIEhEUl9MRU4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKFx1MDAyNmhlYWQsIHNlbmRzW2ldLmxlbik7XG4rXHRcdEtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCwgXHUwMDI2aGVhZCwgSERSX0xFTik7XG4rXHRcdGluZGV4ICs9IEhEUl9MRU47XG4rXHRcdHJlbWFpbmluZ19ieXRlcyA9IHR4X2xlbmd0aCAtIChpbmRleCAtIGZsYXRfdHgpO1xuK1xuK1x0XHRsZW5ndGhfdG9fY2hlY2sgPSBzZW5kc1tpXS5sZW47XG4rXHRcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCByZW1haW5pbmdfYnl0ZXMsIGxlbmd0aF90b19jaGVjayk7XG4rXHRcdGxlbmd0aF90b19jaGVjayA9IG1pbihyZW1haW5pbmdfYnl0ZXMsIGxlbmd0aF90b19jaGVjayk7XG4rXG4rXHRcdEtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCxcbitcdFx0XHRcdCAgIGJ1ZiwgbGVuZ3RoX3RvX2NoZWNrKTtcbitcbitcdFx0aW5kZXggKz0gbGVuZ3RoX3RvX2NoZWNrO1xuK1x0fVxuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGksIEFSUkFZX1NJWkUoc2VuZHMpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcdHNpemVfdCBsZW4sIGk7XG4rXHR1NjQgc3RhdHM7XG4rXHR1OCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0bGVuID0gMjAwO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0bmRldiA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmRldjtcbitcbitcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kX2ZhaWw7XG4rXG4rXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgZmFsc2UpO1xuK1x0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBsZW4pO1xuK1xuK1x0ZHN0YXRzID0gZ2V0X2NwdV9wdHIobmRldi1cdTAwM2Vkc3RhdHMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMzsgaSsrKSB7XG4rXHRcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpO1xuK1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgaSAhPSAyKTtcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAwKTtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdFx0c3RhdHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMpO1xuK1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbitcdHB1dF9jcHVfcHRyKGRzdGF0cyk7XG4rXG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3RhdHMsIDMpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgbWN0cF91c2JsaWJfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sXG4gXHRcdFx0IG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksXG4rXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyksXG4rXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2hvcnRfcGFja2V0KSxcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9pbnZhbGlkX2RtdGZfaWQpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3RpbnkpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKSxcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKSxcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KSxcbiBcdHt9XG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjMyLjU4MzkwMTYxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzE0MTQxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVGFyZ2V0ZWQgS1VuaXQgVGVzdCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBLVW5pdCB0ZXN0aW5nLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBNQ1RQIFVTQiBsaWJyYXJ5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBmaWxlIG5hbWUgY29udmVudGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXMgdGhlICpvbmx5KiBmaWxlIGltcGFjdGVkLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZTsgYSB0YXJnZXRlZCBlZGl0IGxpa2UgdGhpcyBzdWdnZXN0cyBhIHZlcnkgc3BlY2lmaWMgaXNzdWUgb3IgcmVmaW5lbWVudCB3aXRoaW4gdGhhdCB0ZXN0IG1vZHVsZS5cblxuVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBnaXRgIHN0YXR1cyBvciBkaWZmLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2hhbmdlLiBJZiBvdGhlciBmaWxlcyBhcmUgaW52b2x2ZWQsIEknbGwgYWRqdXN0IG15IGFuYWx5c2lzIGFjY29yZGluZ2x5LCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb3Igd2lkZXIgaW1wbGljYXRpb25zLiBGaW5hbGx5LCBJJ2xsIHJ1biBteSBzdGFuZGFyZCBzdWl0ZSBvZiB2ZXJpZmljYXRpb24gdG9vbHMg4oCTIG1heWJlIGEgbGludGluZyBjaGVjayBvciBhIHNwZWNpZmljIHRvb2wgZGVzaWduZWQgdG8gYXNzZXNzIEtVbml0IHRlc3QgaW50ZWdyaXR5LiBUaGlzIHN5c3RlbWF0aWMgYXBwcm9hY2ggZW5zdXJlcyBJIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjM1LjY1NTMxODk2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA0ODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jPTg3MD1zdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTkxMC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYzo5MTE6c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy05MTItXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYz05Mjc9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTkyOC1cXHQubmFtZSA9IFxcXCJtY3RwLXVzYmxpYlxcXCIsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmM6OTI5OlxcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy05MzAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6MzUuNzAwMzcyNDk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ3NDA5MTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFdvcnRoRnV6emluZyBmb3IgTm9uLUV4ZWN1dGFibGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHF1aWNrbHkgY2xhcmlmeSB0aGUgV29ydGhGdXp6aW5nIHJ1bGVzIHJlZ2FyZGluZyB1bml0IHRlc3RzLCBzcGVjaWZpY2FsbHkgS1VuaXQgdGVzdHMsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG5vbi1leGVjdXRhYmxlIG1vZGlmaWNhdGlvbnMuIFNlY3Rpb24gMiBvdXRsaW5lcyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEsIHRoZSBzY2VuYXJpb3Mgd2hlcmUgd2UnZCBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoYXQgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyBhcmUgZ2VuZXJhbGx5IGV4Y2x1ZGVkLiBUaGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGNvbW1lbnRzLCBzcGVsbGluZyBjb3JyZWN0aW9ucywgYW5kIGFueXRoaW5nIGluIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSB0b29scywgc2FtcGxlcywgc2NyaXB0cywgaWYgdGhleSBkb24ndCBpbXBhY3QgdGhlIGNvcmUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBtb2R1bGVzLCBhcmUgdHlwaWNhbGx5IGEgbm8tZ28gZm9yIGZ1enppbmcuIEFsc28gZGVjb3JhdGl2ZSBsb2dnaW5nIGFuZCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIEMgbG9naWMgYXJlIGFsc28gZXhjbHVkZWQuXG5cbkJ1dCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyDigJMgaXMgYSBLVW5pdCB0ZXN0IGNvbnNpZGVyZWQgc2VsZi10ZXN0IGNvZGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjay4gTGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gYXNzZXNzIGEgc3BlY2lmaWMgZXhhbXBsZSBmaWxlLCBzYXkgYG1jdHAtdXNibGliLXRlc3QuY2AsIHRvIGZpZ3VyZSBvdXQgaXRzIG5hdHVyZS4gV2hhdCBleGFjdGx5ICppcyogdGhpcyBmaWxlIGRvaW5nPyBBbmQgdGhlbiwgY3J1Y2lhbCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIHNldHRpbmdzIGZvciBgbWN0cC11c2JsaWItdGVzdC5jYCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBhbmQgY29tcGlsZWQuIFRoYXQnbGwgdGVsbCBtZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjQwLjE3NDQ2NjQ4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYzNTc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwLXVzYmxpYi10ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTItLypcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYzozOiAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTQtICogdW5pdCB0ZXN0IGRlZmluaXRpb25zLlxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTYyMT1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5XFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNjIzLSNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjI0OiNpbmNsdWRlIFxcXCJtY3RwLXVzYmxpYi10ZXN0LmNcXFwiXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NDAuMjI2MTEwMjkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5OTM2ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgQ2hlY2sgZm9yIFVTQmxpYiBUZXN0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIEtjb25maWcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVGAuIElzIGl0IGVuYWJsZWQ/IERpc2FibGVkPyBEb2VzIGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZCBvbiBvdGhlciBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciBjb25maWd1cmluZyBhIHJlbGF0ZWQgZmVhdHVyZSwgYW5kIGEgcXVpY2sgS2NvbmZpZyBjaGVjayB3aWxsIGdpdmUgbWUgdGhlIGZvdW5kYXRpb25hbCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgaG93IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjkyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NDIuMTI1NDgyNjMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQ4NzU0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTUwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01OS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcXFwiTUNUUCB1c2JsaWIgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz02MjE9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeVxcXCIpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy02MjItXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjYyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1QpXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNC0jaW5jbHVkZSBcXFwibWN0cC11c2JsaWItdGVzdC5jXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzoyNjo0My43NjAzODQxODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTg3MDA3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBtY3RwLXVzYmxpYi10ZXN0LmNgIGlzIHRoZSBvbmx5IGZpbGUgY2hhbmdlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIFNpbmNlIHRoaXMgaXMgaW4gdGhlIGNvbnRleHQgb2YgS1VuaXQgdGVzdHMsIEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgZXZlbiAqY29uc2lkZXJzKiBLVW5pdCB0ZXN0cyB0byBiZSBwYXJ0IG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgb3IgaWYgdGhleSBhcmUgc2VwYXJhdGUgZXhlY3V0aW9uIHBhdGhzIG9ubHkgZm9yIHRlc3RpbmcgYXQgYm9vdCBvciBtb2R1bGUgbG9hZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGZvciBmdXp6aW5nLlxuXG5MZXQncyByZS1yZWFkIHRoZSBndWlkZWxpbmVzOyBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFXCIuIFRoZSBkb2N1bWVudGF0aW9uIGVtcGhhc2l6ZXMgdGhhdCBmdXp6aW5nIHNob3VsZCBvbmx5IHRhcmdldCBjb2RlIHRoYXQncyByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSBHQ0Ugb3IgUUVNVSwgYW5kIHZpYSBzeXNjYWxscywgb3IgZW11bGF0ZWQgZGV2aWNlcy4gTm90IGNvZGUgdGhhdCBydW5zIGluIGEgdW5pdCB0ZXN0IGhhcm5lc3MuXG5cblRoZSBndWlkZWxpbmVzIGFsc28gc2F5IHRvIGV4Y2x1ZGUgdGhpbmdzIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgYW5kIHNhbXBsZXMsIGFuZCBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgYC91c3IvYCBgL3Rvb2xzL2AgYC9zYW1wbGVzL2AgYW5kIGAvc2NyaXB0cy9gIGFzIHRoaW5ncyB0byBza2lwLCBpZiB0aGV5IGRvbid0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIG9yIGtlcm5lbCBtb2R1bGVzLlxuXG5BaCwgcmlnaHQhIEtVbml0IHRlc3RzIGFyZSB1bml0IHRlc3RzLiBUaGV5J3JlIG5vdCBydW50aW1lIGtlcm5lbCBjb2RlLiBUaGV5IGV4ZWN1dGUgd2hlbiB0aGUga2VybmVsIHN0YXJ0cyBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIG9yIGlmIHRyaWdnZXJlZCBieSBkZWJ1Z2ZzLiBUaGV5IHJ1biBpbiBhIHN5bnRoZXRpYyBzY2VuYXJpbyB3aXRoaW4gdGhlIEtVbml0IGhhcm5lc3MuIFRoZXkncmUgc2VsZi10ZXN0cyBhbmQgdW5pdCB0ZXN0cyB0aGF0IHJ1biBhdCBhIGRpZmZlcmVudCBzdGFnZS4gU28sIGl0J3MgcHJldHR5IGNsZWFyOiBzeXprYWxsZXIgKHdpdGggaXRzIGZvY3VzIG9uIHN5c2NhbGxzLCBkZXZpY2UgaW50ZXJhY3Rpb24sIGFuZCBzbyBvbikgd29uJ3QgcmVhY2ggdGhpcyBjb2RlLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSB3YXNuJ3QgYSBoaWRkZW4gY2hhbmdlIHRvIGBtY3RwLXVzYmxpYi5jYCBpdHNlbGYuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbW1pdCBkaWZmLCBpdCdzIGNsZWFyOlxuYGBgZGlmZlxuY29tbWl0IGVkODAzM2IzNzA1YTM0YzQ3OWVmMGQ0ZTkzNWI3MmZjYjQ0NTQ1ZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjI2OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuaW5kZXggOWRmNDAxYTkxNGZmNS4uMjVlYWM4MGRiM2UyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuYGBgXG5Ob3BlLiAqT25seSogYG1jdHAtdXNibGliLXRlc3QuY2Agd2FzIHRvdWNoZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBjb21taXQuIENoZWNraW5nIHRoZSBnaXQgbG9ncyBhbmQgdGhlIGZpbGVzIG1vZGlmaWVkLCBjb25maXJtcyB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgZmlsZSBhZmZlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NTIuNzQ3MzkzNzU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuICA1MTpcXHRcXHR0cmlzdGF0ZSBcXFwiTUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVxcXCJcXG4gIDUyOlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICA1MzpcXHRcXHRoZWxwXFxuICA1NDpcXHRcXHQgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0XFxuICA1NTpcXHRcXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcXG4gIDU2OlxcdFxcdCAgdHJhbnNwb3J0IGRyaXZlclxcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXFxuICA1OTpcXHRcXG4gIDYwOlxcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbiAgNjE6XFx0ICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNjI6XFx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDYzOlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDY0OlxcdFxcbiAgNjU6XFx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbiAgNjY6XFx0XFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICA2ODpcXHRcXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuICA2OTpcXHRcXHRoZWxwXFxuICA3MDpcXHRcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiAgNzE6XFx0XFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHQgIE1DVFAtb3Zlci1VU0IgaW50ZXJmYWNlcyBhcmUgcGVlci10by1wZWVyLCBzbyBlYWNoIGludGVyZmFjZVxcbiAgNzQ6XFx0XFx0ICByZXByZXNlbnRzIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB0byBvbmUgcmVtb3RlIE1DVFAgZW5kcG9pbnQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGVuZG1lbnVcXG4gIDc3OlxcdFxcbiAgNzg6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NTIuNzQ3NDU3MDY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3OTY1NjE1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRhc2tlZCB3aXRoIGV2YWx1YXRpbmcgdGhpcyBwYXRjaCBmb3IgZnV6emluZyBwb3RlbnRpYWwuIE15IGluaXRpYWwgY2hlY2sgY29uZmlybXMgdGhhdCB0aGUgbW9kaWZpZWQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWN0cC11c2JsaWItdGVzdC5jYCwgaXMgcGFydCBvZiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSBmb3IgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5LiBTaW5jZSBLVW5pdCB0ZXN0cyBhcmUgZXhwbGljaXRseSBkZXNpZ25lZCB0byBiZSAqbm9uLWZ1enphYmxlKiDigJMgdGhleSBleGVjdXRlIGR1cmluZyBib290L3Rlc3QgcnVucyBhbmQgYXJlbid0IGFjY2Vzc2libGUgZHVyaW5nIHJ1bnRpbWUgZnV6emluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciDigJMgSSdtIGxlYW5pbmcgdG93YXJkcyBhIFwibm8gZ29cIiBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlc2Ugc2VsZi10ZXN0IGNhc2VzLCB0aGV5IGFyZW4ndCBnb2luZyB0byBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgYWNjZXNzaWJsZSBkdXJpbmcgbm9ybWFsIHN5c3RlbSBvcGVyYXRpb24uXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbnMgYXJlIGNsZWFyOiB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBjb25maWd1cmF0aW9uIHdvdWxkIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUpXG4qICAgYEZvY3VzU3ltYm9sczogW11gIChubyBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgYXR0ZW50aW9uKVxuKiAgIGBSZWFzb25pbmc6IFRoZSBwYXRjaCBzb2xlbHkgYWx0ZXJzIEtVbml0IHRlc3QgY2FzZXMgd2l0aGluIGBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY2AgZm9yIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeS4gSXQgZG9lc24ndCBtb2RpZnkgYW55IHJ1bnRpbWUgZHJpdmVyIG9yIGtlcm5lbCBsb2dpYyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCB2aWEgc3l6a2FsbGVyIGZ1enppbmcuKVxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSdtIGp1c3QgZ29pbmcgdG8gdmVyaWZ5IHRoYXQgbXkgbWVudGFsIHBpY3R1cmUgaXMgYWNjdXJhdGUuIFdvcnRoRnV6emluZzogZmFsc2UsIEVuYWJsZUNvbmZpZ3MgaXMgYW4gZW1wdHkgYXJyYXksIEZvY3VzU3ltYm9scyBpcyBlbXB0eSwgYW5kIHRoZSByZWFzb25pbmcgZXhwbGFpbnMgd2h5LCBzdWNjaW5jdGx5LiBZdXAsIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg2LCJPdXRwdXRUb2tlbnMiOjc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NTYuNTQ0MDIxMzc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1VuaXQgdGVzdCBjYXNlcyBpbiBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJ1bnRpbWUgZHJpdmVyIG9yIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcgc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzoyNjo1Ni41NDQwNDU1OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowfdfnn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 03:24:42 +0000 UTC FinishedAt: 2026-09-04 03:26:58 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZDgwMzNiMzcwNWEzNGM0NzllZjBkNGU5MzViNzJmY2I0NDU0NWZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMzoyNjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5pbmRleCA5ZGY0MDFhOTE0ZmY1Li4yNWVhYzgwZGIzZTJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG5AQCAtMTQsNiAmIzQzOzE1LDE1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21jdHBkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXHUwMDNlXG4gXG4mIzQzOyNkZWZpbmUgSERSX0xFTiBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcilcbiYjNDM7XG4mIzQzO3N0cnVjdCB0eF9idWZmIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1xuJiM0MztcdHNpemVfdCBsZW5ndGg7XG4mIzQzO1x0dTggZGF0YVtdIF9fY291bnRlZF9ieShsZW5ndGgpO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4gXHRzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7XG5AQCAtMjIsOSAmIzQzOzMyLDEwNCBAQCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xuIFxuIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XG4gXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHR4X3hmZXJzO1xuIFx0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuJiM0MztcdFx0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IHR4X2J1ZmYgKm5ld19ub2RlO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpO1xuJiM0MztcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4mIzQzO1xuJiM0MztcdG5ld19ub2RlID0ga3phbGxvY19mbGV4KCpuZXdfbm9kZSwgZGF0YSwgbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW5ld19ub2RlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG5ld19ub2RlLVx1MDAzZWxlbmd0aCA9IGxlbjtcbiYjNDM7XHRtZW1jcHkobmV3X25vZGUtXHUwMDNlZGF0YSwgZGF0YSwgbGVuKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNm5ld19ub2RlLVx1MDAzZWxpc3QsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycyk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZGV2LCB0cnVlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdFx0XHQgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppbixcbiYjNDM7XHRcdFx0XHRcdCAgICBzaXplX3QgKmxlbmd0aF9vdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdHhfYnVmZiAqcG9zO1xuJiM0MztcdHNpemVfdCBsZW5ndGg7XG4mIzQzO1x0dTggKmJ1ZiwgKnRhaWw7XG4mIzQzO1xuJiM0MztcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGxlbmd0aF9vdXQpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGluKTtcbiYjNDM7XG4mIzQzO1x0bGVuZ3RoID0gMDtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaW4sIGxpc3QpXG4mIzQzO1x0XHRsZW5ndGggPSBzaXplX2FkZChsZW5ndGgsIHBvcy1cdTAwM2VsZW5ndGgpO1xuJiM0MztcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCAwKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCBTSVpFX01BWCk7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmKTtcbiYjNDM7XG4mIzQzO1x0dGFpbCA9IGJ1ZjtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaW4sIGxpc3QpIHtcbiYjNDM7XHRcdG1lbWNweSh0YWlsLCBwb3MtXHUwMDNlZGF0YSwgcG9zLVx1MDAzZWxlbmd0aCk7XG4mIzQzO1x0XHR0YWlsICYjNDM7PSBwb3MtXHUwMDNlbGVuZ3RoO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Kmxlbmd0aF9vdXQgPSBsZW5ndGg7XG4mIzQzO1x0cmV0dXJuIGJ1ZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4ICptY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IGxlbmd0aClcbiYjNDM7e1xuJiM0MztcdHU4ICpidWZmZXI7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGJ1ZmZlciA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmZmVyKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuZ3RoOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJ1ZmZlcltpXSA9IGkgJSAyNTY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidWZmZXI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhlYWQsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRsZW4gJiM0Mzs9IEhEUl9MRU47XG4mIzQzO1x0aGVhZC1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuJiM0MztcdGhlYWQtXHUwMDNlbGVuID0gY3B1X3RvX2JlMTYobGVuIFx1MDAyNiBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4mIzQzO1xuJiM0MztcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEsIGxlbmd0aCk7XG4mIzQzO1x0cmV0dXJuIHNrYjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG5AQCAtMTE3LDYgJiM0MzsyMjIsNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCxcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xuJiM0MztcdHN0cnVjdCB0eF9idWZmICpjdXJyLCAqdGVtcDtcbiBcbiBcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cbiBcdCAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLlxuQEAgLTEyNCw2ICYjNDM7MjMwLDggQEAgc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxuIFx0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cdTAwM2VrdW5pdF90ZXN0LFxuIFx0XHRcdCAgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VydC5yZWZzKSk7XG4gXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIHRlbXAsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycywgbGlzdClcbiYjNDM7XHRcdGtmcmVlKGN1cnIpO1xuIFx0a2ZyZWUoY3R4KTtcbiB9XG4gXG5AQCAtMTM5LDYgJiM0MzsyNDcsNyBAQCBzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QpO1xuIFx0cnQgPSBcdTAwMjZjdHgtXHUwMDNlcnQ7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2cnQtXHUwMDNlcmVmcywgMSk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKTtcbiBcbiBcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbkBAIC0yMDAsMTEgJiM0MzszMDksOSBAQCBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pXG4gXHRpbnQgcmM7XG4gXG4gXHRyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7XG4tXHRpZiAocngpIHtcbi1cdFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XG4tXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4tXHR9XG4gXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4gXG4gXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuQEAgLTIyNyw2ICYjNDM7MzM0LDMyIEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYWN0aW9uX3R4X2Zpbmkodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHggPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9maW5pKHR4KTtcbiYjNDM7XHRrZnJlZSh0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKlxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxuJiM0MztcdFx0XHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHR4ID0ga3phbGxvY19vYmooKnR4KTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgdHgpO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fdHhfZmluaSwgdHgpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2luaXQodHgsIG9wcywgcHJpdiwgc3Bhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0eDtcbiYjNDM7fVxuJiM0MztcbiAvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4gICogdGhlIHRyYW5zZmVyXG4gICovXG5AQCAtMzc4LDI5ICYjNDM7NTExLDQxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbiBcdHsgXCYjMzQ7MXAxeC1jb21wbGV0ZVwmIzM0OywgMSwgeyA4IH0sIDEsIHsgOCB9IH0sXG4gXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXG4gXHR7IFwmIzM0OzJwMXgtY29tYmluZWRcJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSxcbi1cdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqL1xuLVx0eyBcJiMzNDsxcDJ4LXNwbGl0LXBheWxvYWRcJiMzNDssIDEsIHsgMTYgfSwgMiwgeyA4LCA4IH0gfSxcbi1cdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4tXHR7IFwmIzM0OzFwMngtc3BsaXQtdXNiaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgMiwgMTQgfSB9LFxuLVx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cbi1cdHsgXCYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LFxuIFx0LyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovXG4gXHR7IFwmIzM0OzFwM3gtc3BsaXRcJiMzNDssIDEsIHsgMTIgfSwgMywgeyA0LCA0LCA0IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIDUgdHJhbnNmZXJzLCBzcGxpdHRpbmcgb24gYW5kIGJldHdlZW4gZWFjaCBoZWFkZXIuICovXG4mIzQzO1x0eyBcJiMzNDsxcDV4LXNwbGl0XCYjMzQ7LCAxLCB7IDEyIH0sIDUsIHsgMywgMSwgMSwgMywgNH19LFxuIFx0LyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqL1xuIFx0eyBcJiMzNDsxcDF4LWxhcmdlXCYjMzQ7LCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSxcbiBcdC8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhXG4gXHQgKiBzaW5nbGUgYnl0ZSBjb250aW51aW5nIHRoZSBzcGFuXG4gXHQgKi9cbi1cdHsgXCYjMzQ7MnAyeC1sYXJnZS1zcGxpdFwmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4mIzQzO1x0eyBcJiMzNDsycDJ4LWxhcmdlLXNwbGl0XCYjMzQ7LCAyLCB7IDgxOTAsIDgxOTEgfSwgMiwgeyA4MTkxLCA4MTkwIH0gfSxcbiYjNDM7XHQvKiBUaHJlZSBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbixcbiYjNDM7XHQgKiB3aXRoIGEgc2luZ2xlIGJ5dGUgY29udGludWluZyBlYWNoIHNwYW5cbiYjNDM7XHQgKi9cbiYjNDM7XHR7IFwmIzM0OzNwM3gtbGFyZ2Utc3BsaXRcJiMzNDssIDMsIHsgODE5MCwgODE5MSwgODE5MSB9LCAzLCB7IDgxOTEsIDgxOTEsIDgxOTAgfSB9LFxuIH07XG4gXG4gS1VOSVRfQVJSQVlfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbiwgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnMsXG4gXHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0c2l6ZV90IGJ1ZmxlbiwgbGVuO1xuJiM0MztcdHU4IHBhY2tldFsxNl07XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHBhY2tldCk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwYWNrZXQsIGxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGJ1ZiwgcGFja2V0LCBvZmZzZXQpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBvZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBcdTAwMjZidWYsIFx1MDAyNmJ1ZmxlbixcbiYjNDM7XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGJ1ZiwgcGFja2V0ICYjNDM7IG9mZnNldCwgbGVuIC0gb2Zmc2V0KTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuIC0gb2Zmc2V0KTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgMSk7XG4mIzQzO1xuJiM0MztcdHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xuJiM0MztcdGlmIChza2IpIHtcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBsZW4gLSBIRFJfTEVOKTtcbiYjNDM7XHRcdGtmcmVlKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X2hlYWRlcl9zcGxpdHMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdC8qIFVucm9sbGluZyBoZXJlIHNvIHN0YWNrIHRyYWNlcyBwb2ludCB0byB0aGUgaW52b2NhdGlvbiB3aXRoIHRoZVxuJiM0MztcdCAqIGZhaWxpbmcgbGVuZ3RoLlxuJiM0MztcdCAqL1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDEsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDIsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDMsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDQsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDUsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDYsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDcsIGRldiwgcngpO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDgsIGRldiwgcngpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUZXN0IHRoZSBzdWJtaXNzaW9uIG9mIGEgcGFja2V0IHdpdGggYW4gaW1wb3NzaWJseSBzbWFsbCB2YWx1ZSBpbiB0aGVcbiYjNDM7ICogaGVhZGVyJiMzOTtzIGxlbmd0aCBmaWVsZC4gVmFsdWVzIGxlc3MgdGhhbiBIRFJfTEVOIGFyZSBpbnZhbGlkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaG9ydF9wYWNrZXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzaXplX3QgbGVuLCBidWZsZW47XG4mIzQzO1x0dTggcGt0YnVmWzEyXTtcbiYjNDM7XHR2b2lkICpidWY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4mIzQzO1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4mIzQzO1x0ZGV2ID0gY3R4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgSERSX0xFTiAtIDEpO1xuJiM0MztcbiYjNDM7XHRidWZsZW4gPSAwO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4mIzQzO1xuJiM0MztcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9pbnZhbGlkX2RtdGZfaWQoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzaXplX3QgbGVuLCBidWZsZW47XG4mIzQzO1x0dTggcGt0YnVmWzEyXTtcbiYjNDM7XHR2b2lkICpidWY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4mIzQzO1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4mIzQzO1x0ZGV2ID0gY3R4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0Ly8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkXG4mIzQzO1x0cGt0YnVmWzFdID0gfnBrdGJ1ZlsxXTtcbiYjNDM7XG4mIzQzO1x0YnVmbGVuID0gMDtcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBcdTAwMjZidWYsIFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XG4mIzQzO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBsZW4pO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdHNpemVfdCBsZW4sIGJ1ZmxlbjtcbiYjNDM7XHR1OCBwa3RidWZbM107XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRidWZsZW4gPSAwO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4mIzQzO1xuJiM0MztcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRU5PTVNHKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ19wYXJ0aWFsKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4mIzQzO1x0c2l6ZV90IGxlbiwgYnVmbGVuO1xuJiM0MztcdHU4IHBrdGJ1ZlsyMF07XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4gJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdGJ1ZmxlbiA9IDA7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FUFJPVE8pO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiX2hkciBoZWFkO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0c2l6ZV90IGxlbiwgdHhfbGVuO1xuJiM0MztcdHU4ICpidWYsICpmbGF0X3R4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bGVuID0gMTAwMDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4mIzQzO1xuJiM0MztcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kO1xuJiM0MztcbiYjNDM7XHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbGVuKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcdTAwMjZoZWFkLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycykpO1xuJiM0MztcbiYjNDM7XHRmbGF0X3R4ID0gbWN0cF91c2JsaWJfdGVzdF9mbGF0dGVuX3R4X2J1ZmYodGVzdCwgXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZ0eF9sZW4pO1xuJiM0MztcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBmbGF0X3R4KTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHR4X2xlbiwgbGVuICYjNDM7IEhEUl9MRU4pO1xuJiM0MztcdEtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBmbGF0X3R4LCBcdTAwMjZoZWFkLCBIRFJfTEVOKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCAmIzQzOyBIRFJfTEVOLCBidWYsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfZmFpbGluZ19zZW5kKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRzaXplX3QgbGVuO1xuJiM0MztcdHU4ICpidWY7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRsZW4gPSAxMDA7XG4mIzQzO1xuJiM0MztcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbiYjNDM7XHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuJiM0MztcbiYjNDM7XHRvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZF9mYWlsO1xuJiM0MztcbiYjNDM7XHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgZmFsc2UpO1xuJiM0MztcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbGVuKTtcbiYjNDM7XHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbiYjNDM7XG4mIzQzO1x0LyogRG9lc24mIzM5O3QgY2FsbCBvcHMuc2VuZCBhcyBtb3JlIHBhY2tldHMgYXJlIGV4cGVjdGVkLFxuJiM0MztcdCAqIHNvIHRoZSBwdXNoIHNob3VsZG4mIzM5O3QgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgdHJ1ZSk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIENhbGxzIG9wcy5zZW5kIGFzIG5vIGZ1cnRoZXIgcGFja2V0cyBhcmUgZXhwZWN0ZWQuICovXG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHR4LVx1MDAzZWN1cl9jdHgpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGxpc3RfZW1wdHkoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlc3Qgc2VuZGluZyBtdWx0aXBsZSBwYWNrZXRzIGluIHRoZSBzYW1lIHRyYW5zZmVyLCBmb2xsb3dlZCBieSBvbmUgdGhhdFxuJiM0MzsgKiBzcGFucyBtdWx0aXBsZSBzdWJzZXF1ZW50IHRyYW5zZmVycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfbXVsdGlfcHVzaChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzaXplX3QgaSwgbWF4X2xlbmd0aCwgdHhfbGVuZ3RoO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xuJiM0MztcdHU4ICpidWYsICpmbGF0X3R4LCAqaW5kZXg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB7XG4mIzQzO1x0XHRzaXplX3QgbGVuO1xuJiM0MztcdFx0Ym9vbCBtb3JlO1xuJiM0MztcdH0gc2VuZHNbXSA9IHtcbiYjNDM7XHRcdHsgMTAwMCwgdHJ1ZSAgfSxcbiYjNDM7XHRcdHsgIDUwMCwgZmFsc2UgfSxcbiYjNDM7XHRcdHsgNTAwMCwgZmFsc2UgfSxcbiYjNDM7XHR9O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0c3RhdGljX2Fzc2VydCghc2VuZHNbQVJSQVlfU0laRShzZW5kcykgLSAxXS5tb3JlLFxuJiM0MztcdFx0ICAgICAgXCYjMzQ7VGhlIGxhc3QgcHVzaCBtdXN0IGNsYWltIHRoZXJlIHdpbGwgYmUgbm8gbW9yZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG1heF9sZW5ndGggPSAwO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2VuZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNlbmRzW2ldLmxlbiBcdTAwM2UgbWF4X2xlbmd0aClcbiYjNDM7XHRcdFx0bWF4X2xlbmd0aCA9IHNlbmRzW2ldLmxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbiYjNDM7XHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuJiM0MztcbiYjNDM7XHRvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZDtcbiYjNDM7XG4mIzQzO1x0dHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgXHUwMDI2b3BzLCBjdHgsIHRydWUpO1xuJiM0MztcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbWF4X2xlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2VuZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBzZW5kc1tpXS5sZW4sIG5kZXYsIGJ1Zik7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIHNlbmRzW2ldLm1vcmUpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0ZBTFNFKHRlc3QsIGxpc3RfZW1wdHkoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKSk7XG4mIzQzO1xuJiM0MztcdGZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCBcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFx1MDAyNnR4X2xlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDAsIGluZGV4ID0gZmxhdF90eDsgaSBcdTAwM2MgQVJSQVlfU0laRShzZW5kcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzaXplX3QgbGVuZ3RoX3RvX2NoZWNrLCByZW1haW5pbmdfYnl0ZXM7XG4mIzQzO1x0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyIGhlYWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZGV4IC0gZmxhdF90eCBcdTAwM2U9IHR4X2xlbmd0aCAtIEhEUl9MRU4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKFx1MDAyNmhlYWQsIHNlbmRzW2ldLmxlbik7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgaW5kZXgsIFx1MDAyNmhlYWQsIEhEUl9MRU4pO1xuJiM0MztcdFx0aW5kZXggJiM0Mzs9IEhEUl9MRU47XG4mIzQzO1x0XHRyZW1haW5pbmdfYnl0ZXMgPSB0eF9sZW5ndGggLSAoaW5kZXggLSBmbGF0X3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRsZW5ndGhfdG9fY2hlY2sgPSBzZW5kc1tpXS5sZW47XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spO1xuJiM0MztcdFx0bGVuZ3RoX3RvX2NoZWNrID0gbWluKHJlbWFpbmluZ19ieXRlcywgbGVuZ3RoX3RvX2NoZWNrKTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICAgYnVmLCBsZW5ndGhfdG9fY2hlY2spO1xuJiM0MztcbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBsZW5ndGhfdG9fY2hlY2s7XG4mIzQzO1x0fVxuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBBUlJBWV9TSVpFKHNlbmRzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfb3ZlcmZsb3coc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHM7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XHRzaXplX3QgbGVuLCBpO1xuJiM0MztcdHU2NCBzdGF0cztcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bGVuID0gMjAwO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4mIzQzO1x0bmRldiA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmRldjtcbiYjNDM7XG4mIzQzO1x0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDtcbiYjNDM7XG4mIzQzO1x0dHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgXHUwMDI2b3BzLCBjdHgsIGZhbHNlKTtcbiYjNDM7XHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XG4mIzQzO1xuJiM0MztcdGRzdGF0cyA9IGdldF9jcHVfcHRyKG5kZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGkgIT0gMik7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdHN0YXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbiYjNDM7XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuJiM0MztcdHB1dF9jcHVfcHRyKGRzdGF0cyk7XG4mIzQzO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzdGF0cywgMyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxuIFx0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuIFx0XHRcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9oZWFkZXJfc3BsaXRzKSxcbiYjNDM7XHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2hvcnRfcGFja2V0KSxcbiYjNDM7XHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaW52YWxpZF9kbXRmX2lkKSxcbiYjNDM7XHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueSksXG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9wa3Rfc3BhbiksXG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X211bHRpX3B1c2gpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQpLFxuJiM0MztcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyksXG4gXHR7fVxuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZDgwMzNiMzcwNWEzNGM0NzllZjBkNGU5MzViNzJmY2I0NDU0NWZlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMzoyNjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMKaW5kZXggOWRmNDAxYTkxNGZmNS4uMjVlYWM4MGRiM2UyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGQKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FycmF5X3NpemUuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2t1bml0L3Rlc3QuaCZndDsKQEAgLTE0LDYgJiM0MzsxNSwxNSBAQAogI2luY2x1ZGUgJmx0O25ldC9tY3RwZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiAKJiM0MzsjZGVmaW5lIEhEUl9MRU4gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpCiYjNDM7CiYjNDM7c3RydWN0IHR4X2J1ZmYgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7CiYjNDM7CXNpemVfdCBsZW5ndGg7CiYjNDM7CXU4IGRhdGFbXSBfX2NvdW50ZWRfYnkobGVuZ3RoKTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgbWN0cF9kZXYgKm1kZXY7CkBAIC0yMiw5ICYjNDM7MzIsMTA0IEBAIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7CiAKIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7CiAJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgdHhfeGZlcnM7CiAJc3RydWN0IG1jdHBfcm91dGUgcnQ7CiB9OwogCiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LAomIzQzOwkJCQkgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgdHhfYnVmZiAqbmV3X25vZGU7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpOwomIzQzOwluZGV2ID0gY3R4LSZndDtkZXYtJmd0O25kZXY7CiYjNDM7CiYjNDM7CW5ld19ub2RlID0ga3phbGxvY19mbGV4KCpuZXdfbm9kZSwgZGF0YSwgbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFuZXdfbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwluZXdfbm9kZS0mZ3Q7bGVuZ3RoID0gbGVuOwomIzQzOwltZW1jcHkobmV3X25vZGUtJmd0O2RhdGEsIGRhdGEsIGxlbik7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtuZXdfbm9kZS0mZ3Q7bGlzdCwgJmFtcDtjdHgtJmd0O3R4X3hmZXJzKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5kZXYsIHRydWUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsCiYjNDM7CQkJCQkgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICppbiwKJiM0MzsJCQkJCSAgICBzaXplX3QgKmxlbmd0aF9vdXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdHhfYnVmZiAqcG9zOwomIzQzOwlzaXplX3QgbGVuZ3RoOwomIzQzOwl1OCAqYnVmLCAqdGFpbDsKJiM0MzsKJiM0MzsJS1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgbGVuZ3RoX291dCk7CiYjNDM7CUtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGluKTsKJiM0MzsKJiM0MzsJbGVuZ3RoID0gMDsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGluLCBsaXN0KQomIzQzOwkJbGVuZ3RoID0gc2l6ZV9hZGQobGVuZ3RoLCBwb3MtJmd0O2xlbmd0aCk7CiYjNDM7CiYjNDM7CUtVTklUX0FTU0VSVF9ORSh0ZXN0LCBsZW5ndGgsIDApOwomIzQzOwlLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCBTSVpFX01BWCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJ1Zik7CiYjNDM7CiYjNDM7CXRhaWwgPSBidWY7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBpbiwgbGlzdCkgewomIzQzOwkJbWVtY3B5KHRhaWwsIHBvcy0mZ3Q7ZGF0YSwgcG9zLSZndDtsZW5ndGgpOwomIzQzOwkJdGFpbCAmIzQzOz0gcG9zLSZndDtsZW5ndGg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmxlbmd0aF9vdXQgPSBsZW5ndGg7CiYjNDM7CXJldHVybiBidWY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCAqbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1ZihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBsZW5ndGgpCiYjNDM7ewomIzQzOwl1OCAqYnVmZmVyOwomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJYnVmZmVyID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBsZW5ndGgsIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmZmVyKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbmd0aDsgaSYjNDM7JiM0MzspCiYjNDM7CQlidWZmZXJbaV0gPSBpICUgMjU2OwomIzQzOwomIzQzOwlyZXR1cm4gYnVmZmVyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZWFkLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJbGVuICYjNDM7PSBIRFJfTEVOOwomIzQzOwloZWFkLSZndDtpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpOwomIzQzOwloZWFkLSZndDtsZW4gPSBjcHVfdG9fYmUxNihsZW4gJmFtcDsgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2Ioc3RydWN0IGt1bml0ICp0ZXN0LAomIzQzOwkJCQkJCSB1bnNpZ25lZCBpbnQgbGVuZ3RoLAomIzQzOwkJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJCQkgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBsZW5ndGgsIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgc2tiKTsKJiM0MzsKJiM0MzsJc2tiX3B1dF9kYXRhKHNrYiwgZGF0YSwgbGVuZ3RoKTsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CkBAIC0xMTcsNiAmIzQzOzIyMiw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LAogc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTsKJiM0MzsJc3RydWN0IHR4X2J1ZmYgKmN1cnIsICp0ZW1wOwogCiAJLyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC0mZ3Q7cnQgd2lsbCBiZSB1bmxpbmtlZC4KIAkgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC4KQEAgLTEyNCw2ICYjNDM7MjMwLDggQEAgc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKQogCUtVTklUX0VYUEVDVF9UUlVFKGN1cnJlbnQtJmd0O2t1bml0X3Rlc3QsCiAJCQkgIHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2N0eC0mZ3Q7cnQucmVmcykpOwogCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyLCB0ZW1wLCAmYW1wO2N0eC0mZ3Q7dHhfeGZlcnMsIGxpc3QpCiYjNDM7CQlrZnJlZShjdXJyKTsKIAlrZnJlZShjdHgpOwogfQogCkBAIC0xMzksNiAmIzQzOzI0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3J0Lmxpc3QpOwogCXJ0ID0gJmFtcDtjdHgtJmd0O3J0OwogCXJlZmNvdW50X3NldCgmYW1wO3J0LSZndDtyZWZzLCAxKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3R4X3hmZXJzKTsKIAogCXJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpOwogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CkBAIC0yMDAsMTEgJiM0MzszMDksOSBAQCBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0LCBib29sIHNwYW4pCiAJaW50IHJjOwogCiAJcnggPSBremFsbG9jX29iaigqcngpOwotCWlmIChyeCkgewotCQlyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTsKLQkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKLQl9CiAJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiAKIAlyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7CiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKQEAgLTIyNyw2ICYjNDM7MzM0LDMyIEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiByYzsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFjdGlvbl90eF9maW5pKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4ID0gZGF0YTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfZmluaSh0eCk7CiYjNDM7CWtmcmVlKHR4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqCiYjNDM7bWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLAomIzQzOwkJCSB2b2lkICpwcml2LCBib29sIHNwYW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4OwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXR4ID0ga3phbGxvY19vYmooKnR4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHR4KTsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl90eF9maW5pLCB0eCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3R4X2luaXQodHgsIG9wcywgcHJpdiwgc3Bhbik7CiYjNDM7CiYjNDM7CXJldHVybiB0eDsKJiM0Mzt9CiYjNDM7CiAvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluCiAgKiB0aGUgdHJhbnNmZXIKICAqLwpAQCAtMzc4LDI5ICYjNDM7NTExLDQxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHsKIAl7ICYjMzQ7MXAxeC1jb21wbGV0ZSYjMzQ7LCAxLCB7IDggfSwgMSwgeyA4IH0gfSwKIAkvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovCiAJeyAmIzM0OzJwMXgtY29tYmluZWQmIzM0OywgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LAotCS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqLwotCXsgJiMzNDsxcDJ4LXNwbGl0LXBheWxvYWQmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LAotCS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovCi0JeyAmIzM0OzFwMngtc3BsaXQtdXNiaGRyJiMzNDssIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sCi0JLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi8KLQl7ICYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyJiMzNDssIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sCiAJLyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovCiAJeyAmIzM0OzFwM3gtc3BsaXQmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LAomIzQzOwkvKiBBIHBhY2tldCBzcGxpdCBvdmVyIDUgdHJhbnNmZXJzLCBzcGxpdHRpbmcgb24gYW5kIGJldHdlZW4gZWFjaCBoZWFkZXIuICovCiYjNDM7CXsgJiMzNDsxcDV4LXNwbGl0JiMzNDssIDEsIHsgMTIgfSwgNSwgeyAzLCAxLCAxLCAzLCA0fX0sCiAJLyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqLwogCXsgJiMzNDsxcDF4LWxhcmdlJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LAogCS8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhCiAJICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhbgogCSAqLwotCXsgJiMzNDsycDJ4LWxhcmdlLXNwbGl0JiMzNDssIDIsIHsgODE5MCwgODE5MCB9LCAyLCB7IDgxOTEsIDgxODkgfSB9LAomIzQzOwl7ICYjMzQ7MnAyeC1sYXJnZS1zcGxpdCYjMzQ7LCAyLCB7IDgxOTAsIDgxOTEgfSwgMiwgeyA4MTkxLCA4MTkwIH0gfSwKJiM0MzsJLyogVGhyZWUgbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sCiYjNDM7CSAqIHdpdGggYSBzaW5nbGUgYnl0ZSBjb250aW51aW5nIGVhY2ggc3BhbgomIzQzOwkgKi8KJiM0MzsJeyAmIzM0OzNwM3gtbGFyZ2Utc3BsaXQmIzM0OywgMywgeyA4MTkwLCA4MTkxLCA4MTkxIH0sIDMsIHsgODE5MSwgODE5MSwgODE5MCB9IH0sCiB9OwogCiBLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucywKIAkJICBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MpOwogCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgb2Zmc2V0LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiwKJiM0MzsJCQkJCSAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBidWZsZW4sIGxlbjsKJiM0MzsJdTggcGFja2V0WzE2XTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWxlbiA9IHNpemVvZihwYWNrZXQpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBhY2tldCwgbGVuLCBsZW4pOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwgJmFtcDtidWYsICZhbXA7YnVmbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGFja2V0LCBvZmZzZXQpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIG9mZnNldCk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtJmd0O25kZXYsIHJ4LCAmYW1wO2J1ZiwgJmFtcDtidWZsZW4sCiYjNDM7CQkJCSAgICBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIGRldi0mZ3Q7cnhfcGt0cy5xbGVuLCAwKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGFja2V0ICYjNDM7IG9mZnNldCwgbGVuIC0gb2Zmc2V0KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCBsZW4gLSBvZmZzZXQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIDEpOwomIzQzOwomIzQzOwlza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7ZGV2LSZndDtyeF9wa3RzKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7CiYjNDM7CWlmIChza2IpIHsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItJmd0O2xlbiwgbGVuIC0gSERSX0xFTik7CiYjNDM7CQlrZnJlZShza2IpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwkvKiBVbnJvbGxpbmcgaGVyZSBzbyBzdGFjayB0cmFjZXMgcG9pbnQgdG8gdGhlIGludm9jYXRpb24gd2l0aCB0aGUKJiM0MzsJICogZmFpbGluZyBsZW5ndGguCiYjNDM7CSAqLwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCAxLCBkZXYsIHJ4KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgMiwgZGV2LCByeCk7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDMsIGRldiwgcngpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA0LCBkZXYsIHJ4KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgNSwgZGV2LCByeCk7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDYsIGRldiwgcngpOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA3LCBkZXYsIHJ4KTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgOCwgZGV2LCByeCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlc3QgdGhlIHN1Ym1pc3Npb24gb2YgYSBwYWNrZXQgd2l0aCBhbiBpbXBvc3NpYmx5IHNtYWxsIHZhbHVlIGluIHRoZQomIzQzOyAqIGhlYWRlciYjMzk7cyBsZW5ndGggZmllbGQuIFZhbHVlcyBsZXNzIHRoYW4gSERSX0xFTiBhcmUgaW52YWxpZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3Nob3J0X3BhY2tldChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CXNpemVfdCBsZW4sIGJ1ZmxlbjsKJiM0MzsJdTggcGt0YnVmWzEyXTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgSERSX0xFTiAtIDEpOwomIzQzOwomIzQzOwlidWZsZW4gPSAwOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwgJmFtcDtidWYsICZhbXA7YnVmbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIGxlbik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LSZndDtza2IpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X2ludmFsaWRfZG10Zl9pZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CXNpemVfdCBsZW4sIGJ1ZmxlbjsKJiM0MzsJdTggcGt0YnVmWzEyXTsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJcnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJLy8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkCiYjNDM7CXBrdGJ1ZlsxXSA9IH5wa3RidWZbMV07CiYjNDM7CiYjNDM7CWJ1ZmxlbiA9IDA7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtJmd0O25kZXYsIHJ4LCAmYW1wO2J1ZiwgJmFtcDtidWZsZW4sIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApOwomIzQzOwlLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pOwomIzQzOwomIzQzOwltZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LSZndDtuZGV2LCByeCwgbGVuKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTsKJiM0MzsJS1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtJmd0O3NrYik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtJmd0O3J4X3BrdHMucWxlbiwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7CiYjNDM7CXNpemVfdCBsZW4sIGJ1ZmxlbjsKJiM0MzsJdTggcGt0YnVmWzNdOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpOwomIzQzOwlyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCBmYWxzZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJYnVmbGVuID0gMDsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi0mZ3Q7bmRldiwgcngsICZhbXA7YnVmLCAmYW1wO2J1ZmxlbiwgR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CUtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7CiYjNDM7CiYjNDM7CW1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTsKJiM0MzsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCBsZW4pOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FTk9NU0cpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC0mZ3Q7c2tiKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi0mZ3Q7cnhfcGt0cy5xbGVuLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ19wYXJ0aWFsKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJc2l6ZV90IGxlbiwgYnVmbGVuOwomIzQzOwl1OCBwa3RidWZbMjBdOwomIzQzOwl2b2lkICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpOwomIzQzOwlyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCBmYWxzZSk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlsZW4gPSBzaXplb2YocGt0YnVmKTsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYsIGxlbiwgbGVuICYjNDM7IDEpOwomIzQzOwomIzQzOwlidWZsZW4gPSAwOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwgJmFtcDtidWYsICZhbXA7YnVmbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi0mZ3Q7bmRldiwgcngsIGxlbik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LSZndDtza2IpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LSZndDtyeF9wa3RzLnFsZW4sIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNiX2hkciBoZWFkOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJc2l6ZV90IGxlbiwgdHhfbGVuOwomIzQzOwl1OCAqYnVmLCAqZmxhdF90eDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsZW4gPSAxMDAwOwomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CW5kZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bmRldjsKJiM0MzsKJiM0MzsJb3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7CiYjNDM7CiYjNDM7CXR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsICZhbXA7b3BzLCBjdHgsIHRydWUpOwomIzQzOwomIzQzOwlidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7CiYjNDM7CW1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKCZhbXA7aGVhZCwgbGVuKTsKJiM0MzsKJiM0MzsJc2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBmYWxzZSk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CUtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KCZhbXA7Y3R4LSZndDt0eF94ZmVycykpOwomIzQzOwomIzQzOwlmbGF0X3R4ID0gbWN0cF91c2JsaWJfdGVzdF9mbGF0dGVuX3R4X2J1ZmYodGVzdCwgJmFtcDtjdHgtJmd0O3R4X3hmZXJzLAomIzQzOwkJCQkJCSAgICZhbXA7dHhfbGVuKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGZsYXRfdHgpOwomIzQzOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHhfbGVuLCBsZW4gJiM0MzsgSERSX0xFTik7CiYjNDM7CUtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBmbGF0X3R4LCAmYW1wO2hlYWQsIEhEUl9MRU4pOwomIzQzOwlLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCAmIzQzOyBIRFJfTEVOLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfZmFpbGluZ19zZW5kKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CXU4ICpidWY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbGVuID0gMTAwOwomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CW5kZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bmRldjsKJiM0MzsKJiM0MzsJb3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDsKJiM0MzsKJiM0MzsJdHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgJmFtcDtvcHMsIGN0eCwgZmFsc2UpOwomIzQzOwlidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7CiYjNDM7CXNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpOwomIzQzOwomIzQzOwkvKiBEb2VzbiYjMzk7dCBjYWxsIG9wcy5zZW5kIGFzIG1vcmUgcGFja2V0cyBhcmUgZXhwZWN0ZWQsCiYjNDM7CSAqIHNvIHRoZSBwdXNoIHNob3VsZG4mIzM5O3QgZmFpbC4KJiM0MzsJICovCiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCB0cnVlKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJc2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7CiYjNDM7CiYjNDM7CS8qIENhbGxzIG9wcy5zZW5kIGFzIG5vIGZ1cnRoZXIgcGFja2V0cyBhcmUgZXhwZWN0ZWQuICovCiYjNDM7CXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBmYWxzZSk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHR4LSZndDtjdXJfY3R4KTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbGlzdF9lbXB0eSgmYW1wO2N0eC0mZ3Q7dHhfeGZlcnMpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVzdCBzZW5kaW5nIG11bHRpcGxlIHBhY2tldHMgaW4gdGhlIHNhbWUgdHJhbnNmZXIsIGZvbGxvd2VkIGJ5IG9uZSB0aGF0CiYjNDM7ICogc3BhbnMgbXVsdGlwbGUgc3Vic2VxdWVudCB0cmFuc2ZlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzaXplX3QgaSwgbWF4X2xlbmd0aCwgdHhfbGVuZ3RoOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJdTggKmJ1ZiwgKmZsYXRfdHgsICppbmRleDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWNvbnN0IHN0cnVjdCB7CiYjNDM7CQlzaXplX3QgbGVuOwomIzQzOwkJYm9vbCBtb3JlOwomIzQzOwl9IHNlbmRzW10gPSB7CiYjNDM7CQl7IDEwMDAsIHRydWUgIH0sCiYjNDM7CQl7ICA1MDAsIGZhbHNlIH0sCiYjNDM7CQl7IDUwMDAsIGZhbHNlIH0sCiYjNDM7CX07CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJc3RhdGljX2Fzc2VydCghc2VuZHNbQVJSQVlfU0laRShzZW5kcykgLSAxXS5tb3JlLAomIzQzOwkJICAgICAgJiMzNDtUaGUgbGFzdCBwdXNoIG11c3QgY2xhaW0gdGhlcmUgd2lsbCBiZSBubyBtb3JlJiMzNDspOwomIzQzOwomIzQzOwltYXhfbGVuZ3RoID0gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoc2VuZHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHNlbmRzW2ldLmxlbiAmZ3Q7IG1heF9sZW5ndGgpCiYjNDM7CQkJbWF4X2xlbmd0aCA9IHNlbmRzW2ldLmxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CW5kZXYgPSBjdHgtJmd0O2Rldi0mZ3Q7bmRldjsKJiM0MzsKJiM0MzsJb3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7CiYjNDM7CiYjNDM7CXR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsICZhbXA7b3BzLCBjdHgsIHRydWUpOwomIzQzOwlidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIG1heF9sZW5ndGgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShzZW5kcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIHNlbmRzW2ldLmxlbiwgbmRldiwgYnVmKTsKJiM0MzsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBzZW5kc1tpXS5tb3JlKTsKJiM0MzsJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CX0KJiM0MzsJS1VOSVRfQVNTRVJUX0ZBTFNFKHRlc3QsIGxpc3RfZW1wdHkoJmFtcDtjdHgtJmd0O3R4X3hmZXJzKSk7CiYjNDM7CiYjNDM7CWZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCAmYW1wO2N0eC0mZ3Q7dHhfeGZlcnMsCiYjNDM7CQkJCQkJICAgJmFtcDt0eF9sZW5ndGgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwLCBpbmRleCA9IGZsYXRfdHg7IGkgJmx0OyBBUlJBWV9TSVpFKHNlbmRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNpemVfdCBsZW5ndGhfdG9fY2hlY2ssIHJlbWFpbmluZ19ieXRlczsKJiM0MzsJCXN0cnVjdCBtY3RwX3VzYl9oZHIgaGVhZDsKJiM0MzsKJiM0MzsJCWlmIChpbmRleCAtIGZsYXRfdHggJmd0Oz0gdHhfbGVuZ3RoIC0gSERSX0xFTikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKCZhbXA7aGVhZCwgc2VuZHNbaV0ubGVuKTsKJiM0MzsJCUtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCwgJmFtcDtoZWFkLCBIRFJfTEVOKTsKJiM0MzsJCWluZGV4ICYjNDM7PSBIRFJfTEVOOwomIzQzOwkJcmVtYWluaW5nX2J5dGVzID0gdHhfbGVuZ3RoIC0gKGluZGV4IC0gZmxhdF90eCk7CiYjNDM7CiYjNDM7CQlsZW5ndGhfdG9fY2hlY2sgPSBzZW5kc1tpXS5sZW47CiYjNDM7CQlLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spOwomIzQzOwkJbGVuZ3RoX3RvX2NoZWNrID0gbWluKHJlbWFpbmluZ19ieXRlcywgbGVuZ3RoX3RvX2NoZWNrKTsKJiM0MzsKJiM0MzsJCUtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCwKJiM0MzsJCQkJICAgYnVmLCBsZW5ndGhfdG9fY2hlY2spOwomIzQzOwomIzQzOwkJaW5kZXggJiM0Mzs9IGxlbmd0aF90b19jaGVjazsKJiM0MzsJfQomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgaSwgQVJSQVlfU0laRShzZW5kcykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHM7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CXNpemVfdCBsZW4sIGk7CiYjNDM7CXU2NCBzdGF0czsKJiM0MzsJdTggKmJ1ZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsZW4gPSAyMDA7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJbmRldiA9IGN0eC0mZ3Q7ZGV2LSZndDtuZGV2OwomIzQzOwomIzQzOwlvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZF9mYWlsOwomIzQzOwomIzQzOwl0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCAmYW1wO29wcywgY3R4LCBmYWxzZSk7CiYjNDM7CWJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbGVuKTsKJiM0MzsKJiM0MzsJZHN0YXRzID0gZ2V0X2NwdV9wdHIobmRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTsKJiM0MzsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBpICE9IDIpOwomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO2RzdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwkJc3RhdHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMpOwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtkc3RhdHMtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzOwlwdXRfY3B1X3B0cihkc3RhdHMpOwomIzQzOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3RhdHMsIDMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksCiAJS1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLAogCQkJIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksCiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9oZWFkZXJfc3BsaXRzKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3Nob3J0X3BhY2tldCksCiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9pbnZhbGlkX2RtdGZfaWQpLAomIzQzOwlLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfdGlueSksCiYjNDM7CUtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ19wYXJ0aWFsKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X211bHRpX3B1c2gpLAomIzQzOwlLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfdHhfZmFpbGluZ19zZW5kKSwKJiM0MzsJS1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KSwKIAl7fQogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUYXJnZXRlZCBLVW5pdCBUZXN0IFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgc3BlY2lmaWNhbGx5IHRvdWNoZXMgYGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jYC4gUmlnaHQgYXdheSwgdGhhdCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gS1VuaXQgdGVzdGluZywgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgTUNUUCBVU0IgbGlicmFyeS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgZmlsZSBuYW1lIGNvbnZlbnRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGlzIHRoZSAqb25seSogZmlsZSBpbXBhY3RlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlOyBhIHRhcmdldGVkIGVkaXQgbGlrZSB0aGlzIHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYyBpc3N1ZSBvciByZWZpbmVtZW50IHdpdGhpbiB0aGF0IHRlc3QgbW9kdWxlLgoKVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBnaXRgIHN0YXR1cyBvciBkaWZmLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2hhbmdlLiBJZiBvdGhlciBmaWxlcyBhcmUgaW52b2x2ZWQsIEkmIzM5O2xsIGFkanVzdCBteSBhbmFseXNpcyBhY2NvcmRpbmdseSwgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIHdpZGVyIGltcGxpY2F0aW9ucy4gRmluYWxseSwgSSYjMzk7bGwgcnVuIG15IHN0YW5kYXJkIHN1aXRlIG9mIHZlcmlmaWNhdGlvbiB0b29scyDigJMgbWF5YmUgYSBsaW50aW5nIGNoZWNrIG9yIGEgc3BlY2lmaWMgdG9vbCBkZXNpZ25lZCB0byBhc3Nlc3MgS1VuaXQgdGVzdCBpbnRlZ3JpdHkuIFRoaXMgc3lzdGVtYXRpYyBhcHByb2FjaCBlbnN1cmVzIEkgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21jdHBfdXNibGliX3Rlc3RfY2FzZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYz04NzA9c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMtOTEwLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmM6OTExOnN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy05MTItXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKSxcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYz05Mjc9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMtOTI4LVx0Lm5hbWUgPSBcJiMzNDttY3RwLXVzYmxpYlwmIzM0OyxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jOjkyOTpcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTkzMC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgV29ydGhGdXp6aW5nIGZvciBOb24tRXhlY3V0YWJsZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBxdWlja2x5IGNsYXJpZnkgdGhlIFdvcnRoRnV6emluZyBydWxlcyByZWdhcmRpbmcgdW5pdCB0ZXN0cywgc3BlY2lmaWNhbGx5IEtVbml0IHRlc3RzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBub24tZXhlY3V0YWJsZSBtb2RpZmljYXRpb25zLiBTZWN0aW9uIDIgb3V0bGluZXMgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGUgc2NlbmFyaW9zIHdoZXJlIHdlJiMzOTtkIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0IGV4cGxpY2l0bHkgbWVudGlvbnMgdGhhdCBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzIGFyZSBnZW5lcmFsbHkgZXhjbHVkZWQuIFRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgY29tbWVudHMsIHNwZWxsaW5nIGNvcnJlY3Rpb25zLCBhbmQgYW55dGhpbmcgaW4gdXNlci1zcGFjZSBkaXJlY3RvcmllcyBsaWtlIHRvb2xzLCBzYW1wbGVzLCBzY3JpcHRzLCBpZiB0aGV5IGRvbiYjMzk7dCBpbXBhY3QgdGhlIGNvcmUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBtb2R1bGVzLCBhcmUgdHlwaWNhbGx5IGEgbm8tZ28gZm9yIGZ1enppbmcuIEFsc28gZGVjb3JhdGl2ZSBsb2dnaW5nIGFuZCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBDIGxvZ2ljIGFyZSBhbHNvIGV4Y2x1ZGVkLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyDigJMgaXMgYSBLVW5pdCB0ZXN0IGNvbnNpZGVyZWQgc2VsZi10ZXN0IGNvZGU/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gYXNzZXNzIGEgc3BlY2lmaWMgZXhhbXBsZSBmaWxlLCBzYXkgYG1jdHAtdXNibGliLXRlc3QuY2AsIHRvIGZpZ3VyZSBvdXQgaXRzIG5hdHVyZS4gV2hhdCBleGFjdGx5ICppcyogdGhpcyBmaWxlIGRvaW5nPyBBbmQgdGhlbiwgY3J1Y2lhbCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzZXR0aW5ncyBmb3IgYG1jdHAtdXNibGliLXRlc3QuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBjb21waWxlZC4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWN0cC11c2JsaWItdGVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTItLypcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jOjM6ICogbWN0cC11c2JsaWItdGVzdC5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgaGVscGVyIGxpYnJhcnksXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy00LSAqIHVuaXQgdGVzdCBkZWZpbml0aW9ucy5cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NjIxPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1QpXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjI0OiNpbmNsdWRlIFwmIzM0O21jdHAtdXNibGliLXRlc3QuY1wmIzM0O1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY5MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIENoZWNrIGZvciBVU0JsaWIgVGVzdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIEtjb25maWcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVGAuIElzIGl0IGVuYWJsZWQ/IERpc2FibGVkPyBEb2VzIGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZCBvbiBvdGhlciBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIGlzIGxpa2VseSB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgY29uZmlndXJpbmcgYSByZWxhdGVkIGZlYXR1cmUsIGFuZCBhIHF1aWNrIEtjb25maWcgY2hlY2sgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIGhvdyB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz01MD1jb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTU5LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTYyMT1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcJiMzNDspO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyMi1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo2MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNC0jaW5jbHVkZSBcJiMzNDttY3RwLXVzYmxpYi10ZXN0LmNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gYG1jdHAtdXNibGliLXRlc3QuY2AgaXMgdGhlIG9ubHkgZmlsZSBjaGFuZ2VkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgU2luY2UgdGhpcyBpcyBpbiB0aGUgY29udGV4dCBvZiBLVW5pdCB0ZXN0cywgSSBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBldmVuICpjb25zaWRlcnMqIEtVbml0IHRlc3RzIHRvIGJlIHBhcnQgb2YgdGhlIGF0dGFjayBzdXJmYWNlLCBvciBpZiB0aGV5IGFyZSBzZXBhcmF0ZSBleGVjdXRpb24gcGF0aHMgb25seSBmb3IgdGVzdGluZyBhdCBib290IG9yIG1vZHVsZSBsb2FkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcmUtcmVhZCB0aGUgZ3VpZGVsaW5lczsgJiMzNDtSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURSYjMzQ7LiBUaGUgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIHRoYXQgZnV6emluZyBzaG91bGQgb25seSB0YXJnZXQgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIEdDRSBvciBRRU1VLCBhbmQgdmlhIHN5c2NhbGxzLCBvciBlbXVsYXRlZCBkZXZpY2VzLiBOb3QgY29kZSB0aGF0IHJ1bnMgaW4gYSB1bml0IHRlc3QgaGFybmVzcy4KClRoZSBndWlkZWxpbmVzIGFsc28gc2F5IHRvIGV4Y2x1ZGUgdGhpbmdzIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgYW5kIHNhbXBsZXMsIGFuZCBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgYC91c3IvYCBgL3Rvb2xzL2AgYC9zYW1wbGVzL2AgYW5kIGAvc2NyaXB0cy9gIGFzIHRoaW5ncyB0byBza2lwLCBpZiB0aGV5IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBvciBrZXJuZWwgbW9kdWxlcy4KCkFoLCByaWdodCEgS1VuaXQgdGVzdHMgYXJlIHVuaXQgdGVzdHMuIFRoZXkmIzM5O3JlIG5vdCBydW50aW1lIGtlcm5lbCBjb2RlLiBUaGV5IGV4ZWN1dGUgd2hlbiB0aGUga2VybmVsIHN0YXJ0cyBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIG9yIGlmIHRyaWdnZXJlZCBieSBkZWJ1Z2ZzLiBUaGV5IHJ1biBpbiBhIHN5bnRoZXRpYyBzY2VuYXJpbyB3aXRoaW4gdGhlIEtVbml0IGhhcm5lc3MuIFRoZXkmIzM5O3JlIHNlbGYtdGVzdHMgYW5kIHVuaXQgdGVzdHMgdGhhdCBydW4gYXQgYSBkaWZmZXJlbnQgc3RhZ2UuIFNvLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHN5emthbGxlciAod2l0aCBpdHMgZm9jdXMgb24gc3lzY2FsbHMsIGRldmljZSBpbnRlcmFjdGlvbiwgYW5kIHNvIG9uKSB3b24mIzM5O3QgcmVhY2ggdGhpcyBjb2RlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIHdhc24mIzM5O3QgYSBoaWRkZW4gY2hhbmdlIHRvIGBtY3RwLXVzYmxpYi5jYCBpdHNlbGYuCgpMb29raW5nIGF0IHRoZSBjb21taXQgZGlmZiwgaXQmIzM5O3MgY2xlYXI6CmBgYGRpZmYKY29tbWl0IGVkODAzM2IzNzA1YTM0YzQ3OWVmMGQ0ZTkzNWI3MmZjYjQ0NTQ1ZmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDAzOjI2OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwppbmRleCA5ZGY0MDFhOTE0ZmY1Li4yNWVhYzgwZGIzZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYwpgYGAKTm9wZS4gKk9ubHkqIGBtY3RwLXVzYmxpYi10ZXN0LmNgIHdhcyB0b3VjaGVkLgoKSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgY2hhbmdlcyBpbiB0aGlzIGNvbW1pdC4gQ2hlY2tpbmcgdGhlIGdpdCBsb2dzIGFuZCB0aGUgZmlsZXMgbW9kaWZpZWQsIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB0aGUgb25seSBmaWxlIGFmZmVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gIDUxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5XCYjMzQ7XG4gIDUyOlx0XHRkZXBlbmRzIG9uIFVTQlxuICA1MzpcdFx0aGVscFxuICA1NDpcdFx0ICBDb21tb24gcHJvdG9jb2wgaGFuZGxpbmcgZnVuY3Rpb25zIGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydFxuICA1NTpcdFx0ICBpbXBsZW1lbnRhdGlvbnMsIHN1aXRhYmxlIGZvciB1c2UgaW4gZWl0aGVyIGhvc3QtIG9yIGdhZGdldC1zaWRlXG4gIDU2Olx0XHQgIHRyYW5zcG9ydCBkcml2ZXJcbiAgNTc6XHRcbiAgNTg6XHRcdCAgVGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSB0aGUgdHJhbnNwb3J0IGRyaXZlci5cbiAgNTk6XHRcbiAgNjA6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcbiAgNjE6XHQgICAgICAgIGJvb2wgXCYjMzQ7TUNUUCB1c2JsaWIgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA2MjpcdCAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA2MzpcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNjQ6XHRcbiAgNjU6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gIDY2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbiAgNjc6XHRcdGRlcGVuZHMgb24gVVNCXG4gIDY4Olx0XHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gIDY5Olx0XHRoZWxwXG4gIDcwOlx0XHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuICA3MTpcdFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuICA3MjpcdFxuICA3MzpcdFx0ICBNQ1RQLW92ZXItVVNCIGludGVyZmFjZXMgYXJlIHBlZXItdG8tcGVlciwgc28gZWFjaCBpbnRlcmZhY2VcbiAgNzQ6XHRcdCAgcmVwcmVzZW50cyBhIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gb25lIHJlbW90ZSBNQ1RQIGVuZHBvaW50LlxuICA3NTpcdFxuICA3NjpcdGVuZG1lbnVcbiAgNzc6XHRcbiAgNzg6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4NgoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBldmFsdWF0aW5nIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgcG90ZW50aWFsLiBNeSBpbml0aWFsIGNoZWNrIGNvbmZpcm1zIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1jdHAtdXNibGliLXRlc3QuY2AsIGlzIHBhcnQgb2YgdGhlIEtVbml0IHRlc3Qgc3VpdGUgZm9yIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeS4gU2luY2UgS1VuaXQgdGVzdHMgYXJlIGV4cGxpY2l0bHkgZGVzaWduZWQgdG8gYmUgKm5vbi1mdXp6YWJsZSog4oCTIHRoZXkgZXhlY3V0ZSBkdXJpbmcgYm9vdC90ZXN0IHJ1bnMgYW5kIGFyZW4mIzM5O3QgYWNjZXNzaWJsZSBkdXJpbmcgcnVudGltZSBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIOKAkyBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBhICYjMzQ7bm8gZ28mIzM0OyBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlc2Ugc2VsZi10ZXN0IGNhc2VzLCB0aGV5IGFyZW4mIzM5O3QgZ29pbmcgdG8gaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGFjY2Vzc2libGUgZHVyaW5nIG5vcm1hbCBzeXN0ZW0gb3BlcmF0aW9uLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9ucyBhcmUgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBjb25maWd1cmF0aW9uIHdvdWxkIGJlOgoKKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUpCiogICBgRm9jdXNTeW1ib2xzOiBbXWAgKG5vIHNwZWNpZmljIHN5bWJvbHMgbmVlZCBhdHRlbnRpb24pCiogICBgUmVhc29uaW5nOiBUaGUgcGF0Y2ggc29sZWx5IGFsdGVycyBLVW5pdCB0ZXN0IGNhc2VzIHdpdGhpbiBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgIGZvciB0aGUgTUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnkuIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSBhbnkgcnVudGltZSBkcml2ZXIgb3Iga2VybmVsIGxvZ2ljIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkIHZpYSBzeXprYWxsZXIgZnV6emluZy4pCgpCZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSYjMzk7bSBqdXN0IGdvaW5nIHRvIHZlcmlmeSB0aGF0IG15IG1lbnRhbCBwaWN0dXJlIGlzIGFjY3VyYXRlLiBXb3J0aEZ1enppbmc6IGZhbHNlLCBFbmFibGVDb25maWdzIGlzIGFuIGVtcHR5IGFycmF5LCBGb2N1c1N5bWJvbHMgaXMgZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGV4cGxhaW5zIHdoeSwgc3VjY2luY3RseS4gWXVwLCBsb29rcyBnb29kLiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1VuaXQgdGVzdCBjYXNlcyBpbiBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJ1bnRpbWUgZHJpdmVyIG9yIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcgc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtVbml0IHRlc3QgY2FzZXMgaW4gZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBydW50aW1lIGRyaXZlciBvciBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjMyLjIyMTc1OTA2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzIyMjk3NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjMyLjIyMTc2MzY1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYxNDE0Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWQ4MDMzYjM3MDVhMzRjNDc5ZWYwZDRlOTM1YjcyZmNiNDQ1NDVmZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjI2OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5pbmRleCA5ZGY0MDFhOTE0ZmY1Li4yNWVhYzgwZGIzZTJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4gICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvdGVzdC5oXFx1MDAzZVxcbkBAIC0xNCw2ICsxNSwxNSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21jdHBkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXFx1MDAzZVxcbiBcXG4rI2RlZmluZSBIRFJfTEVOIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKVxcbitcXG4rc3RydWN0IHR4X2J1ZmYge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcbitcXHRzaXplX3QgbGVuZ3RoO1xcbitcXHR1OCBkYXRhW10gX19jb3VudGVkX2J5KGxlbmd0aCk7XFxuK307XFxuK1xcbiBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4gXFx0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xcbkBAIC0yMiw5ICszMiwxMDQgQEAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHtcXG4gXFxuIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCB7XFxuIFxcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHR4X3hmZXJzO1xcbiBcXHRzdHJ1Y3QgbWN0cF9yb3V0ZSBydDtcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCB0eF9idWZmICpuZXdfbm9kZTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfcHJpdih0eF9jdHgpO1xcbitcXHRuZGV2ID0gY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW5kZXY7XFxuK1xcbitcXHRuZXdfbm9kZSA9IGt6YWxsb2NfZmxleCgqbmV3X25vZGUsIGRhdGEsIGxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbmV3X25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bmV3X25vZGUtXFx1MDAzZWxlbmd0aCA9IGxlbjtcXG4rXFx0bWVtY3B5KG5ld19ub2RlLVxcdTAwM2VkYXRhLCBkYXRhLCBsZW4pO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuZXdfbm9kZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5kZXYsIHRydWUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmluLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90ICpsZW5ndGhfb3V0KVxcbit7XFxuK1xcdHN0cnVjdCB0eF9idWZmICpwb3M7XFxuK1xcdHNpemVfdCBsZW5ndGg7XFxuK1xcdHU4ICpidWYsICp0YWlsO1xcbitcXG4rXFx0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgbGVuZ3RoX291dCk7XFxuK1xcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIGluKTtcXG4rXFxuK1xcdGxlbmd0aCA9IDA7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBpbiwgbGlzdClcXG4rXFx0XFx0bGVuZ3RoID0gc2l6ZV9hZGQobGVuZ3RoLCBwb3MtXFx1MDAzZWxlbmd0aCk7XFxuK1xcbitcXHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX05FKHRlc3QsIGxlbmd0aCwgU0laRV9NQVgpO1xcbitcXG4rXFx0YnVmID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmKTtcXG4rXFxuK1xcdHRhaWwgPSBidWY7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBpbiwgbGlzdCkge1xcbitcXHRcXHRtZW1jcHkodGFpbCwgcG9zLVxcdTAwM2VkYXRhLCBwb3MtXFx1MDAzZWxlbmd0aCk7XFxuK1xcdFxcdHRhaWwgKz0gcG9zLVxcdTAwM2VsZW5ndGg7XFxuK1xcdH1cXG4rXFxuK1xcdCpsZW5ndGhfb3V0ID0gbGVuZ3RoO1xcbitcXHRyZXR1cm4gYnVmO1xcbit9XFxuK1xcbitzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3QgbGVuZ3RoKVxcbit7XFxuK1xcdHU4ICpidWZmZXI7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0YnVmZmVyID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmZmVyKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW5ndGg7IGkrKylcXG4rXFx0XFx0YnVmZmVyW2ldID0gaSAlIDI1NjtcXG4rXFxuK1xcdHJldHVybiBidWZmZXI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhlYWQsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0bGVuICs9IEhEUl9MRU47XFxuK1xcdGhlYWQtXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuK1xcdGhlYWQtXFx1MDAzZWxlbiA9IGNwdV90b19iZTE2KGxlbiBcXHUwMDI2IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICptY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW5ndGgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgc2tiKTtcXG4rXFxuK1xcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEsIGxlbmd0aCk7XFxuK1xcdHJldHVybiBza2I7XFxuK31cXG4rXFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYmxpYl9kZXZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG5AQCAtMTE3LDYgKzIyMiw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xcbitcXHRzdHJ1Y3QgdHhfYnVmZiAqY3VyciwgKnRlbXA7XFxuIFxcbiBcXHQvKiBUaGUgZGV2aWNlIHdpbGwgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gLVxcdTAwM2VydCB3aWxsIGJlIHVubGlua2VkLlxcbiBcXHQgKiBKdXN0IGVuc3VyZSB0aGF0IHRoZSByZWZjb3VudCBpcyBhcyBleHBlY3RlZC5cXG5AQCAtMTI0LDYgKzIzMCw4IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSlcXG4gXFx0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cXHUwMDNla3VuaXRfdGVzdCxcXG4gXFx0XFx0XFx0ICByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNlcnQucmVmcykpO1xcbiBcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIHRlbXAsIFxcdTAwMjZjdHgtXFx1MDAzZXR4X3hmZXJzLCBsaXN0KVxcbitcXHRcXHRrZnJlZShjdXJyKTtcXG4gXFx0a2ZyZWUoY3R4KTtcXG4gfVxcbiBcXG5AQCAtMTM5LDYgKzI0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXJ0Lmxpc3QpO1xcbiBcXHRydCA9IFxcdTAwMjZjdHgtXFx1MDAzZXJ0O1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnJ0LVxcdTAwM2VyZWZzLCAxKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpO1xcbiBcXG4gXFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24sIGN0eCk7XFxuIFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuQEAgLTIwMCwxMSArMzA5LDkgQEAgbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7XFxuLVxcdGlmIChyeCkge1xcbi1cXHRcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcXG4tXFx0XFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4tXFx0fVxcbiBcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4gXFxuIFxcdHJjID0gbWN0cF91c2JsaWJfcnhfaW5pdChyeCwgZXBfbWF4cGFja2V0LCBzcGFuKTtcXG4gXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG5AQCAtMjI3LDYgKzMzNCwzMiBAQCBzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhY3Rpb25fdHhfZmluaSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHggPSBkYXRhO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfZmluaSh0eCk7XFxuK1xcdGtmcmVlKHR4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqXFxuK21jdHBfdXNibGliX3Rlc3RfdHhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXFxuK1xcdFxcdFxcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0dHggPSBremFsbG9jX29iaigqdHgpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgdHgpO1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3R4X2ZpbmksIHR4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdG1jdHBfdXNibGliX3R4X2luaXQodHgsIG9wcywgcHJpdiwgc3Bhbik7XFxuK1xcbitcXHRyZXR1cm4gdHg7XFxuK31cXG4rXFxuIC8qIFNpbmdsZSBwYWNrZXQsIHN0YXJ0aW5nIG9uIGEgdHJhbnNmZXIgYm91bmRhcnksIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW5cXG4gICogdGhlIHRyYW5zZmVyXFxuICAqL1xcbkBAIC0zNzgsMjkgKzUxMSw0MTYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zW10gPSB7XFxuIFxcdHsgXFxcIjFwMXgtY29tcGxldGVcXFwiLCAxLCB7IDggfSwgMSwgeyA4IH0gfSxcXG4gXFx0LyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqL1xcbiBcXHR7IFxcXCIycDF4LWNvbWJpbmVkXFxcIiwgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LFxcbi1cXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cXG4tXFx0eyBcXFwiMXAyeC1zcGxpdC1wYXlsb2FkXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxcbi1cXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBVU0IgdHJhbnNwb3J0IGhlYWRlciAqL1xcbi1cXHR7IFxcXCIxcDJ4LXNwbGl0LXVzYmhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sXFxuLVxcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovXFxuLVxcdHsgXFxcIjFwMngtc3BsaXQtbWN0cGhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sXFxuIFxcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xcbiBcXHR7IFxcXCIxcDN4LXNwbGl0XFxcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxcbitcXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIDUgdHJhbnNmZXJzLCBzcGxpdHRpbmcgb24gYW5kIGJldHdlZW4gZWFjaCBoZWFkZXIuICovXFxuK1xcdHsgXFxcIjFwNXgtc3BsaXRcXFwiLCAxLCB7IDEyIH0sIDUsIHsgMywgMSwgMSwgMywgNH19LFxcbiBcXHQvKiBNYXgtc2l6ZWQgc2luZ2xlIHRyYW5zZmVyICovXFxuIFxcdHsgXFxcIjFwMXgtbGFyZ2VcXFwiLCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSxcXG4gXFx0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcXG4gXFx0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxcbiBcXHQgKi9cXG4tXFx0eyBcXFwiMnAyeC1sYXJnZS1zcGxpdFxcXCIsIDIsIHsgODE5MCwgODE5MCB9LCAyLCB7IDgxOTEsIDgxODkgfSB9LFxcbitcXHR7IFxcXCIycDJ4LWxhcmdlLXNwbGl0XFxcIiwgMiwgeyA4MTkwLCA4MTkxIH0sIDIsIHsgODE5MSwgODE5MCB9IH0sXFxuK1xcdC8qIFRocmVlIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLFxcbitcXHQgKiB3aXRoIGEgc2luZ2xlIGJ5dGUgY29udGludWluZyBlYWNoIHNwYW5cXG4rXFx0ICovXFxuK1xcdHsgXFxcIjNwM3gtbGFyZ2Utc3BsaXRcXFwiLCAzLCB7IDgxOTAsIDgxOTEsIDgxOTEgfSwgMywgeyA4MTkxLCA4MTkxLCA4MTkwIH0gfSxcXG4gfTtcXG4gXFxuIEtVTklUX0FSUkFZX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zLFxcbiBcXHRcXHQgIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyk7XFxuIFxcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgYnVmbGVuLCBsZW47XFxuK1xcdHU4IHBhY2tldFsxNl07XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bGVuID0gc2l6ZW9mKHBhY2tldCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGFja2V0LCBsZW4sIGxlbik7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCwgXFx1MDAyNmJ1ZiwgXFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwYWNrZXQsIG9mZnNldCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgb2Zmc2V0KTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBcXHUwMDI2YnVmLCBcXHUwMDI2YnVmbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwYWNrZXQgKyBvZmZzZXQsIGxlbiAtIG9mZnNldCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgbGVuIC0gb2Zmc2V0KTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cXHUwMDNlcnhfcGt0cy5xbGVuLCAxKTtcXG4rXFxuK1xcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xcbitcXHRpZiAoc2tiKSB7XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXFx1MDAzZWxlbiwgbGVuIC0gSERSX0xFTik7XFxuK1xcdFxcdGtmcmVlKHNrYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9oZWFkZXJfc3BsaXRzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdC8qIFVucm9sbGluZyBoZXJlIHNvIHN0YWNrIHRyYWNlcyBwb2ludCB0byB0aGUgaW52b2NhdGlvbiB3aXRoIHRoZVxcbitcXHQgKiBmYWlsaW5nIGxlbmd0aC5cXG4rXFx0ICovXFxuK1xcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDEsIGRldiwgcngpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCAyLCBkZXYsIHJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgMywgZGV2LCByeCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDQsIGRldiwgcngpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA1LCBkZXYsIHJ4KTtcXG4rXFx0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgNiwgZGV2LCByeCk7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDcsIGRldiwgcngpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA4LCBkZXYsIHJ4KTtcXG4rfVxcbitcXG4rLyogVGVzdCB0aGUgc3VibWlzc2lvbiBvZiBhIHBhY2tldCB3aXRoIGFuIGltcG9zc2libHkgc21hbGwgdmFsdWUgaW4gdGhlXFxuKyAqIGhlYWRlcidzIGxlbmd0aCBmaWVsZC4gVmFsdWVzIGxlc3MgdGhhbiBIRFJfTEVOIGFyZSBpbnZhbGlkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaG9ydF9wYWNrZXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c2l6ZV90IGxlbiwgYnVmbGVuO1xcbitcXHR1OCBwa3RidWZbMTJdO1xcbitcXHR2b2lkICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIEhEUl9MRU4gLSAxKTtcXG4rXFxuK1xcdGJ1ZmxlbiA9IDA7XFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBcXHUwMDI2YnVmLCBcXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcXG4rXFxuK1xcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgbGVuKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXFx1MDAzZXNrYik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfaW52YWxpZF9kbXRmX2lkKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdHNpemVfdCBsZW4sIGJ1ZmxlbjtcXG4rXFx0dTggcGt0YnVmWzEyXTtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdGxlbiA9IHNpemVvZihwa3RidWYpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4pO1xcbitcXG4rXFx0Ly8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkXFxuK1xcdHBrdGJ1ZlsxXSA9IH5wa3RidWZbMV07XFxuK1xcbitcXHRidWZsZW4gPSAwO1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCwgXFx1MDAyNmJ1ZiwgXFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIGxlbik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVxcdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3Rpbnkoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c2l6ZV90IGxlbiwgYnVmbGVuO1xcbitcXHR1OCBwa3RidWZbM107XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xcbitcXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCBmYWxzZSk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIGxlbik7XFxuK1xcbitcXHRidWZsZW4gPSAwO1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVxcdTAwM2VuZGV2LCByeCwgXFx1MDAyNmJ1ZiwgXFx1MDAyNmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XFxuK1xcbitcXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cXHUwMDNlbmRldiwgcngsIGxlbik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVOT01TRyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVxcdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcXG4rXFx0c2l6ZV90IGxlbiwgYnVmbGVuO1xcbitcXHR1OCBwa3RidWZbMjBdO1xcbitcXHR2b2lkICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgZmFsc2UpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdGxlbiA9IHNpemVvZihwa3RidWYpO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4gKyAxKTtcXG4rXFxuK1xcdGJ1ZmxlbiA9IDA7XFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBcXHUwMDI2YnVmLCBcXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGJ1ZmxlbiwgbGVuKTtcXG4rXFxuK1xcdG1lbWNweShidWYsIHBrdGJ1ZiwgbGVuKTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUoZGV2LVxcdTAwM2VuZGV2LCByeCwgbGVuKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAtRVBST1RPKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXFx1MDAzZXNrYik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfdHhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0c3RydWN0IG1jdHBfdXNiX2hkciBoZWFkO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0c2l6ZV90IGxlbiwgdHhfbGVuO1xcbitcXHR1OCAqYnVmLCAqZmxhdF90eDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bGVuID0gMTAwMDtcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0bmRldiA9IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZGV2O1xcbitcXG4rXFx0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7XFxuK1xcbitcXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcXHUwMDI2b3BzLCBjdHgsIHRydWUpO1xcbitcXG4rXFx0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBsZW4pO1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcXHUwMDI2aGVhZCwgbGVuKTtcXG4rXFxuK1xcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIGZhbHNlKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0ZBTFNFKHRlc3QsIGxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpKTtcXG4rXFxuK1xcdGZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2V0eF94ZmVycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnR4X2xlbik7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBmbGF0X3R4KTtcXG4rXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0eF9sZW4sIGxlbiArIEhEUl9MRU4pO1xcbitcXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCwgXFx1MDAyNmhlYWQsIEhEUl9MRU4pO1xcbitcXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCArIEhEUl9MRU4sIGJ1ZiwgbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHU4ICpidWY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGxlbiA9IDEwMDtcXG4rXFxuK1xcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcXG4rXFx0bmRldiA9IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZGV2O1xcbitcXG4rXFx0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDtcXG4rXFxuK1xcdHR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsIFxcdTAwMjZvcHMsIGN0eCwgZmFsc2UpO1xcbitcXHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XFxuK1xcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpO1xcbitcXG4rXFx0LyogRG9lc24ndCBjYWxsIG9wcy5zZW5kIGFzIG1vcmUgcGFja2V0cyBhcmUgZXhwZWN0ZWQsXFxuK1xcdCAqIHNvIHRoZSBwdXNoIHNob3VsZG4ndCBmYWlsLlxcbitcXHQgKi9cXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIHRydWUpO1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXG4rXFx0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XFxuK1xcbitcXHQvKiBDYWxscyBvcHMuc2VuZCBhcyBubyBmdXJ0aGVyIHBhY2tldHMgYXJlIGV4cGVjdGVkLiAqL1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgZmFsc2UpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xcbitcXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCB0eC1cXHUwMDNlY3VyX2N0eCk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMpKTtcXG4rfVxcbitcXG4rLyogVGVzdCBzZW5kaW5nIG11bHRpcGxlIHBhY2tldHMgaW4gdGhlIHNhbWUgdHJhbnNmZXIsIGZvbGxvd2VkIGJ5IG9uZSB0aGF0XFxuKyAqIHNwYW5zIG11bHRpcGxlIHN1YnNlcXVlbnQgdHJhbnNmZXJzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c2l6ZV90IGksIG1heF9sZW5ndGgsIHR4X2xlbmd0aDtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XFxuK1xcdHU4ICpidWYsICpmbGF0X3R4LCAqaW5kZXg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRjb25zdCBzdHJ1Y3Qge1xcbitcXHRcXHRzaXplX3QgbGVuO1xcbitcXHRcXHRib29sIG1vcmU7XFxuK1xcdH0gc2VuZHNbXSA9IHtcXG4rXFx0XFx0eyAxMDAwLCB0cnVlICB9LFxcbitcXHRcXHR7ICA1MDAsIGZhbHNlIH0sXFxuK1xcdFxcdHsgNTAwMCwgZmFsc2UgfSxcXG4rXFx0fTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0c3RhdGljX2Fzc2VydCghc2VuZHNbQVJSQVlfU0laRShzZW5kcykgLSAxXS5tb3JlLFxcbitcXHRcXHQgICAgICBcXFwiVGhlIGxhc3QgcHVzaCBtdXN0IGNsYWltIHRoZXJlIHdpbGwgYmUgbm8gbW9yZVxcXCIpO1xcbitcXG4rXFx0bWF4X2xlbmd0aCA9IDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChzZW5kc1tpXS5sZW4gXFx1MDAzZSBtYXhfbGVuZ3RoKVxcbitcXHRcXHRcXHRtYXhfbGVuZ3RoID0gc2VuZHNbaV0ubGVuO1xcbitcXHR9XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdG5kZXYgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmRldjtcXG4rXFxuK1xcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kO1xcbitcXG4rXFx0dHggPSBtY3RwX3VzYmxpYl90ZXN0X3R4X2luaXQodGVzdCwgXFx1MDAyNm9wcywgY3R4LCB0cnVlKTtcXG4rXFx0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBtYXhfbGVuZ3RoKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XFxuK1xcdFxcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgc2VuZHNbaV0ubGVuLCBuZGV2LCBidWYpO1xcbitcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9wdXNoKG5kZXYsIHR4LCBza2IsIHNlbmRzW2ldLm1vcmUpO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXHR9XFxuK1xcdEtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZXR4X3hmZXJzKSk7XFxuK1xcbitcXHRmbGF0X3R4ID0gbWN0cF91c2JsaWJfdGVzdF9mbGF0dGVuX3R4X2J1ZmYodGVzdCwgXFx1MDAyNmN0eC1cXHUwMDNldHhfeGZlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ0eF9sZW5ndGgpO1xcbitcXG4rXFx0Zm9yIChpID0gMCwgaW5kZXggPSBmbGF0X3R4OyBpIFxcdTAwM2MgQVJSQVlfU0laRShzZW5kcyk7IGkrKykge1xcbitcXHRcXHRzaXplX3QgbGVuZ3RoX3RvX2NoZWNrLCByZW1haW5pbmdfYnl0ZXM7XFxuK1xcdFxcdHN0cnVjdCBtY3RwX3VzYl9oZHIgaGVhZDtcXG4rXFxuK1xcdFxcdGlmIChpbmRleCAtIGZsYXRfdHggXFx1MDAzZT0gdHhfbGVuZ3RoIC0gSERSX0xFTilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcXHUwMDI2aGVhZCwgc2VuZHNbaV0ubGVuKTtcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX01FTUVRKHRlc3QsIGluZGV4LCBcXHUwMDI2aGVhZCwgSERSX0xFTik7XFxuK1xcdFxcdGluZGV4ICs9IEhEUl9MRU47XFxuK1xcdFxcdHJlbWFpbmluZ19ieXRlcyA9IHR4X2xlbmd0aCAtIChpbmRleCAtIGZsYXRfdHgpO1xcbitcXG4rXFx0XFx0bGVuZ3RoX3RvX2NoZWNrID0gc2VuZHNbaV0ubGVuO1xcbitcXHRcXHRLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spO1xcbitcXHRcXHRsZW5ndGhfdG9fY2hlY2sgPSBtaW4ocmVtYWluaW5nX2J5dGVzLCBsZW5ndGhfdG9fY2hlY2spO1xcbitcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX01FTUVRKHRlc3QsIGluZGV4LFxcbitcXHRcXHRcXHRcXHQgICBidWYsIGxlbmd0aF90b19jaGVjayk7XFxuK1xcbitcXHRcXHRpbmRleCArPSBsZW5ndGhfdG9fY2hlY2s7XFxuK1xcdH1cXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGksIEFSUkFZX1NJWkUoc2VuZHMpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgb3BzO1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cztcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHVuc2lnbmVkIGludCBzdGFydDtcXG4rXFx0c2l6ZV90IGxlbiwgaTtcXG4rXFx0dTY0IHN0YXRzO1xcbitcXHR1OCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRsZW4gPSAyMDA7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdG5kZXYgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmRldjtcXG4rXFxuK1xcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kX2ZhaWw7XFxuK1xcbitcXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcXHUwMDI2b3BzLCBjdHgsIGZhbHNlKTtcXG4rXFx0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBsZW4pO1xcbitcXG4rXFx0ZHN0YXRzID0gZ2V0X2NwdV9wdHIobmRldi1cXHUwMDNlZHN0YXRzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDM7IGkrKykge1xcbitcXHRcXHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcXG4rXFxuK1xcdFxcdHJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCBpICE9IDIpO1xcbitcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIDApO1xcbitcXHR9XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0c3RhdHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9kcm9wcyk7XFxuK1xcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCwgc3RhcnQpKTtcXG4rXFx0cHV0X2NwdV9wdHIoZHN0YXRzKTtcXG4rXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzdGF0cywgMyk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxcbiBcXHRLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sXFxuIFxcdFxcdFxcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxcbitcXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaG9ydF9wYWNrZXQpLFxcbitcXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaW52YWxpZF9kbXRmX2lkKSxcXG4rXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3RpbnkpLFxcbitcXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfbm9uc3Bhbm5pbmdfcGFydGlhbCksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9wa3Rfc3BhbiksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKSxcXG4rXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X2ZhaWxpbmdfc2VuZCksXFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyksXFxuIFxcdHt9XFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzoyNjozMi41ODM4OTk4MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzOTYwMTQzOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtVbml0IHRlc3QgY2FzZXMgaW4gZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMuIEl0IGRvZXMgbm90IGFsdGVyIGFueSBydW50aW1lIGRyaXZlciBvciBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDgwMzNiMzcwNWEzNGM0NzllZjBkNGU5MzViNzJmY2I0NDU0NWZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMzoyNjozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbmluZGV4IDlkZjQwMWE5MTRmZjUuLjI1ZWFjODBkYjNlMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbkBAIC02LDYgKzYsNyBAQFxuICAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXJyYXlfc2l6ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG5AQCAtMTQsNiArMTUsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbiBcbisjZGVmaW5lIEhEUl9MRU4gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpXG4rXG4rc3RydWN0IHR4X2J1ZmYge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1xuK1x0c2l6ZV90IGxlbmd0aDtcbitcdHU4IGRhdGFbXSBfX2NvdW50ZWRfYnkobGVuZ3RoKTtcbit9O1xuK1xuIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiBcdHN0cnVjdCBtY3RwX2RldiAqbWRldjtcbkBAIC0yMiw5ICszMiwxMDQgQEAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHtcbiBcbiBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHgge1xuIFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHR4X3hmZXJzO1xuIFx0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4gfTtcbiBcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCB0eF9idWZmICpuZXdfbm9kZTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbitcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4rXG4rXHRuZXdfbm9kZSA9IGt6YWxsb2NfZmxleCgqbmV3X25vZGUsIGRhdGEsIGxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW5ld19ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdG5ld19ub2RlLVx1MDAzZWxlbmd0aCA9IGxlbjtcbitcdG1lbWNweShuZXdfbm9kZS1cdTAwM2VkYXRhLCBkYXRhLCBsZW4pO1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXdfbm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMpO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5kZXYsIHRydWUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kX2ZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxuK1x0XHRcdFx0XHQgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHRyZXR1cm4gLUVOT01FTTtcbit9XG4rXG4rc3RhdGljIHU4ICptY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppbixcbitcdFx0XHRcdFx0ICAgIHNpemVfdCAqbGVuZ3RoX291dClcbit7XG4rXHRzdHJ1Y3QgdHhfYnVmZiAqcG9zO1xuK1x0c2l6ZV90IGxlbmd0aDtcbitcdHU4ICpidWYsICp0YWlsO1xuK1xuK1x0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgbGVuZ3RoX291dCk7XG4rXHRLVU5JVF9BU1NFUlRfVFJVRSh0ZXN0LCBpbik7XG4rXG4rXHRsZW5ndGggPSAwO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGluLCBsaXN0KVxuK1x0XHRsZW5ndGggPSBzaXplX2FkZChsZW5ndGgsIHBvcy1cdTAwM2VsZW5ndGgpO1xuK1xuK1x0S1VOSVRfQVNTRVJUX05FKHRlc3QsIGxlbmd0aCwgMCk7XG4rXHRLVU5JVF9BU1NFUlRfTkUodGVzdCwgbGVuZ3RoLCBTSVpFX01BWCk7XG4rXG4rXHRidWYgPSBrdW5pdF9remFsbG9jKHRlc3QsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnVmKTtcbitcbitcdHRhaWwgPSBidWY7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaW4sIGxpc3QpIHtcbitcdFx0bWVtY3B5KHRhaWwsIHBvcy1cdTAwM2VkYXRhLCBwb3MtXHUwMDNlbGVuZ3RoKTtcbitcdFx0dGFpbCArPSBwb3MtXHUwMDNlbGVuZ3RoO1xuK1x0fVxuK1xuK1x0Kmxlbmd0aF9vdXQgPSBsZW5ndGg7XG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbitzdGF0aWMgdTggKm1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYoc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3QgbGVuZ3RoKVxuK3tcbitcdHU4ICpidWZmZXI7XG4rXHRzaXplX3QgaTtcbitcbitcdGJ1ZmZlciA9IGt1bml0X2t6YWxsb2ModGVzdCwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBidWZmZXIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuZ3RoOyBpKyspXG4rXHRcdGJ1ZmZlcltpXSA9IGkgJSAyNTY7XG4rXG4rXHRyZXR1cm4gYnVmZmVyO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZWFkLCBzaXplX3QgbGVuKVxuK3tcbitcdGxlbiArPSBIRFJfTEVOO1xuK1x0aGVhZC1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuK1x0aGVhZC1cdTAwM2VsZW4gPSBjcHVfdG9fYmUxNihsZW4gXHUwMDI2IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICptY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGxlbmd0aCxcbitcdFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHRcdFx0IHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBsZW5ndGgsIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4rXG4rXHRza2JfcHV0X2RhdGEoc2tiLCBkYXRhLCBsZW5ndGgpO1xuK1x0cmV0dXJuIHNrYjtcbit9XG4rXG4gc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuQEAgLTExNyw2ICsyMjIsNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCxcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xuK1x0c3RydWN0IHR4X2J1ZmYgKmN1cnIsICp0ZW1wO1xuIFxuIFx0LyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC1cdTAwM2VydCB3aWxsIGJlIHVubGlua2VkLlxuIFx0ICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuXG5AQCAtMTI0LDYgKzIzMCw4IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSlcbiBcdEtVTklUX0VYUEVDVF9UUlVFKGN1cnJlbnQtXHUwMDNla3VuaXRfdGVzdCxcbiBcdFx0XHQgIHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjdHgtXHUwMDNlcnQucmVmcykpO1xuIFxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIHRlbXAsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycywgbGlzdClcbitcdFx0a2ZyZWUoY3Vycik7XG4gXHRrZnJlZShjdHgpO1xuIH1cbiBcbkBAIC0xMzksNiArMjQ3LDcgQEAgc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqbWN0cF91c2JsaWJfdGVzdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VydC5saXN0KTtcbiBcdHJ0ID0gXHUwMDI2Y3R4LVx1MDAzZXJ0O1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnJ0LVx1MDAzZXJlZnMsIDEpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXR4X3hmZXJzKTtcbiBcbiBcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbkBAIC0yMDAsMTEgKzMwOSw5IEBAIG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QsIGJvb2wgc3BhbilcbiBcdGludCByYztcbiBcbiBcdHJ4ID0ga3phbGxvY19vYmooKnJ4KTtcbi1cdGlmIChyeCkge1xuLVx0XHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcbi1cdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbi1cdH1cbiBcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByeCk7XG4rXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3J4X2ZpbmksIHJ4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4gXG4gXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuQEAgLTIyNyw2ICszMzQsMzIgQEAgc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFjdGlvbl90eF9maW5pKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCA9IGRhdGE7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9maW5pKHR4KTtcbitcdGtmcmVlKHR4KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqXG4rbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxuK1x0XHRcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbitcdGludCByYztcbitcbitcdHR4ID0ga3phbGxvY19vYmooKnR4KTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCB0eCk7XG4rXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgYWN0aW9uX3R4X2ZpbmksIHR4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9pbml0KHR4LCBvcHMsIHByaXYsIHNwYW4pO1xuK1xuK1x0cmV0dXJuIHR4O1xuK31cbitcbiAvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4gICogdGhlIHRyYW5zZmVyXG4gICovXG5AQCAtMzc4LDI5ICs1MTEsNDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuc1tdID0ge1xuIFx0eyBcIjFwMXgtY29tcGxldGVcIiwgMSwgeyA4IH0sIDEsIHsgOCB9IH0sXG4gXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXG4gXHR7IFwiMnAxeC1jb21iaW5lZFwiLCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sXG4tXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbi1cdHsgXCIxcDJ4LXNwbGl0LXBheWxvYWRcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuLVx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgVVNCIHRyYW5zcG9ydCBoZWFkZXIgKi9cbi1cdHsgXCIxcDJ4LXNwbGl0LXVzYmhkclwiLCAxLCB7IDE2IH0sIDIsIHsgMiwgMTQgfSB9LFxuLVx0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cbi1cdHsgXCIxcDJ4LXNwbGl0LW1jdHBoZHJcIiwgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSxcbiBcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuIFx0eyBcIjFwM3gtc3BsaXRcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciA1IHRyYW5zZmVycywgc3BsaXR0aW5nIG9uIGFuZCBiZXR3ZWVuIGVhY2ggaGVhZGVyLiAqL1xuK1x0eyBcIjFwNXgtc3BsaXRcIiwgMSwgeyAxMiB9LCA1LCB7IDMsIDEsIDEsIDMsIDR9fSxcbiBcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbiBcdHsgXCIxcDF4LWxhcmdlXCIsIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuIFx0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcbiBcdCAqIHNpbmdsZSBieXRlIGNvbnRpbnVpbmcgdGhlIHNwYW5cbiBcdCAqL1xuLVx0eyBcIjJwMngtbGFyZ2Utc3BsaXRcIiwgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4rXHR7IFwiMnAyeC1sYXJnZS1zcGxpdFwiLCAyLCB7IDgxOTAsIDgxOTEgfSwgMiwgeyA4MTkxLCA4MTkwIH0gfSxcbitcdC8qIFRocmVlIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLFxuK1x0ICogd2l0aCBhIHNpbmdsZSBieXRlIGNvbnRpbnVpbmcgZWFjaCBzcGFuXG4rXHQgKi9cbitcdHsgXCIzcDN4LWxhcmdlLXNwbGl0XCIsIDMsIHsgODE5MCwgODE5MSwgODE5MSB9LCAzLCB7IDgxOTEsIDgxOTEsIDgxOTAgfSB9LFxuIH07XG4gXG4gS1VOSVRfQVJSQVlfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbiwgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnMsXG4gXHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiBcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHNpemVfdCBvZmZzZXQsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGJ1ZmxlbiwgbGVuO1xuK1x0dTggcGFja2V0WzE2XTtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGxlbiA9IHNpemVvZihwYWNrZXQpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwYWNrZXQsIGxlbiwgbGVuKTtcbitcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGFja2V0LCBvZmZzZXQpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIG9mZnNldCk7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBcdTAwMjZidWYsIFx1MDAyNmJ1ZmxlbixcbitcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGFja2V0ICsgb2Zmc2V0LCBsZW4gLSBvZmZzZXQpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbiAtIG9mZnNldCk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgMSk7XG4rXG4rXHRza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbitcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xuK1x0aWYgKHNrYikge1xuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVx1MDAzZWxlbiwgbGVuIC0gSERSX0xFTik7XG4rXHRcdGtmcmVlKHNrYik7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHQvKiBVbnJvbGxpbmcgaGVyZSBzbyBzdGFjayB0cmFjZXMgcG9pbnQgdG8gdGhlIGludm9jYXRpb24gd2l0aCB0aGVcbitcdCAqIGZhaWxpbmcgbGVuZ3RoLlxuK1x0ICovXG4rXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCAxLCBkZXYsIHJ4KTtcbitcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDIsIGRldiwgcngpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgMywgZGV2LCByeCk7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA0LCBkZXYsIHJ4KTtcbitcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDUsIGRldiwgcngpO1xuK1x0bWN0cF91c2JsaWJfdGVzdF9yeF9zcGxpdF9oZWFkZXIodGVzdCwgNiwgZGV2LCByeCk7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X3J4X3NwbGl0X2hlYWRlcih0ZXN0LCA3LCBkZXYsIHJ4KTtcbitcdG1jdHBfdXNibGliX3Rlc3Rfcnhfc3BsaXRfaGVhZGVyKHRlc3QsIDgsIGRldiwgcngpO1xuK31cbitcbisvKiBUZXN0IHRoZSBzdWJtaXNzaW9uIG9mIGEgcGFja2V0IHdpdGggYW4gaW1wb3NzaWJseSBzbWFsbCB2YWx1ZSBpbiB0aGVcbisgKiBoZWFkZXIncyBsZW5ndGggZmllbGQuIFZhbHVlcyBsZXNzIHRoYW4gSERSX0xFTiBhcmUgaW52YWxpZC5cbisgKi9cbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3Nob3J0X3BhY2tldChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRzaXplX3QgbGVuLCBidWZsZW47XG4rXHR1OCBwa3RidWZbMTJdO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBIRFJfTEVOIC0gMSk7XG4rXG4rXHRidWZsZW4gPSAwO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4rXG4rXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVQUk9UTyk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X2ludmFsaWRfZG10Zl9pZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRzaXplX3QgbGVuLCBidWZsZW47XG4rXHR1OCBwa3RidWZbMTJdO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0bGVuID0gc2l6ZW9mKHBrdGJ1Zik7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiwgbGVuLCBsZW4pO1xuK1xuK1x0Ly8gTWFrZSBwYWNrZXQgRE1URiBJRCBpbnZhbGlkXG4rXHRwa3RidWZbMV0gPSB+cGt0YnVmWzFdO1xuK1xuK1x0YnVmbGVuID0gMDtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FUFJPVE8pO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXHUwMDNlc2tiKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9ub25zcGFubmluZ190aW55KHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbitcdHNpemVfdCBsZW4sIGJ1ZmxlbjtcbitcdHU4IHBrdGJ1ZlszXTtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbitcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIGxlbik7XG4rXG4rXHRidWZsZW4gPSAwO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cdTAwM2VuZGV2LCByeCwgXHUwMDI2YnVmLCBcdTAwMjZidWZsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBidWZsZW4sIGxlbik7XG4rXG4rXHRtZW1jcHkoYnVmLCBwa3RidWYsIGxlbik7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByYywgLUVOT01TRyk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCByeC1cdTAwM2Vza2IpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuK1x0c2l6ZV90IGxlbiwgYnVmbGVuO1xuK1x0dTggcGt0YnVmWzIwXTtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIGZhbHNlKTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHRsZW4gPSBzaXplb2YocGt0YnVmKTtcbitcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmLCBsZW4sIGxlbiArIDEpO1xuK1xuK1x0YnVmbGVuID0gMDtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsIFx1MDAyNmJ1ZiwgXHUwMDI2YnVmbGVuLCBHRlBfS0VSTkVMKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgYnVmbGVuLCBsZW4pO1xuK1xuK1x0bWVtY3B5KGJ1ZiwgcGt0YnVmLCBsZW4pO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShkZXYtXHUwMDNlbmRldiwgcngsIGxlbik7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcmMsIC1FUFJPVE8pO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgcngtXHUwMDNlc2tiKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXHUwMDNlcnhfcGt0cy5xbGVuLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JfaGRyIGhlYWQ7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRzaXplX3QgbGVuLCB0eF9sZW47XG4rXHR1OCAqYnVmLCAqZmxhdF90eDtcbitcdGludCByYztcbitcbitcdGxlbiA9IDEwMDA7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuK1xuK1x0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmQ7XG4rXG4rXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgdHJ1ZSk7XG4rXG4rXHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XG4rXHRtY3RwX3VzYmxpYl90ZXN0X2ZpbGxfaGVhZChcdTAwMjZoZWFkLCBsZW4pO1xuK1xuK1x0c2tiID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X3NrYih0ZXN0LCBsZW4sIG5kZXYsIGJ1Zik7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgZmFsc2UpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0FTU0VSVF9GQUxTRSh0ZXN0LCBsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycykpO1xuK1xuK1x0ZmxhdF90eCA9IG1jdHBfdXNibGliX3Rlc3RfZmxhdHRlbl90eF9idWZmKHRlc3QsIFx1MDAyNmN0eC1cdTAwM2V0eF94ZmVycyxcbitcdFx0XHRcdFx0XHQgICBcdTAwMjZ0eF9sZW4pO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGZsYXRfdHgpO1xuK1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHR4X2xlbiwgbGVuICsgSERSX0xFTik7XG4rXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCwgXHUwMDI2aGVhZCwgSERSX0xFTik7XG4rXHRLVU5JVF9FWFBFQ1RfTUVNRVEodGVzdCwgZmxhdF90eCArIEhEUl9MRU4sIGJ1ZiwgbGVuKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGxlbjtcbitcdHU4ICpidWY7XG4rXHRpbnQgcmM7XG4rXG4rXHRsZW4gPSAxMDA7XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRuZGV2ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZGV2O1xuK1xuK1x0b3BzLnNlbmQgPSBtY3RwX3VzYmxpYl90ZXN0X3R4X3NlbmRfZmFpbDtcbitcbitcdHR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsIFx1MDAyNm9wcywgY3R4LCBmYWxzZSk7XG4rXHRidWYgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfYnVmKHRlc3QsIGxlbik7XG4rXHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbitcbitcdC8qIERvZXNuJ3QgY2FsbCBvcHMuc2VuZCBhcyBtb3JlIHBhY2tldHMgYXJlIGV4cGVjdGVkLFxuK1x0ICogc28gdGhlIHB1c2ggc2hvdWxkbid0IGZhaWwuXG4rXHQgKi9cbitcdHJjID0gbWN0cF91c2JsaWJfdHhfcHVzaChuZGV2LCB0eCwgc2tiLCB0cnVlKTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRza2IgPSBtY3RwX3VzYmxpYl90ZXN0X2luaXRfc2tiKHRlc3QsIGxlbiwgbmRldiwgYnVmKTtcbitcbitcdC8qIENhbGxzIG9wcy5zZW5kIGFzIG5vIGZ1cnRoZXIgcGFja2V0cyBhcmUgZXhwZWN0ZWQuICovXG4rXHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgZmFsc2UpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAwKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIHR4LVx1MDAzZWN1cl9jdHgpO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMpKTtcbit9XG4rXG4rLyogVGVzdCBzZW5kaW5nIG11bHRpcGxlIHBhY2tldHMgaW4gdGhlIHNhbWUgdHJhbnNmZXIsIGZvbGxvd2VkIGJ5IG9uZSB0aGF0XG4rICogc3BhbnMgbXVsdGlwbGUgc3Vic2VxdWVudCB0cmFuc2ZlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHNpemVfdCBpLCBtYXhfbGVuZ3RoLCB0eF9sZW5ndGg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbitcdHU4ICpidWYsICpmbGF0X3R4LCAqaW5kZXg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0Y29uc3Qgc3RydWN0IHtcbitcdFx0c2l6ZV90IGxlbjtcbitcdFx0Ym9vbCBtb3JlO1xuK1x0fSBzZW5kc1tdID0ge1xuK1x0XHR7IDEwMDAsIHRydWUgIH0sXG4rXHRcdHsgIDUwMCwgZmFsc2UgfSxcbitcdFx0eyA1MDAwLCBmYWxzZSB9LFxuK1x0fTtcbitcdGludCByYztcbitcbitcdHN0YXRpY19hc3NlcnQoIXNlbmRzW0FSUkFZX1NJWkUoc2VuZHMpIC0gMV0ubW9yZSxcbitcdFx0ICAgICAgXCJUaGUgbGFzdCBwdXNoIG11c3QgY2xhaW0gdGhlcmUgd2lsbCBiZSBubyBtb3JlXCIpO1xuK1xuK1x0bWF4X2xlbmd0aCA9IDA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XG4rXHRcdGlmIChzZW5kc1tpXS5sZW4gXHUwMDNlIG1heF9sZW5ndGgpXG4rXHRcdFx0bWF4X2xlbmd0aCA9IHNlbmRzW2ldLmxlbjtcbitcdH1cbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdG5kZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5kZXY7XG4rXG4rXHRvcHMuc2VuZCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfc2VuZDtcbitcbitcdHR4ID0gbWN0cF91c2JsaWJfdGVzdF90eF9pbml0KHRlc3QsIFx1MDAyNm9wcywgY3R4LCB0cnVlKTtcbitcdGJ1ZiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9idWYodGVzdCwgbWF4X2xlbmd0aCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNlbmRzKTsgaSsrKSB7XG4rXHRcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgc2VuZHNbaV0ubGVuLCBuZGV2LCBidWYpO1xuK1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgc2VuZHNbaV0ubW9yZSk7XG4rXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHR9XG4rXHRLVU5JVF9BU1NFUlRfRkFMU0UodGVzdCwgbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMpKTtcbitcbitcdGZsYXRfdHggPSBtY3RwX3VzYmxpYl90ZXN0X2ZsYXR0ZW5fdHhfYnVmZih0ZXN0LCBcdTAwMjZjdHgtXHUwMDNldHhfeGZlcnMsXG4rXHRcdFx0XHRcdFx0ICAgXHUwMDI2dHhfbGVuZ3RoKTtcbitcbitcdGZvciAoaSA9IDAsIGluZGV4ID0gZmxhdF90eDsgaSBcdTAwM2MgQVJSQVlfU0laRShzZW5kcyk7IGkrKykge1xuK1x0XHRzaXplX3QgbGVuZ3RoX3RvX2NoZWNrLCByZW1haW5pbmdfYnl0ZXM7XG4rXHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgaGVhZDtcbitcbitcdFx0aWYgKGluZGV4IC0gZmxhdF90eCBcdTAwM2U9IHR4X2xlbmd0aCAtIEhEUl9MRU4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdG1jdHBfdXNibGliX3Rlc3RfZmlsbF9oZWFkKFx1MDAyNmhlYWQsIHNlbmRzW2ldLmxlbik7XG4rXHRcdEtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCwgXHUwMDI2aGVhZCwgSERSX0xFTik7XG4rXHRcdGluZGV4ICs9IEhEUl9MRU47XG4rXHRcdHJlbWFpbmluZ19ieXRlcyA9IHR4X2xlbmd0aCAtIChpbmRleCAtIGZsYXRfdHgpO1xuK1xuK1x0XHRsZW5ndGhfdG9fY2hlY2sgPSBzZW5kc1tpXS5sZW47XG4rXHRcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCByZW1haW5pbmdfYnl0ZXMsIGxlbmd0aF90b19jaGVjayk7XG4rXHRcdGxlbmd0aF90b19jaGVjayA9IG1pbihyZW1haW5pbmdfYnl0ZXMsIGxlbmd0aF90b19jaGVjayk7XG4rXG4rXHRcdEtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCBpbmRleCxcbitcdFx0XHRcdCAgIGJ1ZiwgbGVuZ3RoX3RvX2NoZWNrKTtcbitcbitcdFx0aW5kZXggKz0gbGVuZ3RoX3RvX2NoZWNrO1xuK1x0fVxuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGksIEFSUkFZX1NJWkUoc2VuZHMpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF90eF9vdmVyZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wcztcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcdHNpemVfdCBsZW4sIGk7XG4rXHR1NjQgc3RhdHM7XG4rXHR1OCAqYnVmO1xuK1x0aW50IHJjO1xuK1xuK1x0bGVuID0gMjAwO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuK1x0bmRldiA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmRldjtcbitcbitcdG9wcy5zZW5kID0gbWN0cF91c2JsaWJfdGVzdF90eF9zZW5kX2ZhaWw7XG4rXG4rXHR0eCA9IG1jdHBfdXNibGliX3Rlc3RfdHhfaW5pdCh0ZXN0LCBcdTAwMjZvcHMsIGN0eCwgZmFsc2UpO1xuK1x0YnVmID0gbWN0cF91c2JsaWJfdGVzdF9pbml0X2J1Zih0ZXN0LCBsZW4pO1xuK1xuK1x0ZHN0YXRzID0gZ2V0X2NwdV9wdHIobmRldi1cdTAwM2Vkc3RhdHMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMzsgaSsrKSB7XG4rXHRcdHNrYiA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdF9za2IodGVzdCwgbGVuLCBuZGV2LCBidWYpO1xuK1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3R4X3B1c2gobmRldiwgdHgsIHNrYiwgaSAhPSAyKTtcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJjLCAwKTtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdFx0c3RhdHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMpO1xuK1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbitcdHB1dF9jcHVfcHRyKGRzdGF0cyk7XG4rXG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3RhdHMsIDMpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgbWN0cF91c2JsaWJfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sXG4gXHRcdFx0IG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW5fZ2VuX3BhcmFtcyksXG4rXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3RfcnhfaGVhZGVyX3NwbGl0cyksXG4rXHRLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2hvcnRfcGFja2V0KSxcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9pbnZhbGlkX2RtdGZfaWQpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3RpbnkpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X25vbnNwYW5uaW5nX3BhcnRpYWwpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X3BrdF9zcGFuKSxcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9tdWx0aV9wdXNoKSxcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF90eF9mYWlsaW5nX3NlbmQpLFxuK1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KSxcbiBcdHt9XG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjMyLjU4MzkwMTYxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzE0MTQxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVGFyZ2V0ZWQgS1VuaXQgVGVzdCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBgZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBLVW5pdCB0ZXN0aW5nLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBNQ1RQIFVTQiBsaWJyYXJ5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBmaWxlIG5hbWUgY29udmVudGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXMgdGhlICpvbmx5KiBmaWxlIGltcGFjdGVkLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZTsgYSB0YXJnZXRlZCBlZGl0IGxpa2UgdGhpcyBzdWdnZXN0cyBhIHZlcnkgc3BlY2lmaWMgaXNzdWUgb3IgcmVmaW5lbWVudCB3aXRoaW4gdGhhdCB0ZXN0IG1vZHVsZS5cblxuVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBnaXRgIHN0YXR1cyBvciBkaWZmLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2hhbmdlLiBJZiBvdGhlciBmaWxlcyBhcmUgaW52b2x2ZWQsIEknbGwgYWRqdXN0IG15IGFuYWx5c2lzIGFjY29yZGluZ2x5LCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb3Igd2lkZXIgaW1wbGljYXRpb25zLiBGaW5hbGx5LCBJJ2xsIHJ1biBteSBzdGFuZGFyZCBzdWl0ZSBvZiB2ZXJpZmljYXRpb24gdG9vbHMg4oCTIG1heWJlIGEgbGludGluZyBjaGVjayBvciBhIHNwZWNpZmljIHRvb2wgZGVzaWduZWQgdG8gYXNzZXNzIEtVbml0IHRlc3QgaW50ZWdyaXR5LiBUaGlzIHN5c3RlbWF0aWMgYXBwcm9hY2ggZW5zdXJlcyBJIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjM1LjY1NTMxODk2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA0ODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jPTg3MD1zdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3R4X292ZXJmbG93KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTkxMC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYzo5MTE6c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy05MTItXFx0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYz05Mjc9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTkyOC1cXHQubmFtZSA9IFxcXCJtY3RwLXVzYmxpYlxcXCIsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmM6OTI5OlxcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy05MzAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6MzUuNzAwMzcyNDk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ3NDA5MTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFdvcnRoRnV6emluZyBmb3IgTm9uLUV4ZWN1dGFibGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHF1aWNrbHkgY2xhcmlmeSB0aGUgV29ydGhGdXp6aW5nIHJ1bGVzIHJlZ2FyZGluZyB1bml0IHRlc3RzLCBzcGVjaWZpY2FsbHkgS1VuaXQgdGVzdHMsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG5vbi1leGVjdXRhYmxlIG1vZGlmaWNhdGlvbnMuIFNlY3Rpb24gMiBvdXRsaW5lcyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEsIHRoZSBzY2VuYXJpb3Mgd2hlcmUgd2UnZCBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoYXQgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyBhcmUgZ2VuZXJhbGx5IGV4Y2x1ZGVkLiBUaGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGNvbW1lbnRzLCBzcGVsbGluZyBjb3JyZWN0aW9ucywgYW5kIGFueXRoaW5nIGluIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSB0b29scywgc2FtcGxlcywgc2NyaXB0cywgaWYgdGhleSBkb24ndCBpbXBhY3QgdGhlIGNvcmUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBtb2R1bGVzLCBhcmUgdHlwaWNhbGx5IGEgbm8tZ28gZm9yIGZ1enppbmcuIEFsc28gZGVjb3JhdGl2ZSBsb2dnaW5nIGFuZCBidWlsZCBzeXN0ZW0gY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIEMgbG9naWMgYXJlIGFsc28gZXhjbHVkZWQuXG5cbkJ1dCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyDigJMgaXMgYSBLVW5pdCB0ZXN0IGNvbnNpZGVyZWQgc2VsZi10ZXN0IGNvZGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjay4gTGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gYXNzZXNzIGEgc3BlY2lmaWMgZXhhbXBsZSBmaWxlLCBzYXkgYG1jdHAtdXNibGliLXRlc3QuY2AsIHRvIGZpZ3VyZSBvdXQgaXRzIG5hdHVyZS4gV2hhdCBleGFjdGx5ICppcyogdGhpcyBmaWxlIGRvaW5nPyBBbmQgdGhlbiwgY3J1Y2lhbCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIHNldHRpbmdzIGZvciBgbWN0cC11c2JsaWItdGVzdC5jYCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBhbmQgY29tcGlsZWQuIFRoYXQnbGwgdGVsbCBtZSBpZiBpdCBtZWV0cyB0aGUgY3JpdGVyaWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjI2OjQwLjE3NDQ2NjQ4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYzNTc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwLXVzYmxpYi10ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTItLypcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYzozOiAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLTQtICogdW5pdCB0ZXN0IGRlZmluaXRpb25zLlxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTYyMT1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5XFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNjIzLSNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjI0OiNpbmNsdWRlIFxcXCJtY3RwLXVzYmxpYi10ZXN0LmNcXFwiXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NDAuMjI2MTEwMjkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5OTM2ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgQ2hlY2sgZm9yIFVTQmxpYiBUZXN0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIEtjb25maWcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVGAuIElzIGl0IGVuYWJsZWQ/IERpc2FibGVkPyBEb2VzIGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZCBvbiBvdGhlciBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciBjb25maWd1cmluZyBhIHJlbGF0ZWQgZmVhdHVyZSwgYW5kIGEgcXVpY2sgS2NvbmZpZyBjaGVjayB3aWxsIGdpdmUgbWUgdGhlIGZvdW5kYXRpb25hbCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgaG93IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjkyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NDIuMTI1NDgyNjMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQ4NzU0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTUwPWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01OS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcXFwiTUNUUCB1c2JsaWIgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz02MjE9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeVxcXCIpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy02MjItXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjYyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1QpXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYyNC0jaW5jbHVkZSBcXFwibWN0cC11c2JsaWItdGVzdC5jXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzoyNjo0My43NjAzODQxODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTg3MDA3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBtY3RwLXVzYmxpYi10ZXN0LmNgIGlzIHRoZSBvbmx5IGZpbGUgY2hhbmdlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIFNpbmNlIHRoaXMgaXMgaW4gdGhlIGNvbnRleHQgb2YgS1VuaXQgdGVzdHMsIEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgZXZlbiAqY29uc2lkZXJzKiBLVW5pdCB0ZXN0cyB0byBiZSBwYXJ0IG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgb3IgaWYgdGhleSBhcmUgc2VwYXJhdGUgZXhlY3V0aW9uIHBhdGhzIG9ubHkgZm9yIHRlc3RpbmcgYXQgYm9vdCBvciBtb2R1bGUgbG9hZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGZvciBmdXp6aW5nLlxuXG5MZXQncyByZS1yZWFkIHRoZSBndWlkZWxpbmVzOyBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFXCIuIFRoZSBkb2N1bWVudGF0aW9uIGVtcGhhc2l6ZXMgdGhhdCBmdXp6aW5nIHNob3VsZCBvbmx5IHRhcmdldCBjb2RlIHRoYXQncyByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSBHQ0Ugb3IgUUVNVSwgYW5kIHZpYSBzeXNjYWxscywgb3IgZW11bGF0ZWQgZGV2aWNlcy4gTm90IGNvZGUgdGhhdCBydW5zIGluIGEgdW5pdCB0ZXN0IGhhcm5lc3MuXG5cblRoZSBndWlkZWxpbmVzIGFsc28gc2F5IHRvIGV4Y2x1ZGUgdGhpbmdzIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgYW5kIHNhbXBsZXMsIGFuZCBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgYC91c3IvYCBgL3Rvb2xzL2AgYC9zYW1wbGVzL2AgYW5kIGAvc2NyaXB0cy9gIGFzIHRoaW5ncyB0byBza2lwLCBpZiB0aGV5IGRvbid0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIG9yIGtlcm5lbCBtb2R1bGVzLlxuXG5BaCwgcmlnaHQhIEtVbml0IHRlc3RzIGFyZSB1bml0IHRlc3RzLiBUaGV5J3JlIG5vdCBydW50aW1lIGtlcm5lbCBjb2RlLiBUaGV5IGV4ZWN1dGUgd2hlbiB0aGUga2VybmVsIHN0YXJ0cyBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIG9yIGlmIHRyaWdnZXJlZCBieSBkZWJ1Z2ZzLiBUaGV5IHJ1biBpbiBhIHN5bnRoZXRpYyBzY2VuYXJpbyB3aXRoaW4gdGhlIEtVbml0IGhhcm5lc3MuIFRoZXkncmUgc2VsZi10ZXN0cyBhbmQgdW5pdCB0ZXN0cyB0aGF0IHJ1biBhdCBhIGRpZmZlcmVudCBzdGFnZS4gU28sIGl0J3MgcHJldHR5IGNsZWFyOiBzeXprYWxsZXIgKHdpdGggaXRzIGZvY3VzIG9uIHN5c2NhbGxzLCBkZXZpY2UgaW50ZXJhY3Rpb24sIGFuZCBzbyBvbikgd29uJ3QgcmVhY2ggdGhpcyBjb2RlLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSB3YXNuJ3QgYSBoaWRkZW4gY2hhbmdlIHRvIGBtY3RwLXVzYmxpYi5jYCBpdHNlbGYuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbW1pdCBkaWZmLCBpdCdzIGNsZWFyOlxuYGBgZGlmZlxuY29tbWl0IGVkODAzM2IzNzA1YTM0YzQ3OWVmMGQ0ZTkzNWI3MmZjYjQ0NTQ1ZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjI2OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuaW5kZXggOWRmNDAxYTkxNGZmNS4uMjVlYWM4MGRiM2UyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuYGBgXG5Ob3BlLiAqT25seSogYG1jdHAtdXNibGliLXRlc3QuY2Agd2FzIHRvdWNoZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBjb21taXQuIENoZWNraW5nIHRoZSBnaXQgbG9ncyBhbmQgdGhlIGZpbGVzIG1vZGlmaWVkLCBjb25maXJtcyB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgZmlsZSBhZmZlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NTIuNzQ3MzkzNzU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuICA1MTpcXHRcXHR0cmlzdGF0ZSBcXFwiTUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVxcXCJcXG4gIDUyOlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICA1MzpcXHRcXHRoZWxwXFxuICA1NDpcXHRcXHQgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0XFxuICA1NTpcXHRcXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcXG4gIDU2OlxcdFxcdCAgdHJhbnNwb3J0IGRyaXZlclxcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXFxuICA1OTpcXHRcXG4gIDYwOlxcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbiAgNjE6XFx0ICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNjI6XFx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDYzOlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDY0OlxcdFxcbiAgNjU6XFx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbiAgNjY6XFx0XFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICA2ODpcXHRcXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuICA2OTpcXHRcXHRoZWxwXFxuICA3MDpcXHRcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiAgNzE6XFx0XFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHQgIE1DVFAtb3Zlci1VU0IgaW50ZXJmYWNlcyBhcmUgcGVlci10by1wZWVyLCBzbyBlYWNoIGludGVyZmFjZVxcbiAgNzQ6XFx0XFx0ICByZXByZXNlbnRzIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB0byBvbmUgcmVtb3RlIE1DVFAgZW5kcG9pbnQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGVuZG1lbnVcXG4gIDc3OlxcdFxcbiAgNzg6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NTIuNzQ3NDU3MDY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3OTY1NjE1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRhc2tlZCB3aXRoIGV2YWx1YXRpbmcgdGhpcyBwYXRjaCBmb3IgZnV6emluZyBwb3RlbnRpYWwuIE15IGluaXRpYWwgY2hlY2sgY29uZmlybXMgdGhhdCB0aGUgbW9kaWZpZWQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWN0cC11c2JsaWItdGVzdC5jYCwgaXMgcGFydCBvZiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSBmb3IgdGhlIE1DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5LiBTaW5jZSBLVW5pdCB0ZXN0cyBhcmUgZXhwbGljaXRseSBkZXNpZ25lZCB0byBiZSAqbm9uLWZ1enphYmxlKiDigJMgdGhleSBleGVjdXRlIGR1cmluZyBib290L3Rlc3QgcnVucyBhbmQgYXJlbid0IGFjY2Vzc2libGUgZHVyaW5nIHJ1bnRpbWUgZnV6emluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciDigJMgSSdtIGxlYW5pbmcgdG93YXJkcyBhIFwibm8gZ29cIiBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlc2Ugc2VsZi10ZXN0IGNhc2VzLCB0aGV5IGFyZW4ndCBnb2luZyB0byBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgYWNjZXNzaWJsZSBkdXJpbmcgbm9ybWFsIHN5c3RlbSBvcGVyYXRpb24uXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbnMgYXJlIGNsZWFyOiB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBjb25maWd1cmF0aW9uIHdvdWxkIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAobm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUpXG4qICAgYEZvY3VzU3ltYm9sczogW11gIChubyBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgYXR0ZW50aW9uKVxuKiAgIGBSZWFzb25pbmc6IFRoZSBwYXRjaCBzb2xlbHkgYWx0ZXJzIEtVbml0IHRlc3QgY2FzZXMgd2l0aGluIGBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY2AgZm9yIHRoZSBNQ1RQIFVTQiB0cmFuc3BvcnQgbGlicmFyeS4gSXQgZG9lc24ndCBtb2RpZnkgYW55IHJ1bnRpbWUgZHJpdmVyIG9yIGtlcm5lbCBsb2dpYyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCB2aWEgc3l6a2FsbGVyIGZ1enppbmcuKVxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSdtIGp1c3QgZ29pbmcgdG8gdmVyaWZ5IHRoYXQgbXkgbWVudGFsIHBpY3R1cmUgaXMgYWNjdXJhdGUuIFdvcnRoRnV6emluZzogZmFsc2UsIEVuYWJsZUNvbmZpZ3MgaXMgYW4gZW1wdHkgYXJyYXksIEZvY3VzU3ltYm9scyBpcyBlbXB0eSwgYW5kIHRoZSByZWFzb25pbmcgZXhwbGFpbnMgd2h5LCBzdWNjaW5jdGx5LiBZdXAsIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg2LCJPdXRwdXRUb2tlbnMiOjc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6MjY6NTYuNTQ0MDIxMzc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVW5pdCB0ZXN0IGNhc2VzIGluIGRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBkcml2ZXIgb3IgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1VuaXQgdGVzdCBjYXNlcyBpbiBkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYy4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IHJ1bnRpbWUgZHJpdmVyIG9yIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcgc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzoyNjo1Ni41NDQwNDU1OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowfdfnn[1] Phase: Running StartedAt: 2026-09-04 03:27:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfdfnn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-04 03:27:08 +0000 UTC FinishedAt: 2026-09-04 03:27:12 +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,}