Name: series-workflowtzlw7 Phase: Failed StartedAt: 2026-07-08 15:25:59 +0000 UTC FinishedAt: 2026-07-08 15:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzlw7[0] Phase: Succeeded StartedAt: 2026-07-08 15:25:59 +0000 UTC FinishedAt: 2026-07-08 15:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzlw7[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 15:25:59 +0000 UTC FinishedAt: 2026-07-08 15:47:34 +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+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGZvcm1hdHRpbmcgb2YgZXJyb3IgbWVzc2FnZXMgKGJhZCBwYWdlIG1hcCBsb2dzKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuIEl0IGlzIHB1cmVseSBhIGRlY29yYXRpdmUgY2hhbmdlIGZvciBsb2dnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk2OTUwYWIyYzdhZTA3NWVmZDJlY2RkZGUzYmNkMmEwOGFmYTdkODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjQ3OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5hMmI2M2FmODI3OTI1OSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUxOSw5ICYjNDM7NTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0O292ZXJmbG93XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUzMik6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDh4XCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4XCYjMzQ7LCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7XHRjYXNlIHNpemVvZih1MTI4KTpcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0OyUwMTZsbHglMDE2bGx4XCYjMzQ7LFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcgbG9uZykoKihjb25zdCB1MTI4ICopZW50cnkgXHUwMDNlXHUwMDNlIDY0KSxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDt1bnN1cHBvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHR2YWxfdG9fc3RyKGJ1ZiwgdmFsKVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRfX2F1dG9fdHlwZSBfX3ZhbCA9ICh2YWwpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cigoYnVmKSwgc2l6ZW9mKGJ1ZiksIFx1MDAyNl9fdmFsLCBzaXplb2YoX192YWwpKTtcdFxcXG4mIzQzO1x0fSB3aGlsZSAoMClcbiYjNDM7XG4gc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyBwZ2R2LCBwNGR2LCBwdWR2LCBwbWR2O1xuJiM0MztcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcbiYjNDM7XHRjaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07XG4mIzQzO1x0Y2hhciBwdWRfc3RyW1BUVkFMX1NUUl9NQVhdO1xuJiM0MztcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHA0ZF90IHA0ZCwgKnA0ZHA7XG4gXHRwdWRfdCBwdWQsICpwdWRwO1xuIFx0cG1kX3QgcG1kLCAqcG1kcDtcbkBAIC01MzIsMzQgJiM0Mzs1NzEsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIHNlZSBsb2NraW5nIHJlcXVpcmVtZW50cyBmb3IgcHJpbnRfYmFkX3BhZ2VfbWFwKCkuXG4gXHQgKi9cbiBcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcbi1cdHBnZHYgPSBwZ2RfdmFsKCpwZ2RwKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpO1xuIFxuIFx0aWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHhcXG5cJiMzNDssIHBnZHYpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzXFxuXCYjMzQ7LCBwZ2Rfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcbi1cdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHA0ZF9zdHIsIHA0ZF92YWwocDRkKSk7XG4gXG4gXHRpZiAoIXA0ZF9wcmVzZW50KHA0ZCkgfHwgcDRkX2xlYWYocDRkKSkge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcXG5cJiMzNDssIHBnZHYsIHA0ZHYpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzIHA0ZDolc1xcblwmIzM0OywgcGdkX3N0ciwgcDRkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuIFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4tXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xuJiM0MztcdHB0dmFsX3RvX3N0cihwdWRfc3RyLCBwdWRfdmFsKHB1ZCkpO1xuIFxuIFx0aWYgKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpIHtcbi1cdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHhcXG5cJiMzNDssIHBnZHYsIHA0ZHYsIHB1ZHYpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzIHA0ZDolcyBwdWQ6JXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbiBcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuLVx0cG1kdiA9IHBtZF92YWwocG1kKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTtcbiBcbiBcdC8qXG4gXHQgKiBEdW1waW5nIHRoZSBQVEUgd291bGQgYmUgbmljZSwgYnV0IGl0JiMzOTtzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxuQEAgLTU2Nyw4ICYjNDM7NjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXG4gXHQgKiBhbHJlYWR5IHRha2UgY2FyZSBvZiBwcmludGluZyB0aGUgUFRFLlxuIFx0ICovXG4tXHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LFxuLVx0XHQgcDRkdiwgcHVkdiwgcG1kdik7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzIHA0ZDolcyBwdWQ6JXMgcG1kOiVzXFxuXCYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTtcbiB9XG4gXG4gLypcbkBAIC01ODQsMTAgJiM0Mzs2MjIsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiAgKiBwYWdlIHRhYmxlIGxvY2suXG4gICovXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLFxuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjNDM7XHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXG4gXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXG5AQCAtNTk2LDggJiM0Mzs2MzUsOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRtYXBwaW5nID0gdm1hLVx1MDAzZXZtX2ZpbGUgPyB2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcgOiBOVUxMO1xuIFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpO1xuIFxuLVx0cHJfYWxlcnQoXCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XCYjMzQ7LCBjdXJyZW50LVx1MDAzZWNvbW0sXG4tXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcbiYjNDM7XHRwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolc1wmIzM0OywgY3VycmVudC1cdTAwM2Vjb21tLFxuJiM0MztcdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcbiBcdF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRkdW1wX3BhZ2UocGFnZSwgXCYjMzQ7YmFkIHBhZ2UgbWFwXCYjMzQ7KTtcbkBAIC02MjcsOCAmIzQzOzY2NywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXG4tXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxuJiM0MztzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiYjNDM7XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuJiM0Mzt9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcJiMzNDtzdHJ1Y3QgcGFnZVwmIzM0OyBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIHRhYmxlIGVudHJ5LlxuQEAgLTYzNiw4ICYjNDM7NjgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcJiMzNDtzcGVjaWFsXCYjMzQ7LlxuLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuJiM0MzsgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwmIzM0O1NwZWNpYWxcJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCYjMzQ7c3RydWN0IHBhZ2VcJiMzNDsgKGVpdGhlclxuICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgJiM0Mzs3NDMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCxcbi1cdFx0dW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICYjNDM7NzU2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuJiM0MztcdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdC8qXG5AQCAtNzQxLDcgJiM0Mzs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbiYjNDM7XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCAmIzQzOzgxMywxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxuLVx0XHRcdFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbiB9XG4gXG4gLyoqXG5AQCAtODA5LDggJiM0Mzs4NTcsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxuLVx0XHRcdFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbiB9XG4gXG4gLyoqXG5AQCAtODUwLDggJiM0Mzs5MDAsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxuIHtcbiYjNDM7XHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGZvcm1hdHRpbmcgb2YgZXJyb3IgbWVzc2FnZXMgKGJhZCBwYWdlIG1hcCBsb2dzKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuIEl0IGlzIHB1cmVseSBhIGRlY29yYXRpdmUgY2hhbmdlIGZvciBsb2dnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTY5NTBhYjJjN2FlMDc1ZWZkMmVjZGRkZTNiY2QyYTA4YWZhN2Q4MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMTU6NDc6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMxLi5hMmI2M2FmODI3OTI1OSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUxOSw5ICYjNDM7NTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOyNkZWZpbmUgUFRWQUxfU1RSX01BWAkoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgJmx0OyBlbnRyeV9zaXplICogMiAmIzQzOyAxKSkgewomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDtvdmVyZmxvdyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5X3NpemUpIHsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICYjMzQ7JTA4eCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JiMzNDssICooY29uc3QgdTY0ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCiYjNDM7CWNhc2Ugc2l6ZW9mKHUxMjgpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JTAxNmxseCYjMzQ7LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSAmZ3Q7Jmd0OyA2NCksCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0O3Vuc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpCQkJCQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCQkJXAomIzQzOwkJX19hdXRvX3R5cGUgX192YWwgPSAodmFsKTsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQlcCiYjNDM7CQlwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgJmFtcDtfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7CVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjsKJiM0MzsJY2hhciBwZ2Rfc3RyW1BUVkFMX1NUUl9NQVhdOwomIzQzOwljaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07CiYjNDM7CWNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTsKJiM0MzsJY2hhciBwbWRfc3RyW1BUVkFMX1NUUl9NQVhdOwogCXA0ZF90IHA0ZCwgKnA0ZHA7CiAJcHVkX3QgcHVkLCAqcHVkcDsKIAlwbWRfdCBwbWQsICpwbWRwOwpAQCAtNTMyLDM0ICYjNDM7NTcxLDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAJICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS4KIAkgKi8KIAlwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JcGdkdiA9IHBnZF92YWwoKnBnZHApOwomIzQzOwlwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpOwogCiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseFxuJiMzNDssIHBnZHYpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwZ2Q6JXNcbiYjMzQ7LCBwZ2Rfc3RyKTsKIAkJcmV0dXJuOwogCX0KIAogCXA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpOwogCXA0ZCA9IHA0ZHBfZ2V0KHA0ZHApOwotCXA0ZHYgPSBwNGRfdmFsKHA0ZCk7CiYjNDM7CXB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpOwogCiAJaWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHsKLQkJcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcbiYjMzQ7LCBwZ2R2LCBwNGR2KTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGdkOiVzIHA0ZDolc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpOwogCQlyZXR1cm47CiAJfQogCiAJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiAJcHVkID0gcHVkcF9nZXQocHVkcCk7Ci0JcHVkdiA9IHB1ZF92YWwocHVkKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHB1ZF9zdHIsIHB1ZF92YWwocHVkKSk7CiAKIAlpZiAoIXB1ZF9wcmVzZW50KHB1ZCkgfHwgcHVkX2xlYWYocHVkKSkgewotCQlwcl9hbGVydCgmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdiwgcHVkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzXG4mIzM0OywgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTsKIAlwbWQgPSBwbWRwX2dldChwbWRwKTsKLQlwbWR2ID0gcG1kX3ZhbChwbWQpOwomIzQzOwlwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTsKIAogCS8qCiAJICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSwKQEAgLTU2Nyw4ICYjNDM7NjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGQKIAkgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZAogCSAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuCiAJICovCi0JcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwKLQkJIHA0ZHYsIHB1ZHYsIHBtZHYpOwomIzQzOwlwcl9hbGVydCgmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzIHBtZDolc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIsIHBtZF9zdHIpOwogfQogCiAvKgpAQCAtNTg0LDEwICYjNDM7NjIyLDExIEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAgKiBwYWdlIHRhYmxlIGxvY2suCiAgKi8KIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLAotCQllbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSwKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiYjNDM7CWNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdOwogCXBnb2ZmX3QgaW5kZXg7CiAKIAlpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpCkBAIC01OTYsOCAmIzQzOzYzNSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAltYXBwaW5nID0gdm1hLSZndDt2bV9maWxlID8gdm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcgOiBOVUxMOwogCWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTsKIAotCXByX2FsZXJ0KCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4JiMzNDssIGN1cnJlbnQtJmd0O2NvbW0sCi0JCSBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTsKJiM0MzsJcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JXMmIzM0OywgY3VycmVudC0mZ3Q7Y29tbSwKJiM0MzsJCSBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7CiAJX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZSh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKIAlpZiAocGFnZSkKIAkJZHVtcF9wYWdlKHBhZ2UsICYjMzQ7YmFkIHBhZ2UgbWFwJiMzNDspOwpAQCAtNjI3LDggJiM0Mzs2NjcsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIAl9CiB9CiAKLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXAotCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIHB0ZV92YWwocHRlKSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpCiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpOwomIzQzOwomIzQzOwlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCAmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7fQogCiAvKioKICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuCkBAIC02MzYsOCAmIzQzOzY4MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLgogICogQHBmbjogVGhlIFBGTiBzdG9yZWQgaW4gdGhlIHBhZ2UgdGFibGUgZW50cnkuCiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgJiMzNDtzcGVjaWFsJiMzNDsuCi0gKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS4KICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LgomIzQzOyAqIEBlbnRyeV9zaXplOiBUaGUgc2l6ZSBvZiBAZW50cnkuCiYjNDM7ICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuCiAgKgogICogJiMzNDtTcGVjaWFsJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IChlaXRoZXIKICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzCkBAIC02OTcsNyAmIzQzOzc0Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCwKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiYjNDM7CQljb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIHsKIAlpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7CiAJCWlmICh1bmxpa2VseShzcGVjaWFsKSkgewpAQCAtNzEwLDcgJiM0Mzs3NTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJaWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKQogCQkJCXJldHVybiBOVUxMOwogCi0JCQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpOwomIzQzOwkJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQkvKgpAQCAtNzQxLDcgJiM0Mzs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJaWYgKHVubGlrZWx5KHBmbiAmZ3Q7IGhpZ2hlc3RfbWVtbWFwX3BmbikpIHsKIAkJLyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovCi0JCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7CiYjNDM7CQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJLyoKQEAgLTc2Nyw4ICYjNDM7ODEzLDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICBwdGVfdCBwdGUpCiB7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLAotCQkJCXB0ZV92YWwocHRlKSwgUEdUQUJMRV9MRVZFTF9QVEUpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7CiB9CiAKIC8qKgpAQCAtODA5LDggJiM0Mzs4NTcsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQlwbWRfdCBwbWQpCiB7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLAotCQkJCXBtZF92YWwocG1kKSwgUEdUQUJMRV9MRVZFTF9QTUQpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7CiB9CiAKIC8qKgpAQCAtODUwLDggJiM0Mzs5MDAsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpCiB7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcHVkX3ZhbChwdWQpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHVkX3BmbihwdWQpLCBwdWRfc3BlY2lhbChwdWQpLAotCQkJCXB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7CiB9CiAjZW5kaWYKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE1CgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHRvdWNoZXMgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYW5kIHJlcG9ydHMgJiMzNDtCYWQgcGFnZSBtYXAmIzM0OyBlcnJvcnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgKm5vdCogc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZywgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgZm9ybWF0IG9mIHRoZSBlcnJvciBtZXNzYWdlcyBnZW5lcmF0ZWQgd2hlbiB0aGUga2VybmVsIGVuY291bnRlcnMgYSBjb3JydXB0ZWQgcGFnZSB0YWJsZS4gSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgYW5kIGBwdHZhbF90b19zdHJgLCB3aGljaCBhcmUgY2xlYXJseSBhaW1lZCBhdCBhIG1vcmUgc3RydWN0dXJlZCBhbmQgcGVyaGFwcyBtb3JlIHJlYWRhYmxlIHdheSB0byByZXByZXNlbnQgcGFnZSB0YWJsZSBlbnRyaWVzIChwZ2QsIHA0ZCwgcHVkLCBwbWQsIHB0ZSkgYXMgaGV4IHN0cmluZ3MgaW4gdGhlIGxvZ3MuIFRoZSBleGlzdGluZyBgcHJfYWxlcnRgIGNhbGxzIHdpdGggYCUwOGxseGAgYXJlIGJlaW5nIHJlcGxhY2VkIGJ5IHRoZXNlIG5ldyBmb3JtYXR0aW5nIGZ1bmN0aW9ucy4gIEkgcmVjb2duaXplIHRoaXMgYXMgYSBtb3ZlIGF3YXkgZnJvbSBoYXJkLWNvZGVkIGZvcm1hdHMgdG8gc29tZXRoaW5nIHBvdGVudGlhbGx5IG1vcmUgbWFpbnRhaW5hYmxlLgoKTXkgaW50dWl0aW9uIGlzIHRoaXMgaXMgZW50aXJlbHkgZGVjb3JhdGl2ZTogdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFwcGVhciB0byBpbnRyb2R1Y2UgKm5ldyogYnVncywgbm9yIGRvZXMgaXQgaW1wYWN0IGV4aXN0aW5nIGNvbnRyb2wgZmxvdyAqZXhjZXB0KiBpbiB0aGUgZXJyb3ItcmVwb3J0aW5nIHBhdGgsIHdoaWNoIGlzIG9ubHkgcmVhY2hlZCBpZiBhIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIGlzIGFscmVhZHkgcHJlc2VudC4gVGhpcyBjaGFuZ2UgdXBkYXRlcyB0aGUgZnVuY3Rpb25zIHRoYXQgcHJpbnQgdGhlc2UgbWVzc2FnZXMsIHN1Y2ggYXMgYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgIGFuZCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCwgdG8gdXNlIHRoZSBuZXcgc3RyaW5nIGZvcm1hdHRpbmcuIEZ1cnRoZXJtb3JlLCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgcHJpbnRfYmFkX3B0ZWAsIGBfX3ZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlYCwgYW5kIGRlcml2YXRpdmVzIGFyZSB1cGRhdGVkIHRvIHBhc3MgdGhlIHBhZ2UgdGFibGUgZW50cnkgYXMgYSBwb2ludGVyIGFuZCBzaXplLCByYXRoZXIgdGhhbiBhIHJhdyBgdW5zaWduZWQgbG9uZyBsb25nYC4gVGhpcyBpcyBhIHVzZWZ1bCByZWZhY3RvcmluZywgYW5kIGluZGljYXRlcyBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gT2theSwgSSYjMzk7bSBjaGVja2luZyB0aGUgZGlmZi4gYGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZGAgaXMgdW50b3VjaGVkLCBtZWFuaW5nIHJhdGUgbGltaXRpbmcgaXMgdW5hZmZlY3RlZC4gVGhlIG5ldyBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgYW5kIHRoZSBtYWNybyBgcHR2YWxfdG9fc3RyYCBhcmUgaW5kZWVkIGp1c3QgZm9yIGZvcm1hdHRpbmcuIFRoZSByZXBsYWNlbWVudHMgSSBhbnRpY2lwYXRlZCBhcmUgdGhlcmUuIGBwcmludF9iYWRfcHRlYCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gY29udmVydGVkIGZyb20gYSBtYWNybyB0byBhIGZ1bmN0aW9uLCBub3cgcGFzc2VkIGVudHJ5IGFzIGEgcG9pbnRlci4gRmluYWxseSwgdGhlIGZ1bmN0aW9uIGNhbGwgc2lnbmF0dXJlcyBmb3IgZnVuY3Rpb25zIGxpa2UgYF9fdm1fbm9ybWFsX3BhZ2VgIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGFjY2VwdCBgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplYCB3aGljaCBJIHByZWZlci4KCkFscmlnaHQsIHRoZSBsb2dpYyBpcyBzb3VuZC4gTm90aGluZyBoZXJlIGFsdGVycyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlIGtlcm5lbCB1bmxlc3MgYSBwYWdlIG1hcCBlcnJvciBpcyAqYWxyZWFkeSogcHJlc2VudC4gRXZlbiB0aGVuLCBpdCYjMzk7cyBqdXN0IGEgY29zbWV0aWMgY2hhbmdlIHRvIHRoZSBlcnJvciBtZXNzYWdlIGl0c2VsZiwgYW5kIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIG11c3QgYWxyZWFkeSBiZSB0aGVyZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBwYXRjaCBpcyBpc29sYXRlZCB0byBmb3JtYXR0aW5nIHRoZSBsb2cgbWVzc2FnZXM7IGl0IGlzIG5vdCBpbnRyb2R1Y2luZyBuZXcgYmVoYXZpb3JzLiBJIHdpbGwgbm93IGBzZXQtcmVzdWx0c2AgdG8gcmVmbGVjdCB0aGlzIGZpbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGZvcm1hdHRpbmcgb2YgZXJyb3IgbWVzc2FnZXMgKGJhZCBwYWdlIG1hcCBsb2dzKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuIEl0IGlzIHB1cmVseSBhIGRlY29yYXRpdmUgY2hhbmdlIGZvciBsb2dnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ3OjEzLjE3MTAyNTE2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU1MzAwNTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ3OjEzLjE3MTAzOTU5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5NTk4MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTY5NTBhYjJjN2FlMDc1ZWZkMmVjZGRkZTNiY2QyYTA4YWZhN2Q4MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjQ3OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uYTJiNjNhZjgyNzkyNTkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MTksOSArNTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuKyNkZWZpbmUgUFRWQUxfU1RSX01BWFxcdCgzMiArIDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xcbitcXG4rc3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxcbit7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgXFx1MDAzYyBlbnRyeV9zaXplICogMiArIDEpKSB7XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCJvdmVyZmxvd1xcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xcbitcXHRjYXNlIHNpemVvZih1MzIpOlxcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwiJTA4eFxcXCIsICooY29uc3QgdTMyICopZW50cnkpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBzaXplb2YodTY0KTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwMTZsbHhcXFwiLCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKVxcbitcXHRjYXNlIHNpemVvZih1MTI4KTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwMTZsbHglMDE2bGx4XFxcIixcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKCooY29uc3QgdTEyOCAqKWVudHJ5IFxcdTAwM2VcXHUwMDNlIDY0KSxcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCJ1bnN1cHBvcnRlZFxcXCIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbisjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdF9fYXV0b190eXBlIF9fdmFsID0gKHZhbCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcXHUwMDI2X192YWwsIHNpemVvZihfX3ZhbCkpO1xcdFxcXFxcXG4rXFx0fSB3aGlsZSAoMClcXG4rXFxuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcXG4rXFx0Y2hhciBwZ2Rfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbitcXHRjaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07XFxuK1xcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4rXFx0Y2hhciBwbWRfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbiBcXHRwNGRfdCBwNGQsICpwNGRwO1xcbiBcXHRwdWRfdCBwdWQsICpwdWRwO1xcbiBcXHRwbWRfdCBwbWQsICpwbWRwO1xcbkBAIC01MzIsMzQgKzU3MSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxcbiBcXHQgKiBzZWUgbG9ja2luZyByZXF1aXJlbWVudHMgZm9yIHByaW50X2JhZF9wYWdlX21hcCgpLlxcbiBcXHQgKi9cXG4gXFx0cGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xcbi1cXHRwZ2R2ID0gcGdkX3ZhbCgqcGdkcCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwZ2Rfc3RyLCBwZ2RfdmFsKCpwZ2RwKSk7XFxuIFxcbiBcXHRpZiAoIXBnZF9wcmVzZW50KCpwZ2RwKSB8fCBwZ2RfbGVhZigqcGdkcCkpIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolMDhsbHhcXFxcblxcXCIsIHBnZHYpO1xcbitcXHRcXHRwcl9hbGVydChcXFwicGdkOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4gXFx0cDRkID0gcDRkcF9nZXQocDRkcCk7XFxuLVxcdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpO1xcbiBcXG4gXFx0aWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolMDhsbHggcDRkOiUwOGxseFxcXFxuXFxcIiwgcGdkdiwgcDRkdik7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JXMgcDRkOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyLCBwNGRfc3RyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcXG4gXFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XFxuLVxcdHB1ZHYgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwdWRfc3RyLCBwdWRfdmFsKHB1ZCkpO1xcbiBcXG4gXFx0aWYgKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2LCBwNGR2LCBwdWR2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolcyBwNGQ6JXMgcHVkOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4gXFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XFxuLVxcdHBtZHYgPSBwbWRfdmFsKHBtZCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwbWRfc3RyLCBwbWRfdmFsKHBtZCkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCdzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxcbkBAIC01NjcsOCArNjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gXFx0ICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGRcXG4gXFx0ICogYWxyZWFkeSB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhlIFBURS5cXG4gXFx0ICovXFxuLVxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2LFxcbi1cXHRcXHQgcDRkdiwgcHVkdiwgcG1kdik7XFxuK1xcdHByX2FsZXJ0KFxcXCJwZ2Q6JXMgcDRkOiVzIHB1ZDolcyBwbWQ6JXNcXFxcblxcXCIsIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIsIHBtZF9zdHIpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01ODQsMTAgKzYyMiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxcbiAgKiBwYWdlIHRhYmxlIGxvY2suXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0ZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSxcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG4rXFx0Y2hhciBlbnRyeV9zdHJbUFRWQUxfU1RSX01BWF07XFxuIFxcdHBnb2ZmX3QgaW5kZXg7XFxuIFxcbiBcXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXFxuQEAgLTU5Niw4ICs2MzUsOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdG1hcHBpbmcgPSB2bWEtXFx1MDAzZXZtX2ZpbGUgPyB2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XFxuIFxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcXG4gXFxuLVxcdHByX2FsZXJ0KFxcXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolMDhsbHhcXFwiLCBjdXJyZW50LVxcdTAwM2Vjb21tLFxcbi1cXHRcXHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7XFxuK1xcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xcbitcXHRwcl9hbGVydChcXFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JXNcXFwiLCBjdXJyZW50LVxcdTAwM2Vjb21tLFxcbitcXHRcXHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpO1xcbiBcXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIpO1xcbiBcXHRpZiAocGFnZSlcXG4gXFx0XFx0ZHVtcF9wYWdlKHBhZ2UsIFxcXCJiYWQgcGFnZSBtYXBcXFwiKTtcXG5AQCAtNjI3LDggKzY2NywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXFxcXFxcbi1cXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxcbitzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuK1xcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbit9XFxuIFxcbiAvKipcXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcXFwic3RydWN0IHBhZ2VcXFwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXFxuQEAgLTYzNiw4ICs2ODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxcbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cXG4gICogQHNwZWNpYWw6IFdoZXRoZXIgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFya2VkIFxcXCJzcGVjaWFsXFxcIi5cXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXFxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxcbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxcbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cXG4gICpcXG4gICogXFxcIlNwZWNpYWxcXFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFxcXCJzdHJ1Y3QgcGFnZVxcXCIgKGVpdGhlclxcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcXG5AQCAtNjk3LDcgKzc0Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xcbkBAIC03MTAsNyArNzU2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qXFxuQEAgLTc0MSw3ICs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHBmbiBcXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcXG4gXFx0XFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXFxuLVxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdC8qXFxuQEAgLTc2Nyw4ICs4MTMsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICBwdGVfdCBwdGUpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSwgcHRlX3NwZWNpYWwocHRlKSxcXG4tXFx0XFx0XFx0XFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODA5LDggKzg1NywxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdHBtZF90IHBtZClcXG4ge1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHBtZF92YWwocG1kKTtcXG4rXFxuIFxcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxcbi1cXHRcXHRcXHRcXHRwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04NTAsOCArOTAwLDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcXG4tXFx0XFx0XFx0XFx0cHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDc6MTMuNzQxNDYzMjM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg0ODU2MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTY5NTBhYjJjN2FlMDc1ZWZkMmVjZGRkZTNiY2QyYTA4YWZhN2Q4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTU6NDc6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uYTJiNjNhZjgyNzkyNTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC01MTksOSArNTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcdCgzMiArIDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xuK1xuK3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSlcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGJ1Zl9zaXplIFx1MDAzYyBlbnRyeV9zaXplICogMiArIDEpKSB7XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwib3ZlcmZsb3dcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuK1x0Y2FzZSBzaXplb2YodTMyKTpcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCIlMDh4XCIsICooY29uc3QgdTMyICopZW50cnkpO1xuK1x0XHRicmVhaztcbitcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwiJTAxNmxseFwiLCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbitcdFx0YnJlYWs7XG4rI2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pXG4rXHRjYXNlIHNpemVvZih1MTI4KTpcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCIlMDE2bGx4JTAxNmxseFwiLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSBcdTAwM2VcdTAwM2UgNjQpLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZyBsb25nKSooY29uc3QgdTEyOCAqKWVudHJ5KTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcInVuc3VwcG9ydGVkXCIpO1xuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rI2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpXHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRfX2F1dG9fdHlwZSBfX3ZhbCA9ICh2YWwpO1x0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuK1x0fSB3aGlsZSAoMClcbitcbiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7XG4rXHRjaGFyIHBnZF9zdHJbUFRWQUxfU1RSX01BWF07XG4rXHRjaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07XG4rXHRjaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07XG4rXHRjaGFyIHBtZF9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwNGRfdCBwNGQsICpwNGRwO1xuIFx0cHVkX3QgcHVkLCAqcHVkcDtcbiBcdHBtZF90IHBtZCwgKnBtZHA7XG5AQCAtNTMyLDM0ICs1NzEsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIHNlZSBsb2NraW5nIHJlcXVpcmVtZW50cyBmb3IgcHJpbnRfYmFkX3BhZ2VfbWFwKCkuXG4gXHQgKi9cbiBcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcbi1cdHBnZHYgPSBwZ2RfdmFsKCpwZ2RwKTtcbitcdHB0dmFsX3RvX3N0cihwZ2Rfc3RyLCBwZ2RfdmFsKCpwZ2RwKSk7XG4gXG4gXHRpZiAoIXBnZF9wcmVzZW50KCpwZ2RwKSB8fCBwZ2RfbGVhZigqcGdkcCkpIHtcbi1cdFx0cHJfYWxlcnQoXCJwZ2Q6JTA4bGx4XFxuXCIsIHBnZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDolc1xcblwiLCBwZ2Rfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcbi1cdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XG4rXHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcbiBcbiBcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxuXCIsIHBnZHYsIHA0ZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDolcyBwNGQ6JXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuIFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4tXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xuK1x0cHR2YWxfdG9fc3RyKHB1ZF9zdHIsIHB1ZF92YWwocHVkKSk7XG4gXG4gXHRpZiAoIXB1ZF9wcmVzZW50KHB1ZCkgfHwgcHVkX2xlYWYocHVkKSkge1xuLVx0XHRwcl9hbGVydChcInBnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxuXCIsIHBnZHYsIHA0ZHYsIHB1ZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDolcyBwNGQ6JXMgcHVkOiVzXFxuXCIsIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbiBcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuLVx0cG1kdiA9IHBtZF92YWwocG1kKTtcbitcdHB0dmFsX3RvX3N0cihwbWRfc3RyLCBwbWRfdmFsKHBtZCkpO1xuIFxuIFx0LypcbiBcdCAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQncyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcbkBAIC01NjcsOCArNjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXG4gXHQgKiBhbHJlYWR5IHRha2UgY2FyZSBvZiBwcmludGluZyB0aGUgUFRFLlxuIFx0ICovXG4tXHRwcl9hbGVydChcInBnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4IHBtZDolMDhsbHhcXG5cIiwgcGdkdixcbi1cdFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xuK1x0cHJfYWxlcnQoXCJwZ2Q6JXMgcDRkOiVzIHB1ZDolcyBwbWQ6JXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XG4gfVxuIFxuIC8qXG5AQCAtNTg0LDEwICs2MjIsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiAgKiBwYWdlIHRhYmxlIGxvY2suXG4gICovXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4rXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXG4gXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXG5AQCAtNTk2LDggKzYzNSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdG1hcHBpbmcgPSB2bWEtXHUwMDNldm1fZmlsZSA/IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XG4gXG4tXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFwiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4tXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcbitcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xuK1x0cHJfYWxlcnQoXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolc1wiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4rXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7XG4gXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4gXHRpZiAocGFnZSlcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwiYmFkIHBhZ2UgbWFwXCIpO1xuQEAgLTYyNyw4ICs2NjcsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlLCBwYWdlKSBcXFxuLVx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSlcbitzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0ICBwdGVfdCBwdGUsIHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuK1xuK1x0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgXHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKTtcbit9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcInN0cnVjdCBwYWdlXCIgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB0YWJsZSBlbnRyeS5cbkBAIC02MzYsOCArNjgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcInNwZWNpYWxcIi5cbi0gKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKiBAZW50cnk6IFRoZSBwYWdlIHRhYmxlIGVudHJ5IHZhbHVlIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuKyAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqXG4gICogXCJTcGVjaWFsXCIgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCJzdHJ1Y3QgcGFnZVwiIChlaXRoZXJcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcbkBAIC02OTcsNyArNzQzLDcgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXG4tXHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuK1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICs3NTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChpc196ZXJvX3BmbihwZm4pIHx8IGlzX2h1Z2VfemVyb19wZm4ocGZuKSlcbiBcdFx0XHRcdHJldHVybiBOVUxMO1xuIFxuLVx0XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XG4rXHRcdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIGVudHJ5X3NpemUsIE5VTEwsIGxldmVsKTtcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFx0XHQvKlxuQEAgLTc0MSw3ICs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbitcdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIGVudHJ5X3NpemUsIE5VTEwsIGxldmVsKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXHQvKlxuQEAgLTc2Nyw4ICs4MTMsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgcHRlX3QgcHRlKVxuIHtcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksXG4tXHRcdFx0XHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4gfVxuIFxuIC8qKlxuQEAgLTgwOSw4ICs4NTcsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuK1x0X19hdXRvX3R5cGUgZW50cnkgPSBwbWRfdmFsKHBtZCk7XG4rXG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSxcbi1cdFx0XHRcdHBtZF92YWwocG1kKSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuK1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbiB9XG4gXG4gLyoqXG5AQCAtODUwLDggKzkwMCwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXG4ge1xuK1x0X19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7XG4rXG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuK1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFVEKTtcbiB9XG4gI2VuZGlmXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NzoxMy43NDE0NjUwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg0ODEzODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0b3VjaGVzIGBtbS9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFuZCByZXBvcnRzIFwiQmFkIHBhZ2UgbWFwXCIgZXJyb3JzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpub3QqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNoYW5naW5nIHRoZSBmb3JtYXQgb2YgdGhlIGVycm9yIG1lc3NhZ2VzIGdlbmVyYXRlZCB3aGVuIHRoZSBrZXJuZWwgZW5jb3VudGVycyBhIGNvcnJ1cHRlZCBwYWdlIHRhYmxlLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAsIHdoaWNoIGFyZSBjbGVhcmx5IGFpbWVkIGF0IGEgbW9yZSBzdHJ1Y3R1cmVkIGFuZCBwZXJoYXBzIG1vcmUgcmVhZGFibGUgd2F5IHRvIHJlcHJlc2VudCBwYWdlIHRhYmxlIGVudHJpZXMgKHBnZCwgcDRkLCBwdWQsIHBtZCwgcHRlKSBhcyBoZXggc3RyaW5ncyBpbiB0aGUgbG9ncy4gVGhlIGV4aXN0aW5nIGBwcl9hbGVydGAgY2FsbHMgd2l0aCBgJTA4bGx4YCBhcmUgYmVpbmcgcmVwbGFjZWQgYnkgdGhlc2UgbmV3IGZvcm1hdHRpbmcgZnVuY3Rpb25zLiAgSSByZWNvZ25pemUgdGhpcyBhcyBhIG1vdmUgYXdheSBmcm9tIGhhcmQtY29kZWQgZm9ybWF0cyB0byBzb21ldGhpbmcgcG90ZW50aWFsbHkgbW9yZSBtYWludGFpbmFibGUuXG5cbk15IGludHVpdGlvbiBpcyB0aGlzIGlzIGVudGlyZWx5IGRlY29yYXRpdmU6IHRoZSBwYXRjaCBkb2Vzbid0IGFwcGVhciB0byBpbnRyb2R1Y2UgKm5ldyogYnVncywgbm9yIGRvZXMgaXQgaW1wYWN0IGV4aXN0aW5nIGNvbnRyb2wgZmxvdyAqZXhjZXB0KiBpbiB0aGUgZXJyb3ItcmVwb3J0aW5nIHBhdGgsIHdoaWNoIGlzIG9ubHkgcmVhY2hlZCBpZiBhIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIGlzIGFscmVhZHkgcHJlc2VudC4gVGhpcyBjaGFuZ2UgdXBkYXRlcyB0aGUgZnVuY3Rpb25zIHRoYXQgcHJpbnQgdGhlc2UgbWVzc2FnZXMsIHN1Y2ggYXMgYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgIGFuZCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCwgdG8gdXNlIHRoZSBuZXcgc3RyaW5nIGZvcm1hdHRpbmcuIEZ1cnRoZXJtb3JlLCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgcHJpbnRfYmFkX3B0ZWAsIGBfX3ZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlYCwgYW5kIGRlcml2YXRpdmVzIGFyZSB1cGRhdGVkIHRvIHBhc3MgdGhlIHBhZ2UgdGFibGUgZW50cnkgYXMgYSBwb2ludGVyIGFuZCBzaXplLCByYXRoZXIgdGhhbiBhIHJhdyBgdW5zaWduZWQgbG9uZyBsb25nYC4gVGhpcyBpcyBhIHVzZWZ1bCByZWZhY3RvcmluZywgYW5kIGluZGljYXRlcyBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLlxuXG5MZXQncyBkb3VibGUtY2hlY2suIE9rYXksIEknbSBjaGVja2luZyB0aGUgZGlmZi4gYGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZGAgaXMgdW50b3VjaGVkLCBtZWFuaW5nIHJhdGUgbGltaXRpbmcgaXMgdW5hZmZlY3RlZC4gVGhlIG5ldyBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgYW5kIHRoZSBtYWNybyBgcHR2YWxfdG9fc3RyYCBhcmUgaW5kZWVkIGp1c3QgZm9yIGZvcm1hdHRpbmcuIFRoZSByZXBsYWNlbWVudHMgSSBhbnRpY2lwYXRlZCBhcmUgdGhlcmUuIGBwcmludF9iYWRfcHRlYCBsb29rcyBsaWtlIGl0J3MgYmVlbiBjb252ZXJ0ZWQgZnJvbSBhIG1hY3JvIHRvIGEgZnVuY3Rpb24sIG5vdyBwYXNzZWQgZW50cnkgYXMgYSBwb2ludGVyLiBGaW5hbGx5LCB0aGUgZnVuY3Rpb24gY2FsbCBzaWduYXR1cmVzIGZvciBmdW5jdGlvbnMgbGlrZSBgX192bV9ub3JtYWxfcGFnZWAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYWNjZXB0IGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIHdoaWNoIEkgcHJlZmVyLlxuXG5BbHJpZ2h0LCB0aGUgbG9naWMgaXMgc291bmQuIE5vdGhpbmcgaGVyZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZSBrZXJuZWwgdW5sZXNzIGEgcGFnZSBtYXAgZXJyb3IgaXMgKmFscmVhZHkqIHByZXNlbnQuIEV2ZW4gdGhlbiwgaXQncyBqdXN0IGEgY29zbWV0aWMgY2hhbmdlIHRvIHRoZSBlcnJvciBtZXNzYWdlIGl0c2VsZiwgYW5kIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIG11c3QgYWxyZWFkeSBiZSB0aGVyZS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHBhdGNoIGlzIGlzb2xhdGVkIHRvIGZvcm1hdHRpbmcgdGhlIGxvZyBtZXNzYWdlczsgaXQgaXMgbm90IGludHJvZHVjaW5nIG5ldyBiZWhhdmlvcnMuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYCB0byByZWZsZWN0IHRoaXMgZmluZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxNSwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ3OjIzLjUyNjI4MTA0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgZm9ybWF0dGluZyBvZiBlcnJvciBtZXNzYWdlcyAoYmFkIHBhZ2UgbWFwIGxvZ3MpIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4gSXQgaXMgcHVyZWx5IGEgZGVjb3JhdGl2ZSBjaGFuZ2UgZm9yIGxvZ2dpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzlw7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 15:25:59 +0000 UTC FinishedAt: 2026-07-08 15:47:24 +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+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGZvcm1hdHRpbmcgb2YgZXJyb3IgbWVzc2FnZXMgKGJhZCBwYWdlIG1hcCBsb2dzKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuIEl0IGlzIHB1cmVseSBhIGRlY29yYXRpdmUgY2hhbmdlIGZvciBsb2dnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk2OTUwYWIyYzdhZTA3NWVmZDJlY2RkZGUzYmNkMmEwOGFmYTdkODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjQ3OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5hMmI2M2FmODI3OTI1OSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUxOSw5ICYjNDM7NTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0O292ZXJmbG93XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUzMik6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDh4XCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4XCYjMzQ7LCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7XHRjYXNlIHNpemVvZih1MTI4KTpcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0OyUwMTZsbHglMDE2bGx4XCYjMzQ7LFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcgbG9uZykoKihjb25zdCB1MTI4ICopZW50cnkgXHUwMDNlXHUwMDNlIDY0KSxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDt1bnN1cHBvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHR2YWxfdG9fc3RyKGJ1ZiwgdmFsKVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRfX2F1dG9fdHlwZSBfX3ZhbCA9ICh2YWwpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cigoYnVmKSwgc2l6ZW9mKGJ1ZiksIFx1MDAyNl9fdmFsLCBzaXplb2YoX192YWwpKTtcdFxcXG4mIzQzO1x0fSB3aGlsZSAoMClcbiYjNDM7XG4gc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbG9uZyBwZ2R2LCBwNGR2LCBwdWR2LCBwbWR2O1xuJiM0MztcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcbiYjNDM7XHRjaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07XG4mIzQzO1x0Y2hhciBwdWRfc3RyW1BUVkFMX1NUUl9NQVhdO1xuJiM0MztcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHA0ZF90IHA0ZCwgKnA0ZHA7XG4gXHRwdWRfdCBwdWQsICpwdWRwO1xuIFx0cG1kX3QgcG1kLCAqcG1kcDtcbkBAIC01MzIsMzQgJiM0Mzs1NzEsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIHNlZSBsb2NraW5nIHJlcXVpcmVtZW50cyBmb3IgcHJpbnRfYmFkX3BhZ2VfbWFwKCkuXG4gXHQgKi9cbiBcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcbi1cdHBnZHYgPSBwZ2RfdmFsKCpwZ2RwKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpO1xuIFxuIFx0aWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHhcXG5cJiMzNDssIHBnZHYpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzXFxuXCYjMzQ7LCBwZ2Rfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcbi1cdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHA0ZF9zdHIsIHA0ZF92YWwocDRkKSk7XG4gXG4gXHRpZiAoIXA0ZF9wcmVzZW50KHA0ZCkgfHwgcDRkX2xlYWYocDRkKSkge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcXG5cJiMzNDssIHBnZHYsIHA0ZHYpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzIHA0ZDolc1xcblwmIzM0OywgcGdkX3N0ciwgcDRkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuIFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4tXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xuJiM0MztcdHB0dmFsX3RvX3N0cihwdWRfc3RyLCBwdWRfdmFsKHB1ZCkpO1xuIFxuIFx0aWYgKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpIHtcbi1cdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHhcXG5cJiMzNDssIHBnZHYsIHA0ZHYsIHB1ZHYpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzIHA0ZDolcyBwdWQ6JXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbiBcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuLVx0cG1kdiA9IHBtZF92YWwocG1kKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTtcbiBcbiBcdC8qXG4gXHQgKiBEdW1waW5nIHRoZSBQVEUgd291bGQgYmUgbmljZSwgYnV0IGl0JiMzOTtzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxuQEAgLTU2Nyw4ICYjNDM7NjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXG4gXHQgKiBhbHJlYWR5IHRha2UgY2FyZSBvZiBwcmludGluZyB0aGUgUFRFLlxuIFx0ICovXG4tXHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LFxuLVx0XHQgcDRkdiwgcHVkdiwgcG1kdik7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7cGdkOiVzIHA0ZDolcyBwdWQ6JXMgcG1kOiVzXFxuXCYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTtcbiB9XG4gXG4gLypcbkBAIC01ODQsMTAgJiM0Mzs2MjIsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiAgKiBwYWdlIHRhYmxlIGxvY2suXG4gICovXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLFxuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjNDM7XHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXG4gXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXG5AQCAtNTk2LDggJiM0Mzs2MzUsOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRtYXBwaW5nID0gdm1hLVx1MDAzZXZtX2ZpbGUgPyB2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcgOiBOVUxMO1xuIFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpO1xuIFxuLVx0cHJfYWxlcnQoXCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XCYjMzQ7LCBjdXJyZW50LVx1MDAzZWNvbW0sXG4tXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcbiYjNDM7XHRwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolc1wmIzM0OywgY3VycmVudC1cdTAwM2Vjb21tLFxuJiM0MztcdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcbiBcdF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRkdW1wX3BhZ2UocGFnZSwgXCYjMzQ7YmFkIHBhZ2UgbWFwXCYjMzQ7KTtcbkBAIC02MjcsOCAmIzQzOzY2NywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXG4tXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxuJiM0MztzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiYjNDM7XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuJiM0Mzt9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcJiMzNDtzdHJ1Y3QgcGFnZVwmIzM0OyBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIHRhYmxlIGVudHJ5LlxuQEAgLTYzNiw4ICYjNDM7NjgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcJiMzNDtzcGVjaWFsXCYjMzQ7LlxuLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuJiM0MzsgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwmIzM0O1NwZWNpYWxcJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCYjMzQ7c3RydWN0IHBhZ2VcJiMzNDsgKGVpdGhlclxuICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgJiM0Mzs3NDMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCxcbi1cdFx0dW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICYjNDM7NzU2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuJiM0MztcdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdC8qXG5AQCAtNzQxLDcgJiM0Mzs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbiYjNDM7XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCAmIzQzOzgxMywxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxuLVx0XHRcdFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbiB9XG4gXG4gLyoqXG5AQCAtODA5LDggJiM0Mzs4NTcsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxuLVx0XHRcdFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbiB9XG4gXG4gLyoqXG5AQCAtODUwLDggJiM0Mzs5MDAsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxuIHtcbiYjNDM7XHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGZvcm1hdHRpbmcgb2YgZXJyb3IgbWVzc2FnZXMgKGJhZCBwYWdlIG1hcCBsb2dzKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuIEl0IGlzIHB1cmVseSBhIGRlY29yYXRpdmUgY2hhbmdlIGZvciBsb2dnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTY5NTBhYjJjN2FlMDc1ZWZkMmVjZGRkZTNiY2QyYTA4YWZhN2Q4MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMTU6NDc6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMxLi5hMmI2M2FmODI3OTI1OSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUxOSw5ICYjNDM7NTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOyNkZWZpbmUgUFRWQUxfU1RSX01BWAkoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgJmx0OyBlbnRyeV9zaXplICogMiAmIzQzOyAxKSkgewomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDtvdmVyZmxvdyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5X3NpemUpIHsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICYjMzQ7JTA4eCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JiMzNDssICooY29uc3QgdTY0ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCiYjNDM7CWNhc2Ugc2l6ZW9mKHUxMjgpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JTAxNmxseCYjMzQ7LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSAmZ3Q7Jmd0OyA2NCksCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0O3Vuc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpCQkJCQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCQkJXAomIzQzOwkJX19hdXRvX3R5cGUgX192YWwgPSAodmFsKTsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQlcCiYjNDM7CQlwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgJmFtcDtfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7CVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjsKJiM0MzsJY2hhciBwZ2Rfc3RyW1BUVkFMX1NUUl9NQVhdOwomIzQzOwljaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07CiYjNDM7CWNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTsKJiM0MzsJY2hhciBwbWRfc3RyW1BUVkFMX1NUUl9NQVhdOwogCXA0ZF90IHA0ZCwgKnA0ZHA7CiAJcHVkX3QgcHVkLCAqcHVkcDsKIAlwbWRfdCBwbWQsICpwbWRwOwpAQCAtNTMyLDM0ICYjNDM7NTcxLDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAJICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS4KIAkgKi8KIAlwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JcGdkdiA9IHBnZF92YWwoKnBnZHApOwomIzQzOwlwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpOwogCiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseFxuJiMzNDssIHBnZHYpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwZ2Q6JXNcbiYjMzQ7LCBwZ2Rfc3RyKTsKIAkJcmV0dXJuOwogCX0KIAogCXA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpOwogCXA0ZCA9IHA0ZHBfZ2V0KHA0ZHApOwotCXA0ZHYgPSBwNGRfdmFsKHA0ZCk7CiYjNDM7CXB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpOwogCiAJaWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHsKLQkJcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcbiYjMzQ7LCBwZ2R2LCBwNGR2KTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGdkOiVzIHA0ZDolc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpOwogCQlyZXR1cm47CiAJfQogCiAJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiAJcHVkID0gcHVkcF9nZXQocHVkcCk7Ci0JcHVkdiA9IHB1ZF92YWwocHVkKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHB1ZF9zdHIsIHB1ZF92YWwocHVkKSk7CiAKIAlpZiAoIXB1ZF9wcmVzZW50KHB1ZCkgfHwgcHVkX2xlYWYocHVkKSkgewotCQlwcl9hbGVydCgmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdiwgcHVkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzXG4mIzM0OywgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTsKIAlwbWQgPSBwbWRwX2dldChwbWRwKTsKLQlwbWR2ID0gcG1kX3ZhbChwbWQpOwomIzQzOwlwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTsKIAogCS8qCiAJICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSwKQEAgLTU2Nyw4ICYjNDM7NjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGQKIAkgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZAogCSAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuCiAJICovCi0JcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwKLQkJIHA0ZHYsIHB1ZHYsIHBtZHYpOwomIzQzOwlwcl9hbGVydCgmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzIHBtZDolc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIsIHBtZF9zdHIpOwogfQogCiAvKgpAQCAtNTg0LDEwICYjNDM7NjIyLDExIEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAgKiBwYWdlIHRhYmxlIGxvY2suCiAgKi8KIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLAotCQllbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSwKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiYjNDM7CWNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdOwogCXBnb2ZmX3QgaW5kZXg7CiAKIAlpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpCkBAIC01OTYsOCAmIzQzOzYzNSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAltYXBwaW5nID0gdm1hLSZndDt2bV9maWxlID8gdm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcgOiBOVUxMOwogCWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTsKIAotCXByX2FsZXJ0KCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4JiMzNDssIGN1cnJlbnQtJmd0O2NvbW0sCi0JCSBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTsKJiM0MzsJcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JXMmIzM0OywgY3VycmVudC0mZ3Q7Y29tbSwKJiM0MzsJCSBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7CiAJX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZSh2bWEtJmd0O3ZtX21tLCBhZGRyKTsKIAlpZiAocGFnZSkKIAkJZHVtcF9wYWdlKHBhZ2UsICYjMzQ7YmFkIHBhZ2UgbWFwJiMzNDspOwpAQCAtNjI3LDggJiM0Mzs2NjcsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIAl9CiB9CiAKLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXAotCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIHB0ZV92YWwocHRlKSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpCiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpOwomIzQzOwomIzQzOwlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCAmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7fQogCiAvKioKICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuCkBAIC02MzYsOCAmIzQzOzY4MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLgogICogQHBmbjogVGhlIFBGTiBzdG9yZWQgaW4gdGhlIHBhZ2UgdGFibGUgZW50cnkuCiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgJiMzNDtzcGVjaWFsJiMzNDsuCi0gKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS4KICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LgomIzQzOyAqIEBlbnRyeV9zaXplOiBUaGUgc2l6ZSBvZiBAZW50cnkuCiYjNDM7ICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuCiAgKgogICogJiMzNDtTcGVjaWFsJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IChlaXRoZXIKICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzCkBAIC02OTcsNyAmIzQzOzc0Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCwKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiYjNDM7CQljb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIHsKIAlpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7CiAJCWlmICh1bmxpa2VseShzcGVjaWFsKSkgewpAQCAtNzEwLDcgJiM0Mzs3NTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJaWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKQogCQkJCXJldHVybiBOVUxMOwogCi0JCQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpOwomIzQzOwkJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQkvKgpAQCAtNzQxLDcgJiM0Mzs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJaWYgKHVubGlrZWx5KHBmbiAmZ3Q7IGhpZ2hlc3RfbWVtbWFwX3BmbikpIHsKIAkJLyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovCi0JCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7CiYjNDM7CQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJLyoKQEAgLTc2Nyw4ICYjNDM7ODEzLDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICBwdGVfdCBwdGUpCiB7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLAotCQkJCXB0ZV92YWwocHRlKSwgUEdUQUJMRV9MRVZFTF9QVEUpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7CiB9CiAKIC8qKgpAQCAtODA5LDggJiM0Mzs4NTcsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQlwbWRfdCBwbWQpCiB7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLAotCQkJCXBtZF92YWwocG1kKSwgUEdUQUJMRV9MRVZFTF9QTUQpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7CiB9CiAKIC8qKgpAQCAtODUwLDggJiM0Mzs5MDAsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpCiB7CiYjNDM7CV9fYXV0b190eXBlIGVudHJ5ID0gcHVkX3ZhbChwdWQpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHVkX3BmbihwdWQpLCBwdWRfc3BlY2lhbChwdWQpLAotCQkJCXB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7CiB9CiAjZW5kaWYKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE1CgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHRvdWNoZXMgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYW5kIHJlcG9ydHMgJiMzNDtCYWQgcGFnZSBtYXAmIzM0OyBlcnJvcnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgKm5vdCogc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZywgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgZm9ybWF0IG9mIHRoZSBlcnJvciBtZXNzYWdlcyBnZW5lcmF0ZWQgd2hlbiB0aGUga2VybmVsIGVuY291bnRlcnMgYSBjb3JydXB0ZWQgcGFnZSB0YWJsZS4gSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgYW5kIGBwdHZhbF90b19zdHJgLCB3aGljaCBhcmUgY2xlYXJseSBhaW1lZCBhdCBhIG1vcmUgc3RydWN0dXJlZCBhbmQgcGVyaGFwcyBtb3JlIHJlYWRhYmxlIHdheSB0byByZXByZXNlbnQgcGFnZSB0YWJsZSBlbnRyaWVzIChwZ2QsIHA0ZCwgcHVkLCBwbWQsIHB0ZSkgYXMgaGV4IHN0cmluZ3MgaW4gdGhlIGxvZ3MuIFRoZSBleGlzdGluZyBgcHJfYWxlcnRgIGNhbGxzIHdpdGggYCUwOGxseGAgYXJlIGJlaW5nIHJlcGxhY2VkIGJ5IHRoZXNlIG5ldyBmb3JtYXR0aW5nIGZ1bmN0aW9ucy4gIEkgcmVjb2duaXplIHRoaXMgYXMgYSBtb3ZlIGF3YXkgZnJvbSBoYXJkLWNvZGVkIGZvcm1hdHMgdG8gc29tZXRoaW5nIHBvdGVudGlhbGx5IG1vcmUgbWFpbnRhaW5hYmxlLgoKTXkgaW50dWl0aW9uIGlzIHRoaXMgaXMgZW50aXJlbHkgZGVjb3JhdGl2ZTogdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFwcGVhciB0byBpbnRyb2R1Y2UgKm5ldyogYnVncywgbm9yIGRvZXMgaXQgaW1wYWN0IGV4aXN0aW5nIGNvbnRyb2wgZmxvdyAqZXhjZXB0KiBpbiB0aGUgZXJyb3ItcmVwb3J0aW5nIHBhdGgsIHdoaWNoIGlzIG9ubHkgcmVhY2hlZCBpZiBhIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIGlzIGFscmVhZHkgcHJlc2VudC4gVGhpcyBjaGFuZ2UgdXBkYXRlcyB0aGUgZnVuY3Rpb25zIHRoYXQgcHJpbnQgdGhlc2UgbWVzc2FnZXMsIHN1Y2ggYXMgYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgIGFuZCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCwgdG8gdXNlIHRoZSBuZXcgc3RyaW5nIGZvcm1hdHRpbmcuIEZ1cnRoZXJtb3JlLCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgcHJpbnRfYmFkX3B0ZWAsIGBfX3ZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlYCwgYW5kIGRlcml2YXRpdmVzIGFyZSB1cGRhdGVkIHRvIHBhc3MgdGhlIHBhZ2UgdGFibGUgZW50cnkgYXMgYSBwb2ludGVyIGFuZCBzaXplLCByYXRoZXIgdGhhbiBhIHJhdyBgdW5zaWduZWQgbG9uZyBsb25nYC4gVGhpcyBpcyBhIHVzZWZ1bCByZWZhY3RvcmluZywgYW5kIGluZGljYXRlcyBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gT2theSwgSSYjMzk7bSBjaGVja2luZyB0aGUgZGlmZi4gYGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZGAgaXMgdW50b3VjaGVkLCBtZWFuaW5nIHJhdGUgbGltaXRpbmcgaXMgdW5hZmZlY3RlZC4gVGhlIG5ldyBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgYW5kIHRoZSBtYWNybyBgcHR2YWxfdG9fc3RyYCBhcmUgaW5kZWVkIGp1c3QgZm9yIGZvcm1hdHRpbmcuIFRoZSByZXBsYWNlbWVudHMgSSBhbnRpY2lwYXRlZCBhcmUgdGhlcmUuIGBwcmludF9iYWRfcHRlYCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gY29udmVydGVkIGZyb20gYSBtYWNybyB0byBhIGZ1bmN0aW9uLCBub3cgcGFzc2VkIGVudHJ5IGFzIGEgcG9pbnRlci4gRmluYWxseSwgdGhlIGZ1bmN0aW9uIGNhbGwgc2lnbmF0dXJlcyBmb3IgZnVuY3Rpb25zIGxpa2UgYF9fdm1fbm9ybWFsX3BhZ2VgIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGFjY2VwdCBgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplYCB3aGljaCBJIHByZWZlci4KCkFscmlnaHQsIHRoZSBsb2dpYyBpcyBzb3VuZC4gTm90aGluZyBoZXJlIGFsdGVycyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlIGtlcm5lbCB1bmxlc3MgYSBwYWdlIG1hcCBlcnJvciBpcyAqYWxyZWFkeSogcHJlc2VudC4gRXZlbiB0aGVuLCBpdCYjMzk7cyBqdXN0IGEgY29zbWV0aWMgY2hhbmdlIHRvIHRoZSBlcnJvciBtZXNzYWdlIGl0c2VsZiwgYW5kIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIG11c3QgYWxyZWFkeSBiZSB0aGVyZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBwYXRjaCBpcyBpc29sYXRlZCB0byBmb3JtYXR0aW5nIHRoZSBsb2cgbWVzc2FnZXM7IGl0IGlzIG5vdCBpbnRyb2R1Y2luZyBuZXcgYmVoYXZpb3JzLiBJIHdpbGwgbm93IGBzZXQtcmVzdWx0c2AgdG8gcmVmbGVjdCB0aGlzIGZpbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGZvcm1hdHRpbmcgb2YgZXJyb3IgbWVzc2FnZXMgKGJhZCBwYWdlIG1hcCBsb2dzKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuIEl0IGlzIHB1cmVseSBhIGRlY29yYXRpdmUgY2hhbmdlIGZvciBsb2dnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ3OjEzLjE3MTAyNTE2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU1MzAwNTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ3OjEzLjE3MTAzOTU5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5NTk4MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTY5NTBhYjJjN2FlMDc1ZWZkMmVjZGRkZTNiY2QyYTA4YWZhN2Q4MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjQ3OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uYTJiNjNhZjgyNzkyNTkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MTksOSArNTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuKyNkZWZpbmUgUFRWQUxfU1RSX01BWFxcdCgzMiArIDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xcbitcXG4rc3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxcbit7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgXFx1MDAzYyBlbnRyeV9zaXplICogMiArIDEpKSB7XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCJvdmVyZmxvd1xcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xcbitcXHRjYXNlIHNpemVvZih1MzIpOlxcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwiJTA4eFxcXCIsICooY29uc3QgdTMyICopZW50cnkpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBzaXplb2YodTY0KTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwMTZsbHhcXFwiLCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKVxcbitcXHRjYXNlIHNpemVvZih1MTI4KTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwMTZsbHglMDE2bGx4XFxcIixcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKCooY29uc3QgdTEyOCAqKWVudHJ5IFxcdTAwM2VcXHUwMDNlIDY0KSxcXG4rXFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCJ1bnN1cHBvcnRlZFxcXCIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbisjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdF9fYXV0b190eXBlIF9fdmFsID0gKHZhbCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcXHUwMDI2X192YWwsIHNpemVvZihfX3ZhbCkpO1xcdFxcXFxcXG4rXFx0fSB3aGlsZSAoMClcXG4rXFxuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcXG4rXFx0Y2hhciBwZ2Rfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbitcXHRjaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07XFxuK1xcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4rXFx0Y2hhciBwbWRfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbiBcXHRwNGRfdCBwNGQsICpwNGRwO1xcbiBcXHRwdWRfdCBwdWQsICpwdWRwO1xcbiBcXHRwbWRfdCBwbWQsICpwbWRwO1xcbkBAIC01MzIsMzQgKzU3MSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxcbiBcXHQgKiBzZWUgbG9ja2luZyByZXF1aXJlbWVudHMgZm9yIHByaW50X2JhZF9wYWdlX21hcCgpLlxcbiBcXHQgKi9cXG4gXFx0cGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xcbi1cXHRwZ2R2ID0gcGdkX3ZhbCgqcGdkcCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwZ2Rfc3RyLCBwZ2RfdmFsKCpwZ2RwKSk7XFxuIFxcbiBcXHRpZiAoIXBnZF9wcmVzZW50KCpwZ2RwKSB8fCBwZ2RfbGVhZigqcGdkcCkpIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolMDhsbHhcXFxcblxcXCIsIHBnZHYpO1xcbitcXHRcXHRwcl9hbGVydChcXFwicGdkOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4gXFx0cDRkID0gcDRkcF9nZXQocDRkcCk7XFxuLVxcdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpO1xcbiBcXG4gXFx0aWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolMDhsbHggcDRkOiUwOGxseFxcXFxuXFxcIiwgcGdkdiwgcDRkdik7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JXMgcDRkOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyLCBwNGRfc3RyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcXG4gXFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XFxuLVxcdHB1ZHYgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwdWRfc3RyLCBwdWRfdmFsKHB1ZCkpO1xcbiBcXG4gXFx0aWYgKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2LCBwNGR2LCBwdWR2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolcyBwNGQ6JXMgcHVkOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4gXFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XFxuLVxcdHBtZHYgPSBwbWRfdmFsKHBtZCk7XFxuK1xcdHB0dmFsX3RvX3N0cihwbWRfc3RyLCBwbWRfdmFsKHBtZCkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCdzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxcbkBAIC01NjcsOCArNjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gXFx0ICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGRcXG4gXFx0ICogYWxyZWFkeSB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhlIFBURS5cXG4gXFx0ICovXFxuLVxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2LFxcbi1cXHRcXHQgcDRkdiwgcHVkdiwgcG1kdik7XFxuK1xcdHByX2FsZXJ0KFxcXCJwZ2Q6JXMgcDRkOiVzIHB1ZDolcyBwbWQ6JXNcXFxcblxcXCIsIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIsIHBtZF9zdHIpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01ODQsMTAgKzYyMiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxcbiAgKiBwYWdlIHRhYmxlIGxvY2suXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0ZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSxcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG4rXFx0Y2hhciBlbnRyeV9zdHJbUFRWQUxfU1RSX01BWF07XFxuIFxcdHBnb2ZmX3QgaW5kZXg7XFxuIFxcbiBcXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXFxuQEAgLTU5Niw4ICs2MzUsOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdG1hcHBpbmcgPSB2bWEtXFx1MDAzZXZtX2ZpbGUgPyB2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XFxuIFxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcXG4gXFxuLVxcdHByX2FsZXJ0KFxcXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolMDhsbHhcXFwiLCBjdXJyZW50LVxcdTAwM2Vjb21tLFxcbi1cXHRcXHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7XFxuK1xcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xcbitcXHRwcl9hbGVydChcXFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JXNcXFwiLCBjdXJyZW50LVxcdTAwM2Vjb21tLFxcbitcXHRcXHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpO1xcbiBcXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIpO1xcbiBcXHRpZiAocGFnZSlcXG4gXFx0XFx0ZHVtcF9wYWdlKHBhZ2UsIFxcXCJiYWQgcGFnZSBtYXBcXFwiKTtcXG5AQCAtNjI3LDggKzY2NywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXFxcXFxcbi1cXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxcbitzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuK1xcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbit9XFxuIFxcbiAvKipcXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcXFwic3RydWN0IHBhZ2VcXFwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXFxuQEAgLTYzNiw4ICs2ODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxcbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cXG4gICogQHNwZWNpYWw6IFdoZXRoZXIgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFya2VkIFxcXCJzcGVjaWFsXFxcIi5cXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXFxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxcbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxcbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cXG4gICpcXG4gICogXFxcIlNwZWNpYWxcXFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFxcXCJzdHJ1Y3QgcGFnZVxcXCIgKGVpdGhlclxcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcXG5AQCAtNjk3LDcgKzc0Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xcbkBAIC03MTAsNyArNzU2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qXFxuQEAgLTc0MSw3ICs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHBmbiBcXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcXG4gXFx0XFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXFxuLVxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdC8qXFxuQEAgLTc2Nyw4ICs4MTMsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICBwdGVfdCBwdGUpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSwgcHRlX3NwZWNpYWwocHRlKSxcXG4tXFx0XFx0XFx0XFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODA5LDggKzg1NywxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdHBtZF90IHBtZClcXG4ge1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHBtZF92YWwocG1kKTtcXG4rXFxuIFxcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxcbi1cXHRcXHRcXHRcXHRwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04NTAsOCArOTAwLDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcXG4tXFx0XFx0XFx0XFx0cHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDc6MTMuNzQxNDYzMjM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg0ODU2MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTY5NTBhYjJjN2FlMDc1ZWZkMmVjZGRkZTNiY2QyYTA4YWZhN2Q4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTU6NDc6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uYTJiNjNhZjgyNzkyNTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC01MTksOSArNTE5LDQ4IEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcdCgzMiArIDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xuK1xuK3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSlcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGJ1Zl9zaXplIFx1MDAzYyBlbnRyeV9zaXplICogMiArIDEpKSB7XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwib3ZlcmZsb3dcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuK1x0Y2FzZSBzaXplb2YodTMyKTpcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCIlMDh4XCIsICooY29uc3QgdTMyICopZW50cnkpO1xuK1x0XHRicmVhaztcbitcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwiJTAxNmxseFwiLCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbitcdFx0YnJlYWs7XG4rI2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pXG4rXHRjYXNlIHNpemVvZih1MTI4KTpcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCIlMDE2bGx4JTAxNmxseFwiLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSBcdTAwM2VcdTAwM2UgNjQpLFxuK1x0XHRcdCAodW5zaWduZWQgbG9uZyBsb25nKSooY29uc3QgdTEyOCAqKWVudHJ5KTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcInVuc3VwcG9ydGVkXCIpO1xuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rI2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpXHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRfX2F1dG9fdHlwZSBfX3ZhbCA9ICh2YWwpO1x0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuK1x0fSB3aGlsZSAoMClcbitcbiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7XG4rXHRjaGFyIHBnZF9zdHJbUFRWQUxfU1RSX01BWF07XG4rXHRjaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07XG4rXHRjaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07XG4rXHRjaGFyIHBtZF9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwNGRfdCBwNGQsICpwNGRwO1xuIFx0cHVkX3QgcHVkLCAqcHVkcDtcbiBcdHBtZF90IHBtZCwgKnBtZHA7XG5AQCAtNTMyLDM0ICs1NzEsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIHNlZSBsb2NraW5nIHJlcXVpcmVtZW50cyBmb3IgcHJpbnRfYmFkX3BhZ2VfbWFwKCkuXG4gXHQgKi9cbiBcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcbi1cdHBnZHYgPSBwZ2RfdmFsKCpwZ2RwKTtcbitcdHB0dmFsX3RvX3N0cihwZ2Rfc3RyLCBwZ2RfdmFsKCpwZ2RwKSk7XG4gXG4gXHRpZiAoIXBnZF9wcmVzZW50KCpwZ2RwKSB8fCBwZ2RfbGVhZigqcGdkcCkpIHtcbi1cdFx0cHJfYWxlcnQoXCJwZ2Q6JTA4bGx4XFxuXCIsIHBnZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDolc1xcblwiLCBwZ2Rfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcbi1cdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XG4rXHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcbiBcbiBcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxuXCIsIHBnZHYsIHA0ZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDolcyBwNGQ6JXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuIFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4tXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xuK1x0cHR2YWxfdG9fc3RyKHB1ZF9zdHIsIHB1ZF92YWwocHVkKSk7XG4gXG4gXHRpZiAoIXB1ZF9wcmVzZW50KHB1ZCkgfHwgcHVkX2xlYWYocHVkKSkge1xuLVx0XHRwcl9hbGVydChcInBnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxuXCIsIHBnZHYsIHA0ZHYsIHB1ZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDolcyBwNGQ6JXMgcHVkOiVzXFxuXCIsIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbiBcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuLVx0cG1kdiA9IHBtZF92YWwocG1kKTtcbitcdHB0dmFsX3RvX3N0cihwbWRfc3RyLCBwbWRfdmFsKHBtZCkpO1xuIFxuIFx0LypcbiBcdCAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQncyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcbkBAIC01NjcsOCArNjA2LDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiBcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXG4gXHQgKiBhbHJlYWR5IHRha2UgY2FyZSBvZiBwcmludGluZyB0aGUgUFRFLlxuIFx0ICovXG4tXHRwcl9hbGVydChcInBnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4IHBtZDolMDhsbHhcXG5cIiwgcGdkdixcbi1cdFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xuK1x0cHJfYWxlcnQoXCJwZ2Q6JXMgcDRkOiVzIHB1ZDolcyBwbWQ6JXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XG4gfVxuIFxuIC8qXG5AQCAtNTg0LDEwICs2MjIsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiAgKiBwYWdlIHRhYmxlIGxvY2suXG4gICovXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4rXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXG4gXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXG5AQCAtNTk2LDggKzYzNSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdG1hcHBpbmcgPSB2bWEtXHUwMDNldm1fZmlsZSA/IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XG4gXG4tXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFwiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4tXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcbitcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xuK1x0cHJfYWxlcnQoXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolc1wiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4rXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7XG4gXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4gXHRpZiAocGFnZSlcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwiYmFkIHBhZ2UgbWFwXCIpO1xuQEAgLTYyNyw4ICs2NjcsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlLCBwYWdlKSBcXFxuLVx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSlcbitzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0ICBwdGVfdCBwdGUsIHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuK1xuK1x0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgXHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKTtcbit9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcInN0cnVjdCBwYWdlXCIgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB0YWJsZSBlbnRyeS5cbkBAIC02MzYsOCArNjgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcInNwZWNpYWxcIi5cbi0gKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKiBAZW50cnk6IFRoZSBwYWdlIHRhYmxlIGVudHJ5IHZhbHVlIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuKyAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqXG4gICogXCJTcGVjaWFsXCIgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCJzdHJ1Y3QgcGFnZVwiIChlaXRoZXJcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcbkBAIC02OTcsNyArNzQzLDcgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXG4tXHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuK1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICs3NTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChpc196ZXJvX3BmbihwZm4pIHx8IGlzX2h1Z2VfemVyb19wZm4ocGZuKSlcbiBcdFx0XHRcdHJldHVybiBOVUxMO1xuIFxuLVx0XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XG4rXHRcdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIGVudHJ5X3NpemUsIE5VTEwsIGxldmVsKTtcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFx0XHQvKlxuQEAgLTc0MSw3ICs3ODcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbitcdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIGVudHJ5X3NpemUsIE5VTEwsIGxldmVsKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXHQvKlxuQEAgLTc2Nyw4ICs4MTMsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgcHRlX3QgcHRlKVxuIHtcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksXG4tXHRcdFx0XHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4gfVxuIFxuIC8qKlxuQEAgLTgwOSw4ICs4NTcsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuK1x0X19hdXRvX3R5cGUgZW50cnkgPSBwbWRfdmFsKHBtZCk7XG4rXG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSxcbi1cdFx0XHRcdHBtZF92YWwocG1kKSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuK1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbiB9XG4gXG4gLyoqXG5AQCAtODUwLDggKzkwMCwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXG4ge1xuK1x0X19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7XG4rXG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuK1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFVEKTtcbiB9XG4gI2VuZGlmXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NzoxMy43NDE0NjUwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg0ODEzODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0b3VjaGVzIGBtbS9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFuZCByZXBvcnRzIFwiQmFkIHBhZ2UgbWFwXCIgZXJyb3JzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpub3QqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNoYW5naW5nIHRoZSBmb3JtYXQgb2YgdGhlIGVycm9yIG1lc3NhZ2VzIGdlbmVyYXRlZCB3aGVuIHRoZSBrZXJuZWwgZW5jb3VudGVycyBhIGNvcnJ1cHRlZCBwYWdlIHRhYmxlLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAsIHdoaWNoIGFyZSBjbGVhcmx5IGFpbWVkIGF0IGEgbW9yZSBzdHJ1Y3R1cmVkIGFuZCBwZXJoYXBzIG1vcmUgcmVhZGFibGUgd2F5IHRvIHJlcHJlc2VudCBwYWdlIHRhYmxlIGVudHJpZXMgKHBnZCwgcDRkLCBwdWQsIHBtZCwgcHRlKSBhcyBoZXggc3RyaW5ncyBpbiB0aGUgbG9ncy4gVGhlIGV4aXN0aW5nIGBwcl9hbGVydGAgY2FsbHMgd2l0aCBgJTA4bGx4YCBhcmUgYmVpbmcgcmVwbGFjZWQgYnkgdGhlc2UgbmV3IGZvcm1hdHRpbmcgZnVuY3Rpb25zLiAgSSByZWNvZ25pemUgdGhpcyBhcyBhIG1vdmUgYXdheSBmcm9tIGhhcmQtY29kZWQgZm9ybWF0cyB0byBzb21ldGhpbmcgcG90ZW50aWFsbHkgbW9yZSBtYWludGFpbmFibGUuXG5cbk15IGludHVpdGlvbiBpcyB0aGlzIGlzIGVudGlyZWx5IGRlY29yYXRpdmU6IHRoZSBwYXRjaCBkb2Vzbid0IGFwcGVhciB0byBpbnRyb2R1Y2UgKm5ldyogYnVncywgbm9yIGRvZXMgaXQgaW1wYWN0IGV4aXN0aW5nIGNvbnRyb2wgZmxvdyAqZXhjZXB0KiBpbiB0aGUgZXJyb3ItcmVwb3J0aW5nIHBhdGgsIHdoaWNoIGlzIG9ubHkgcmVhY2hlZCBpZiBhIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIGlzIGFscmVhZHkgcHJlc2VudC4gVGhpcyBjaGFuZ2UgdXBkYXRlcyB0aGUgZnVuY3Rpb25zIHRoYXQgcHJpbnQgdGhlc2UgbWVzc2FnZXMsIHN1Y2ggYXMgYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgIGFuZCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCwgdG8gdXNlIHRoZSBuZXcgc3RyaW5nIGZvcm1hdHRpbmcuIEZ1cnRoZXJtb3JlLCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgcHJpbnRfYmFkX3B0ZWAsIGBfX3ZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlYCwgYW5kIGRlcml2YXRpdmVzIGFyZSB1cGRhdGVkIHRvIHBhc3MgdGhlIHBhZ2UgdGFibGUgZW50cnkgYXMgYSBwb2ludGVyIGFuZCBzaXplLCByYXRoZXIgdGhhbiBhIHJhdyBgdW5zaWduZWQgbG9uZyBsb25nYC4gVGhpcyBpcyBhIHVzZWZ1bCByZWZhY3RvcmluZywgYW5kIGluZGljYXRlcyBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLlxuXG5MZXQncyBkb3VibGUtY2hlY2suIE9rYXksIEknbSBjaGVja2luZyB0aGUgZGlmZi4gYGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZGAgaXMgdW50b3VjaGVkLCBtZWFuaW5nIHJhdGUgbGltaXRpbmcgaXMgdW5hZmZlY3RlZC4gVGhlIG5ldyBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgYW5kIHRoZSBtYWNybyBgcHR2YWxfdG9fc3RyYCBhcmUgaW5kZWVkIGp1c3QgZm9yIGZvcm1hdHRpbmcuIFRoZSByZXBsYWNlbWVudHMgSSBhbnRpY2lwYXRlZCBhcmUgdGhlcmUuIGBwcmludF9iYWRfcHRlYCBsb29rcyBsaWtlIGl0J3MgYmVlbiBjb252ZXJ0ZWQgZnJvbSBhIG1hY3JvIHRvIGEgZnVuY3Rpb24sIG5vdyBwYXNzZWQgZW50cnkgYXMgYSBwb2ludGVyLiBGaW5hbGx5LCB0aGUgZnVuY3Rpb24gY2FsbCBzaWduYXR1cmVzIGZvciBmdW5jdGlvbnMgbGlrZSBgX192bV9ub3JtYWxfcGFnZWAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYWNjZXB0IGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIHdoaWNoIEkgcHJlZmVyLlxuXG5BbHJpZ2h0LCB0aGUgbG9naWMgaXMgc291bmQuIE5vdGhpbmcgaGVyZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZSBrZXJuZWwgdW5sZXNzIGEgcGFnZSBtYXAgZXJyb3IgaXMgKmFscmVhZHkqIHByZXNlbnQuIEV2ZW4gdGhlbiwgaXQncyBqdXN0IGEgY29zbWV0aWMgY2hhbmdlIHRvIHRoZSBlcnJvciBtZXNzYWdlIGl0c2VsZiwgYW5kIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIG11c3QgYWxyZWFkeSBiZSB0aGVyZS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHBhdGNoIGlzIGlzb2xhdGVkIHRvIGZvcm1hdHRpbmcgdGhlIGxvZyBtZXNzYWdlczsgaXQgaXMgbm90IGludHJvZHVjaW5nIG5ldyBiZWhhdmlvcnMuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYCB0byByZWZsZWN0IHRoaXMgZmluZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxNSwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ3OjIzLjUyNjI4MTA0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgZm9ybWF0dGluZyBvZiBlcnJvciBtZXNzYWdlcyAoYmFkIHBhZ2UgbWFwIGxvZ3MpIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4gSXQgaXMgcHVyZWx5IGEgZGVjb3JhdGl2ZSBjaGFuZ2UgZm9yIGxvZ2dpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBmb3JtYXR0aW5nIG9mIGVycm9yIG1lc3NhZ2VzIChiYWQgcGFnZSBtYXAgbG9ncykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiBJdCBpcyBwdXJlbHkgYSBkZWNvcmF0aXZlIGNoYW5nZSBmb3IgbG9nZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzlw7[1] Phase: Running StartedAt: 2026-07-08 15:47:34 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzlw7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-08 15:47:34 +0000 UTC FinishedAt: 2026-07-08 15:47:40 +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,}