Name: series-workflow5m9gx Phase: Failed StartedAt: 2026-07-09 18:36:33 +0000 UTC FinishedAt: 2026-07-09 18:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5m9gx[0] Phase: Succeeded StartedAt: 2026-07-09 18:36:33 +0000 UTC FinishedAt: 2026-07-09 18:58:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5m9gx[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 18:36:33 +0000 UTC FinishedAt: 2026-07-09 18:58:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCkuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGFzIGl0IG9ubHkgYWZmZWN0cyBsb2dnaW5nL2RpYWdub3N0aWMgb3V0cHV0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwM2Q2MGYyMmEwMmM1NzI5NTIwZTAxMzJiYTRiNmQ5YWIyYWVhZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjU3OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5jOGZlMmYzNzNmZDI3MiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0O292ZXJmbG93XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUzMik6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDh4XCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4XCYjMzQ7LCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7XHRjYXNlIHNpemVvZih1MTI4KTpcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0OyUwMTZsbHglMDE2bGx4XCYjMzQ7LFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcgbG9uZykoKihjb25zdCB1MTI4ICopZW50cnkgXHUwMDNlXHUwMDNlIDY0KSxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDt1bnN1cHBvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHR2YWxfdG9fc3RyKGJ1ZiwgdmFsKVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRhdXRvIF9fdmFsID0gKHZhbCk7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7I2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqL1xuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFBUVkFMX1NUUl9NQVhcdCgxNiAmIzQzOyAxKSAvKiBNYXggNjQtYml0IHZhbHVlIGluIGhleCAmIzQzOyBOVUwgKi9cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbiYjNDM7XHRjaGFyIHBnZF9zdHJbUFRWQUxfU1RSX01BWF07XG4mIzQzO1x0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xuJiM0MztcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbiYjNDM7XHRjaGFyIHBtZF9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwNGRfdCBwNGQsICpwNGRwO1xuIFx0cHVkX3QgcHVkLCAqcHVkcDtcbiBcdHBtZF90IHBtZCwgKnBtZHA7XG5AQCAtNTMyLDM0ICYjNDM7NTc1LDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBzZWUgbG9ja2luZyByZXF1aXJlbWVudHMgZm9yIHByaW50X2JhZF9wYWdlX21hcCgpLlxuIFx0ICovXG4gXHRwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7XG4tXHRwZ2R2ID0gcGdkX3ZhbCgqcGdkcCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolc1xcblwmIzM0OywgcGdkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuIFx0cDRkID0gcDRkcF9nZXQocDRkcCk7XG4tXHRwNGR2ID0gcDRkX3ZhbChwNGQpO1xuJiM0MztcdHB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpO1xuIFxuIFx0aWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHtcbi1cdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LCBwNGR2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolcyBwNGQ6JXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiBcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xuLVx0cHVkdiA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LCBwNGR2LCBwdWR2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzXFxuXCYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4gXHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbi1cdHBtZHYgPSBwbWRfdmFsKHBtZCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcbkBAIC01NjcsOCAmIzQzOzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZFxuIFx0ICogYWxyZWFkeSB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhlIFBURS5cbiBcdCAqL1xuLVx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwmIzM0OywgcGdkdixcbi1cdFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzIHBtZDolc1xcblwmIzM0OywgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XG4gfVxuIFxuIC8qXG5AQCAtNTg0LDEwICYjNDM7NjI2LDExIEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gICogcGFnZSB0YWJsZSBsb2NrLlxuICAqL1xuIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4mIzQzO1x0Y2hhciBlbnRyeV9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwZ29mZl90IGluZGV4O1xuIFxuIFx0aWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKVxuQEAgLTU5Niw4ICYjNDM7NjM5LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0bWFwcGluZyA9IHZtYS1cdTAwM2V2bV9maWxlID8gdm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nIDogTlVMTDtcbiBcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbiBcbi1cdHByX2FsZXJ0KFwmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFwmIzM0OywgY3VycmVudC1cdTAwM2Vjb21tLFxuLVx0XHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7XG4mIzQzO1x0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JXNcJiMzNDssIGN1cnJlbnQtXHUwMDNlY29tbSxcbiYjNDM7XHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7XG4gXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4gXHRpZiAocGFnZSlcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwmIzM0O2JhZCBwYWdlIG1hcFwmIzM0Oyk7XG5AQCAtNjI3LDggJiM0Mzs2NzEsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlLCBwYWdlKSBcXFxuLVx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSlcbiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRhdXRvIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiYjNDM7XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuJiM0Mzt9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcJiMzNDtzdHJ1Y3QgcGFnZVwmIzM0OyBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIHRhYmxlIGVudHJ5LlxuQEAgLTYzNiw4ICYjNDM7Njg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcJiMzNDtzcGVjaWFsXCYjMzQ7LlxuLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuJiM0MzsgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwmIzM0O1NwZWNpYWxcJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCYjMzQ7c3RydWN0IHBhZ2VcJiMzNDsgKGVpdGhlclxuICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCxcbi1cdFx0dW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICYjNDM7NzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuJiM0MztcdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdC8qXG5AQCAtNzQxLDcgJiM0Mzs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbiYjNDM7XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCAmIzQzOzgxNywxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdGF1dG8gZW50cnkgPSBwdGVfdmFsKHB0ZSk7XG4mIzQzO1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksXG4tXHRcdFx0XHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuIH1cbiBcbiAvKipcbkBAIC04MDksOCAmIzQzOzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdHBtZF90IHBtZClcbiB7XG4mIzQzO1x0YXV0byBlbnRyeSA9IHBtZF92YWwocG1kKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSxcbi1cdFx0XHRcdHBtZF92YWwocG1kKSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1MCw4ICYjNDM7OTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90IHB1ZClcbiB7XG4mIzQzO1x0YXV0byBlbnRyeSA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCkuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGFzIGl0IG9ubHkgYWZmZWN0cyBsb2dnaW5nL2RpYWdub3N0aWMgb3V0cHV0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzAzZDYwZjIyYTAyYzU3Mjk1MjBlMDEzMmJhNGI2ZDlhYjJhZWFlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTg6NTc6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMxLi5jOGZlMmYzNzNmZDI3MiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgJmx0OyBlbnRyeV9zaXplICogMiAmIzQzOyAxKSkgewomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDtvdmVyZmxvdyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5X3NpemUpIHsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICYjMzQ7JTA4eCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JiMzNDssICooY29uc3QgdTY0ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCiYjNDM7CWNhc2Ugc2l6ZW9mKHUxMjgpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JTAxNmxseCYjMzQ7LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSAmZ3Q7Jmd0OyA2NCksCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0O3Vuc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpCQkJCQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCQkJXAomIzQzOwkJYXV0byBfX3ZhbCA9ICh2YWwpOwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQlcCiYjNDM7CQlwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgJmFtcDtfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7CVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXykKJiM0MzsjZGVmaW5lIFBUVkFMX1NUUl9NQVgJKDMyICYjNDM7IDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCAmIzQzOyBOVUwgKi8KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgUFRWQUxfU1RSX01BWAkoMTYgJiM0MzsgMSkgLyogTWF4IDY0LWJpdCB2YWx1ZSBpbiBoZXggJiM0MzsgTlVMICovCiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7CiYjNDM7CWNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTsKJiM0MzsJY2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdOwomIzQzOwljaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07CiYjNDM7CWNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTsKIAlwNGRfdCBwNGQsICpwNGRwOwogCXB1ZF90IHB1ZCwgKnB1ZHA7CiAJcG1kX3QgcG1kLCAqcG1kcDsKQEAgLTUzMiwzNCAmIzQzOzU3NSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZAogCSAqIHNlZSBsb2NraW5nIHJlcXVpcmVtZW50cyBmb3IgcHJpbnRfYmFkX3BhZ2VfbWFwKCkuCiAJICovCiAJcGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwotCXBnZHYgPSBwZ2RfdmFsKCpwZ2RwKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTsKIAogCWlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkgewotCQlwcl9hbGVydCgmIzM0O3BnZDolMDhsbHhcbiYjMzQ7LCBwZ2R2KTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGdkOiVzXG4mIzM0OywgcGdkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTsKIAlwNGQgPSBwNGRwX2dldChwNGRwKTsKLQlwNGR2ID0gcDRkX3ZhbChwNGQpOwomIzQzOwlwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTsKIAogCWlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDolcyBwNGQ6JXNcbiYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyKTsKIAkJcmV0dXJuOwogCX0KIAogCXB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpOwogCXB1ZCA9IHB1ZHBfZ2V0KHB1ZHApOwotCXB1ZHYgPSBwdWRfdmFsKHB1ZCk7CiYjNDM7CXB0dmFsX3RvX3N0cihwdWRfc3RyLCBwdWRfdmFsKHB1ZCkpOwogCiAJaWYgKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpIHsKLQkJcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseFxuJiMzNDssIHBnZHYsIHA0ZHYsIHB1ZHYpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwZ2Q6JXMgcDRkOiVzIHB1ZDolc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIpOwogCQlyZXR1cm47CiAJfQogCiAJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7CiAJcG1kID0gcG1kcF9nZXQocG1kcCk7Ci0JcG1kdiA9IHBtZF92YWwocG1kKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7CiAKIAkvKgogCSAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQmIzM5O3MgdHJpY2t5IHdpdGggQ09ORklHX0hJR0hQVEUsCkBAIC01NjcsOCAmIzQzOzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAJICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGQKIAkgKiBhbHJlYWR5IHRha2UgY2FyZSBvZiBwcmludGluZyB0aGUgUFRFLgogCSAqLwotCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxuJiMzNDssIHBnZHYsCi0JCSBwNGR2LCBwdWR2LCBwbWR2KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDtwZ2Q6JXMgcDRkOiVzIHB1ZDolcyBwbWQ6JXNcbiYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTsKIH0KIAogLyoKQEAgLTU4NCwxMCAmIzQzOzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZAogICogcGFnZSB0YWJsZSBsb2NrLgogICovCiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwomIzQzOwljaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTsKIAlwZ29mZl90IGluZGV4OwogCiAJaWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKQpAQCAtNTk2LDggJiM0Mzs2MzksOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJbWFwcGluZyA9IHZtYS0mZ3Q7dm1fZmlsZSA/IHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nIDogTlVMTDsKIAlpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7CiAKLQlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseCYjMzQ7LCBjdXJyZW50LSZndDtjb21tLAotCQkgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7CiYjNDM7CXB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpOwomIzQzOwlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzJiMzNDssIGN1cnJlbnQtJmd0O2NvbW0sCiYjNDM7CQkgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpOwogCV9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLSZndDt2bV9tbSwgYWRkcik7CiAJaWYgKHBhZ2UpCiAJCWR1bXBfcGFnZShwYWdlLCAmIzM0O2JhZCBwYWdlIG1hcCYjMzQ7KTsKQEAgLTYyNyw4ICYjNDM7NjcxLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAJfQogfQogCi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFwKLQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKQomIzQzO3N0YXRpYyB2b2lkIHByaW50X2JhZF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlhdXRvIGVudHJ5ID0gcHRlX3ZhbChwdGUpOwomIzQzOwomIzQzOwlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCAmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7fQogCiAvKioKICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuCkBAIC02MzYsOCAmIzQzOzY4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLgogICogQHBmbjogVGhlIFBGTiBzdG9yZWQgaW4gdGhlIHBhZ2UgdGFibGUgZW50cnkuCiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgJiMzNDtzcGVjaWFsJiMzNDsuCi0gKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS4KICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LgomIzQzOyAqIEBlbnRyeV9zaXplOiBUaGUgc2l6ZSBvZiBAZW50cnkuCiYjNDM7ICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuCiAgKgogICogJiMzNDtTcGVjaWFsJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IChlaXRoZXIKICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzCkBAIC02OTcsNyAmIzQzOzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCwKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiYjNDM7CQljb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIHsKIAlpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7CiAJCWlmICh1bmxpa2VseShzcGVjaWFsKSkgewpAQCAtNzEwLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJaWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKQogCQkJCXJldHVybiBOVUxMOwogCi0JCQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpOwomIzQzOwkJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQkvKgpAQCAtNzQxLDcgJiM0Mzs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJaWYgKHVubGlrZWx5KHBmbiAmZ3Q7IGhpZ2hlc3RfbWVtbWFwX3BmbikpIHsKIAkJLyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovCi0JCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7CiYjNDM7CQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJLyoKQEAgLTc2Nyw4ICYjNDM7ODE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICBwdGVfdCBwdGUpCiB7CiYjNDM7CWF1dG8gZW50cnkgPSBwdGVfdmFsKHB0ZSk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksCi0JCQkJcHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTsKIH0KIAogLyoqCkBAIC04MDksOCAmIzQzOzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXBtZF90IHBtZCkKIHsKJiM0MzsJYXV0byBlbnRyeSA9IHBtZF92YWwocG1kKTsKJiM0MzsKIAlyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSwKLQkJCQlwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTsKJiM0MzsJCQkJJmFtcDtlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QTUQpOwogfQogCiAvKioKQEAgLTg1MCw4ICYjNDM7OTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKQogewomIzQzOwlhdXRvIGVudHJ5ID0gcHVkX3ZhbChwdWQpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHVkX3BmbihwdWQpLCBwdWRfc3BlY2lhbChwdWQpLAotCQkJCXB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7CiB9CiAjZW5kaWYKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU0CgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMTEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYWRkaXRpb25zIG9mIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAsIHdoaWNoIGxvb2sgbGlrZSBzdHJpbmdpZmljYXRpb24gZnVuY3Rpb25zIG9yIG1hY3Jvcy4gVGhleSYjMzk7cmUgYmVpbmcgdXNlZCBpbiBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBwcl9hbGVydGAgY2FsbHMgd2l0aCBoZXggZm9ybWF0dGluZy4gSG1tLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCBpcyBhbHNvIG1vZGlmaWVkLCBub3cgdGFraW5nIGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIHJhdGhlciB0aGFuIGEgZGlyZWN0IGB1bnNpZ25lZCBsb25nIGxvbmdgLiBUaGUgc2FtZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIGBwcmludF9iYWRfcHRlYC4gQW5kIGl0IGxvb2tzIGxpa2UgYF9fdm1fbm9ybWFsX3BhZ2VgIGFuZCBpdHMgY2FsbGVycywgYHZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlX3BtZGAsIGB2bV9ub3JtYWxfcGFnZV9wdWRgIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQgdG8gcGFzcyB0aGUgZW50cnkgYW5kIGl0cyBzaXplLgoKQWhhISBJdCBzZWVtcyB0aGF0IGFsbCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBzb2xlbHkgcmVsYXRlZCB0byBob3cgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZXMgYXJlICpwcmludGVkKiBpbiBlcnJvciBtZXNzYWdlcywgbGlrZSB0aGUgb25lcyB0aGF0IHRyaWdnZXIgYEJVRzogQmFkIHBhZ2UgbWFwYC4gVGhlIGFpbSBpcyB0byBoYW5kbGUgZGlmZmVyZW50IGVudHJ5IHNpemVzIChlLmcuLCAxMjgtYml0IHZhbHVlcykgbW9yZSBjbGVhbmx5IGFuZCBwZXJoYXBzIGltcHJvdmUgZm9ybWF0dGluZyBjb25zaXN0ZW5jeSBmb3IgMzIvNjQgYml0IGVudHJpZXMuIFRoZSBsb2dpYyB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYF9fdm1fbm9ybWFsX3BhZ2VgIHJlbWFpbnMgdW50b3VjaGVkLCBleGNlcHQgZm9yIHRoZSBjaGFuZ2UgaW4gaG93IGl0IHBhc3NlcyB0aGUgZW50cnkgdG8gYHByaW50X2JhZF9wYWdlX21hcGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMuIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBpcyBpbmRlZWQgYSBuZXcgZnVuY3Rpb24sIGFuZCBgcHR2YWxfdG9fc3RyYCBpcyBhIG1hY3JvLiBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAgdXNlcyB0aGUgZm9ybWF0dGluZyBmdW5jdGlvbnMgd2l0aCBgcHJfYWxlcnRgLiBgcHJpbnRfYmFkX3BhZ2VfbWFwYCBhbHNvIHVzZXMgdGhlbS4gSW50ZXJlc3RpbmdseSwgYHByaW50X2JhZF9wdGVgIGhhcyBjaGFuZ2VkIGZyb20gYSBtYWNybyB0byBhIHN0YXRpYyB2b2lkIGZ1bmN0aW9uLiBUaGUgc2lnbmF0dXJlIG9mIGBfX3ZtX25vcm1hbF9wYWdlYCBpcyBjaGFuZ2VkLiBUaGUgc2lnbmF0dXJlcyBvZiBgdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VfcG1kYCwgYW5kIGB2bV9ub3JtYWxfcGFnZV9wdWRgIHJlbWFpbiB0aGUgc2FtZSwgYnV0IHRoZWlyIGJvZGllcyBhcmUgY2hhbmdlZCB0byBwYXNzIGAmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpYC4KCk9rYXksIGJ1dCBhcmUgdGhlcmUgYW55IGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93PyBOb3BlLCB0aGlzIGlzIHB1cmVseSBhYm91dCBob3cgZXJyb3IgcmVwb3J0cyBhcmUgZm9ybWF0dGVkLiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgb25seSBldmVyIGV4ZWN1dGVkIGluIGVycm9yIGNhc2VzLiBUaGUgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UsIGFuZCByZXR1cm4gTlVMTCBvciBkdW1wIHBhZ2UuIGBfX3ZtX25vcm1hbF9wYWdlYCByZXR1cm5zIE5VTEwsIHRoaXMgcGFydCBpcyB1bmNoYW5nZWQuIFNvIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuCgpMZXQgbWUgY29uZmlybS4gVGhlIHByb21wdCBzYXlzIHRoYXQgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cyYjMzQ7IHNob3VsZCByZXN1bHQgaW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgcGF0Y2ggY2xlYXJseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBJdCYjMzk7cyBqdXN0IGltcHJvdmluZyB0aGUgZm9ybWF0dGluZyBvZiBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNwbGF5ZWQgaW4gYHByX2FsZXJ0YC4KCkkmIzM5O2xsIHF1aWNrbHkgcmV2aWV3IHRoZSBkaWZmIG9uZSBsYXN0IHRpbWUuIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBpcyBmb3JtYXR0aW5nLiBgcHR2YWxfdG9fc3RyYCBpcyBmb3JtYXR0aW5nLiBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAgaXMgZm9ybWF0dGluZy4gYHByaW50X2JhZF9wYWdlX21hcGAgaXMgZm9ybWF0dGluZy4gYHByaW50X2JhZF9wdGVgIGlzIGZvcm1hdHRpbmcsIHRob3VnaCBpdCBhbHNvIGNoYW5nZWQgdG8gYSBmdW5jdGlvbi4gYF9fdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VfcG1kYCwgYHZtX25vcm1hbF9wYWdlX3B1ZGAgYXJlIGFsbCBqdXN0IHVwZGF0aW5nIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBwcmludC4KClllcCwgaXQmIzM5O3MganVzdCBkZWNvcmF0aXZlIGNoYW5nZXMuIEkmIzM5O2xsIHNldC1yZXN1bHRzIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgYHByaW50X2JhZF9wYWdlX21hcGApLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLCBhcyBpdCBvbmx5IGFmZmVjdHMgbG9nZ2luZy9kaWFnbm9zdGljIG91dHB1dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCkuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGFzIGl0IG9ubHkgYWZmZWN0cyBsb2dnaW5nL2RpYWdub3N0aWMgb3V0cHV0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjU3OjM3LjgxMzcyNzI4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzg5MzU0MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgYHByaW50X2JhZF9wYWdlX21hcGApLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLCBhcyBpdCBvbmx5IGFmZmVjdHMgbG9nZ2luZy9kaWFnbm9zdGljIG91dHB1dC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjU3OjM3LjgxMzczNzkzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MTcxMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzAzZDYwZjIyYTAyYzU3Mjk1MjBlMDEzMmJhNGI2ZDlhYjJhZWFlNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjU3OjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uYzhmZTJmMzczZmQyNzIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MTksOSArNTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSlcXG4re1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGJ1Zl9zaXplIFxcdTAwM2MgZW50cnlfc2l6ZSAqIDIgKyAxKSkge1xcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwib3ZlcmZsb3dcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGVudHJ5X3NpemUpIHtcXG4rXFx0Y2FzZSBzaXplb2YodTMyKTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwOHhcXFwiLCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugc2l6ZW9mKHU2NCk6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4XFxcIiwgKihjb25zdCB1NjQgKillbnRyeSk7XFxuK1xcdFxcdGJyZWFrO1xcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcXG4rXFx0Y2FzZSBzaXplb2YodTEyOCk6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4JTAxNmxseFxcXCIsXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSBcXHUwMDNlXFx1MDAzZSA2NCksXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZyBsb25nKSooY29uc3QgdTEyOCAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwidW5zdXBwb3J0ZWRcXFwiKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rI2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhdXRvIF9fdmFsID0gKHZhbCk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcXHUwMDI2X192YWwsIHNpemVvZihfX3ZhbCkpO1xcdFxcXFxcXG4rXFx0fSB3aGlsZSAoMClcXG4rXFxuKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKVxcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcXHQoMzIgKyAxKSAvKiBNYXggMTI4LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cXG4rI2Vsc2VcXG4rI2RlZmluZSBQVFZBTF9TVFJfTUFYXFx0KDE2ICsgMSkgLyogTWF4IDY0LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7XFxuK1xcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4rXFx0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbitcXHRjaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07XFxuK1xcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4gXFx0cDRkX3QgcDRkLCAqcDRkcDtcXG4gXFx0cHVkX3QgcHVkLCAqcHVkcDtcXG4gXFx0cG1kX3QgcG1kLCAqcG1kcDtcXG5AQCAtNTMyLDM0ICs1NzUsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gXFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cXG4gXFx0ICovXFxuIFxcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcXG4tXFx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xcbitcXHRwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpO1xcbiBcXG4gXFx0aWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolc1xcXFxuXFxcIiwgcGdkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XFxuIFxcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xcbi1cXHRwNGR2ID0gcDRkX3ZhbChwNGQpO1xcbitcXHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcXG4gXFxuIFxcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcXFxcblxcXCIsIHBnZHYsIHA0ZHYpO1xcbitcXHRcXHRwcl9hbGVydChcXFwicGdkOiVzIHA0ZDolc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XFxuIFxcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xcbi1cXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xcbitcXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcXG4gXFxuIFxcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseFxcXFxuXFxcIiwgcGdkdiwgcDRkdiwgcHVkdik7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JXMgcDRkOiVzIHB1ZDolc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIFxcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xcbi1cXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xcbitcXHRwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQncyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcXG5AQCAtNTY3LDggKzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXFxuIFxcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXFxuIFxcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXFxuIFxcdCAqL1xcbi1cXHRwcl9hbGVydChcXFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcXFxuXFxcIiwgcGdkdixcXG4tXFx0XFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xcbitcXHRwcl9hbGVydChcXFwicGdkOiVzIHA0ZDolcyBwdWQ6JXMgcG1kOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTg0LDEwICs2MjYsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gICogcGFnZSB0YWJsZSBsb2NrLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuK1xcdGNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbiBcXHRwZ29mZl90IGluZGV4O1xcbiBcXG4gXFx0aWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKVxcbkBAIC01OTYsOCArNjM5LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRtYXBwaW5nID0gdm1hLVxcdTAwM2V2bV9maWxlID8gdm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcgOiBOVUxMO1xcbiBcXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XFxuIFxcbi1cXHRwcl9hbGVydChcXFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XFxcIiwgY3VycmVudC1cXHUwMDNlY29tbSxcXG4tXFx0XFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xcbitcXHRwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTtcXG4rXFx0cHJfYWxlcnQoXFxcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzXFxcIiwgY3VycmVudC1cXHUwMDNlY29tbSxcXG4rXFx0XFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcXG4gXFx0X19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZSh2bWEtXFx1MDAzZXZtX21tLCBhZGRyKTtcXG4gXFx0aWYgKHBhZ2UpXFxuIFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiYmFkIHBhZ2UgbWFwXFxcIik7XFxuQEAgLTYyNyw4ICs2NzEsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4gXFx0fVxcbiB9XFxuIFxcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXFxcXG4tXFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSlcXG4rc3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0YXV0byBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuK1xcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbit9XFxuIFxcbiAvKipcXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcXFwic3RydWN0IHBhZ2VcXFwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXFxuQEAgLTYzNiw4ICs2ODUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxcbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cXG4gICogQHNwZWNpYWw6IFdoZXRoZXIgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFya2VkIFxcXCJzcGVjaWFsXFxcIi5cXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXFxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxcbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxcbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cXG4gICpcXG4gICogXFxcIlNwZWNpYWxcXFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFxcXCJzdHJ1Y3QgcGFnZVxcXCIgKGVpdGhlclxcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qXFxuQEAgLTc0MSw3ICs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHBmbiBcXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcXG4gXFx0XFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXFxuLVxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdC8qXFxuQEAgLTc2Nyw4ICs4MTcsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICBwdGVfdCBwdGUpXFxuIHtcXG4rXFx0YXV0byBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuIFxcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxcbi1cXHRcXHRcXHRcXHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04MDksOCArODYxLDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0XFx0cG1kX3QgcG1kKVxcbiB7XFxuK1xcdGF1dG8gZW50cnkgPSBwbWRfdmFsKHBtZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSxcXG4tXFx0XFx0XFx0XFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODUwLDggKzkwNCwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxcbiB7XFxuK1xcdGF1dG8gZW50cnkgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcXG4tXFx0XFx0XFx0XFx0cHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6NTc6MzguNTE4OTMyMjk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDA4NDE0MDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIGBwcmludF9iYWRfcGFnZV9tYXBgKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCwgYXMgaXQgb25seSBhZmZlY3RzIGxvZ2dpbmcvZGlhZ25vc3RpYyBvdXRwdXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwM2Q2MGYyMmEwMmM1NzI5NTIwZTAxMzJiYTRiNmQ5YWIyYWVhZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjU3OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmM4ZmUyZjM3M2ZkMjcyIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTE5LDkgKzUxOSw1MiBAQCBzdGF0aWMgYm9vbCBpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQodm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuK3tcbitcdGlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgXHUwMDNjIGVudHJ5X3NpemUgKiAyICsgMSkpIHtcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCJvdmVyZmxvd1wiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChlbnRyeV9zaXplKSB7XG4rXHRjYXNlIHNpemVvZih1MzIpOlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwOHhcIiwgKihjb25zdCB1MzIgKillbnRyeSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBzaXplb2YodTY0KTpcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCIlMDE2bGx4XCIsICooY29uc3QgdTY0ICopZW50cnkpO1xuK1x0XHRicmVhaztcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbitcdGNhc2Ugc2l6ZW9mKHUxMjgpOlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwMTZsbHglMDE2bGx4XCIsXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKCooY29uc3QgdTEyOCAqKWVudHJ5IFx1MDAzZVx1MDAzZSA2NCksXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwidW5zdXBwb3J0ZWRcIik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbisjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGF1dG8gX192YWwgPSAodmFsKTtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuK1x0fSB3aGlsZSAoMClcbitcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcdCgzMiArIDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xuKyNlbHNlXG4rI2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMTYgKyAxKSAvKiBNYXggNjQtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xuKyNlbmRpZlxuK1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbitcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcDRkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHA0ZF90IHA0ZCwgKnA0ZHA7XG4gXHRwdWRfdCBwdWQsICpwdWRwO1xuIFx0cG1kX3QgcG1kLCAqcG1kcDtcbkBAIC01MzIsMzQgKzU3NSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cbiBcdCAqL1xuIFx0cGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xuLVx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xuK1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcInBnZDolMDhsbHhcXG5cIiwgcGdkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiVzXFxuXCIsIHBnZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbiBcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuLVx0cDRkdiA9IHA0ZF92YWwocDRkKTtcbitcdHB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpO1xuIFxuIFx0aWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHtcbi1cdFx0cHJfYWxlcnQoXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcXG5cIiwgcGdkdiwgcDRkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiVzIHA0ZDolc1xcblwiLCBwZ2Rfc3RyLCBwNGRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbi1cdHB1ZHYgPSBwdWRfdmFsKHB1ZCk7XG4rXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHhcXG5cIiwgcGdkdiwgcDRkdiwgcHVkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiVzIHA0ZDolcyBwdWQ6JXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XG4tXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xuK1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCdzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxuQEAgLTU2Nyw4ICs2MTAsNyBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGRcbiBcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXG4gXHQgKi9cbi1cdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwiLCBwZ2R2LFxuLVx0XHQgcDRkdiwgcHVkdiwgcG1kdik7XG4rXHRwcl9hbGVydChcInBnZDolcyBwNGQ6JXMgcHVkOiVzIHBtZDolc1xcblwiLCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTtcbiB9XG4gXG4gLypcbkBAIC01ODQsMTAgKzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuICAqIHBhZ2UgdGFibGUgbG9jay5cbiAgKi9cbiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0ZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSxcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbitcdGNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdO1xuIFx0cGdvZmZfdCBpbmRleDtcbiBcbiBcdGlmIChpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQoKSlcbkBAIC01OTYsOCArNjM5LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0bWFwcGluZyA9IHZtYS1cdTAwM2V2bV9maWxlID8gdm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nIDogTlVMTDtcbiBcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbiBcbi1cdHByX2FsZXJ0KFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XCIsIGN1cnJlbnQtXHUwMDNlY29tbSxcbi1cdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xuK1x0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XG4rXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzXCIsIGN1cnJlbnQtXHUwMDNlY29tbSxcbitcdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcbiBcdF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRkdW1wX3BhZ2UocGFnZSwgXCJiYWQgcGFnZSBtYXBcIik7XG5AQCAtNjI3LDggKzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXG4tXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxuK3N0YXRpYyB2b2lkIHByaW50X2JhZF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0YXV0byBlbnRyeSA9IHB0ZV92YWwocHRlKTtcbitcbitcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4rfVxuIFxuIC8qKlxuICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgXCJzdHJ1Y3QgcGFnZVwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXG5AQCAtNjM2LDggKzY4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICogQGFkZHI6IFRoZSBhZGRyZXNzIHdoZXJlIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcHBlZC5cbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cbiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgXCJzcGVjaWFsXCIuXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICogQGVudHJ5OiBUaGUgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZSBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4rICogQGVudHJ5X3NpemU6IFRoZSBzaXplIG9mIEBlbnRyeS5cbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwiU3BlY2lhbFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFwic3RydWN0IHBhZ2VcIiAoZWl0aGVyXG4gICogaXQgZG9lc24ndCBleGlzdCwgb3IgaXQgZXhpc3RzIGJ1dCB0aGV5IGRvbid0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBzcGVjaWFsLFxuLVx0XHR1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0Y29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0aWYgKHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGxldmVsKSkge1xuIFx0XHRpZiAodW5saWtlbHkoc3BlY2lhbCkpIHtcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuK1x0XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbiBcdFx0LypcbkBAIC03NDEsNyArNzkxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdGlmICh1bmxpa2VseShwZm4gXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcbiBcdFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXG4tXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XG4rXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCArODE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgIHB0ZV90IHB0ZSlcbiB7XG4rXHRhdXRvIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksXG4tXHRcdFx0XHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4gfVxuIFxuIC8qKlxuQEAgLTgwOSw4ICs4NjEsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuK1x0YXV0byBlbnRyeSA9IHBtZF92YWwocG1kKTtcbitcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxuLVx0XHRcdFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4rXHRcdFx0XHRcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuIH1cbiBcbiAvKipcbkBAIC04NTAsOCArOTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90IHB1ZClcbiB7XG4rXHRhdXRvIGVudHJ5ID0gcHVkX3ZhbChwdWQpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdWRfcGZuKHB1ZCksIHB1ZF9zcGVjaWFsKHB1ZCksXG4tXHRcdFx0XHRwdWRfdmFsKHB1ZCksIFBHVEFCTEVfTEVWRUxfUFVEKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6NTc6MzguNTE4OTM0ODY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwODQxMDUzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYWRkaXRpb25zIG9mIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAsIHdoaWNoIGxvb2sgbGlrZSBzdHJpbmdpZmljYXRpb24gZnVuY3Rpb25zIG9yIG1hY3Jvcy4gVGhleSdyZSBiZWluZyB1c2VkIGluIGBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYHByX2FsZXJ0YCBjYWxscyB3aXRoIGhleCBmb3JtYXR0aW5nLiBIbW0sIGBwcmludF9iYWRfcGFnZV9tYXBgIGlzIGFsc28gbW9kaWZpZWQsIG5vdyB0YWtpbmcgYGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZWAgcmF0aGVyIHRoYW4gYSBkaXJlY3QgYHVuc2lnbmVkIGxvbmcgbG9uZ2AuIFRoZSBzYW1lIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gYHByaW50X2JhZF9wdGVgLiBBbmQgaXQgbG9va3MgbGlrZSBgX192bV9ub3JtYWxfcGFnZWAgYW5kIGl0cyBjYWxsZXJzLCBgdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VfcG1kYCwgYHZtX25vcm1hbF9wYWdlX3B1ZGAgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBwYXNzIHRoZSBlbnRyeSBhbmQgaXRzIHNpemUuXG5cbkFoYSEgSXQgc2VlbXMgdGhhdCBhbGwgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgc29sZWx5IHJlbGF0ZWQgdG8gaG93IHBhZ2UgdGFibGUgZW50cnkgdmFsdWVzIGFyZSAqcHJpbnRlZCogaW4gZXJyb3IgbWVzc2FnZXMsIGxpa2UgdGhlIG9uZXMgdGhhdCB0cmlnZ2VyIGBCVUc6IEJhZCBwYWdlIG1hcGAuIFRoZSBhaW0gaXMgdG8gaGFuZGxlIGRpZmZlcmVudCBlbnRyeSBzaXplcyAoZS5nLiwgMTI4LWJpdCB2YWx1ZXMpIG1vcmUgY2xlYW5seSBhbmQgcGVyaGFwcyBpbXByb3ZlIGZvcm1hdHRpbmcgY29uc2lzdGVuY3kgZm9yIDMyLzY0IGJpdCBlbnRyaWVzLiBUaGUgbG9naWMgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBfX3ZtX25vcm1hbF9wYWdlYCByZW1haW5zIHVudG91Y2hlZCwgZXhjZXB0IGZvciB0aGUgY2hhbmdlIGluIGhvdyBpdCBwYXNzZXMgdGhlIGVudHJ5IHRvIGBwcmludF9iYWRfcGFnZV9tYXBgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBmb3IgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcy4gYHB0dmFsX2J5dGVzX3RvX2hleF9zdHJgIGlzIGluZGVlZCBhIG5ldyBmdW5jdGlvbiwgYW5kIGBwdHZhbF90b19zdHJgIGlzIGEgbWFjcm8uIGBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlYCB1c2VzIHRoZSBmb3JtYXR0aW5nIGZ1bmN0aW9ucyB3aXRoIGBwcl9hbGVydGAuIGBwcmludF9iYWRfcGFnZV9tYXBgIGFsc28gdXNlcyB0aGVtLiBJbnRlcmVzdGluZ2x5LCBgcHJpbnRfYmFkX3B0ZWAgaGFzIGNoYW5nZWQgZnJvbSBhIG1hY3JvIHRvIGEgc3RhdGljIHZvaWQgZnVuY3Rpb24uIFRoZSBzaWduYXR1cmUgb2YgYF9fdm1fbm9ybWFsX3BhZ2VgIGlzIGNoYW5nZWQuIFRoZSBzaWduYXR1cmVzIG9mIGB2bV9ub3JtYWxfcGFnZWAsIGB2bV9ub3JtYWxfcGFnZV9wbWRgLCBhbmQgYHZtX25vcm1hbF9wYWdlX3B1ZGAgcmVtYWluIHRoZSBzYW1lLCBidXQgdGhlaXIgYm9kaWVzIGFyZSBjaGFuZ2VkIHRvIHBhc3MgYFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpYC5cblxuT2theSwgYnV0IGFyZSB0aGVyZSBhbnkgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3c/IE5vcGUsIHRoaXMgaXMgcHVyZWx5IGFib3V0IGhvdyBlcnJvciByZXBvcnRzIGFyZSBmb3JtYXR0ZWQuIFRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBvbmx5IGV2ZXIgZXhlY3V0ZWQgaW4gZXJyb3IgY2FzZXMuIFRoZSBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIHJldHVybiBOVUxMIG9yIGR1bXAgcGFnZS4gYF9fdm1fbm9ybWFsX3BhZ2VgIHJldHVybnMgTlVMTCwgdGhpcyBwYXJ0IGlzIHVuY2hhbmdlZC4gU28gbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaGVyZS5cblxuTGV0IG1lIGNvbmZpcm0uIFRoZSBwcm9tcHQgc2F5cyB0aGF0IFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHNcIiBzaG91bGQgcmVzdWx0IGluIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4gSXQncyBqdXN0IGltcHJvdmluZyB0aGUgZm9ybWF0dGluZyBvZiBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNwbGF5ZWQgaW4gYHByX2FsZXJ0YC5cblxuSSdsbCBxdWlja2x5IHJldmlldyB0aGUgZGlmZiBvbmUgbGFzdCB0aW1lLiBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgaXMgZm9ybWF0dGluZy4gYHB0dmFsX3RvX3N0cmAgaXMgZm9ybWF0dGluZy4gYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgIGlzIGZvcm1hdHRpbmcuIGBwcmludF9iYWRfcGFnZV9tYXBgIGlzIGZvcm1hdHRpbmcuIGBwcmludF9iYWRfcHRlYCBpcyBmb3JtYXR0aW5nLCB0aG91Z2ggaXQgYWxzbyBjaGFuZ2VkIHRvIGEgZnVuY3Rpb24uIGBfX3ZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlX3BtZGAsIGB2bV9ub3JtYWxfcGFnZV9wdWRgIGFyZSBhbGwganVzdCB1cGRhdGluZyB0aGUgYXJndW1lbnRzIGZvciB0aGUgcHJpbnQuXG5cblllcCwgaXQncyBqdXN0IGRlY29yYXRpdmUgY2hhbmdlcy4gSSdsbCBzZXQtcmVzdWx0cyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTU0LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjU3OjUyLjYwMzA0MjY0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIGBwcmludF9iYWRfcGFnZV9tYXBgKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCwgYXMgaXQgb25seSBhZmZlY3RzIGxvZ2dpbmcvZGlhZ25vc3RpYyBvdXRwdXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgYHByaW50X2JhZF9wYWdlX21hcGApLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLCBhcyBpdCBvbmx5IGFmZmVjdHMgbG9nZ2luZy9kaWFnbm9zdGljIG91dHB1dC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5m9gx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 18:36:33 +0000 UTC FinishedAt: 2026-07-09 18:57:54 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCkuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGFzIGl0IG9ubHkgYWZmZWN0cyBsb2dnaW5nL2RpYWdub3N0aWMgb3V0cHV0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwM2Q2MGYyMmEwMmM1NzI5NTIwZTAxMzJiYTRiNmQ5YWIyYWVhZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjU3OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5jOGZlMmYzNzNmZDI3MiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0O292ZXJmbG93XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUzMik6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDh4XCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4XCYjMzQ7LCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7XHRjYXNlIHNpemVvZih1MTI4KTpcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0OyUwMTZsbHglMDE2bGx4XCYjMzQ7LFxuJiM0MztcdFx0XHQgKHVuc2lnbmVkIGxvbmcgbG9uZykoKihjb25zdCB1MTI4ICopZW50cnkgXHUwMDNlXHUwMDNlIDY0KSxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDt1bnN1cHBvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHR2YWxfdG9fc3RyKGJ1ZiwgdmFsKVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRhdXRvIF9fdmFsID0gKHZhbCk7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7I2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqL1xuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFBUVkFMX1NUUl9NQVhcdCgxNiAmIzQzOyAxKSAvKiBNYXggNjQtYml0IHZhbHVlIGluIGhleCAmIzQzOyBOVUwgKi9cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbiYjNDM7XHRjaGFyIHBnZF9zdHJbUFRWQUxfU1RSX01BWF07XG4mIzQzO1x0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xuJiM0MztcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbiYjNDM7XHRjaGFyIHBtZF9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwNGRfdCBwNGQsICpwNGRwO1xuIFx0cHVkX3QgcHVkLCAqcHVkcDtcbiBcdHBtZF90IHBtZCwgKnBtZHA7XG5AQCAtNTMyLDM0ICYjNDM7NTc1LDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBzZWUgbG9ja2luZyByZXF1aXJlbWVudHMgZm9yIHByaW50X2JhZF9wYWdlX21hcCgpLlxuIFx0ICovXG4gXHRwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7XG4tXHRwZ2R2ID0gcGdkX3ZhbCgqcGdkcCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolc1xcblwmIzM0OywgcGdkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuIFx0cDRkID0gcDRkcF9nZXQocDRkcCk7XG4tXHRwNGR2ID0gcDRkX3ZhbChwNGQpO1xuJiM0MztcdHB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpO1xuIFxuIFx0aWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHtcbi1cdFx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LCBwNGR2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolcyBwNGQ6JXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiBcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xuLVx0cHVkdiA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LCBwNGR2LCBwdWR2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzXFxuXCYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4gXHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbi1cdHBtZHYgPSBwbWRfdmFsKHBtZCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcbkBAIC01NjcsOCAmIzQzOzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZFxuIFx0ICogYWxyZWFkeSB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhlIFBURS5cbiBcdCAqL1xuLVx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwmIzM0OywgcGdkdixcbi1cdFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BnZDolcyBwNGQ6JXMgcHVkOiVzIHBtZDolc1xcblwmIzM0OywgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XG4gfVxuIFxuIC8qXG5AQCAtNTg0LDEwICYjNDM7NjI2LDExIEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gICogcGFnZSB0YWJsZSBsb2NrLlxuICAqL1xuIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4mIzQzO1x0Y2hhciBlbnRyeV9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwZ29mZl90IGluZGV4O1xuIFxuIFx0aWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKVxuQEAgLTU5Niw4ICYjNDM7NjM5LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0bWFwcGluZyA9IHZtYS1cdTAwM2V2bV9maWxlID8gdm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nIDogTlVMTDtcbiBcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbiBcbi1cdHByX2FsZXJ0KFwmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFwmIzM0OywgY3VycmVudC1cdTAwM2Vjb21tLFxuLVx0XHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7XG4mIzQzO1x0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7QlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JXNcJiMzNDssIGN1cnJlbnQtXHUwMDNlY29tbSxcbiYjNDM7XHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7XG4gXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cdTAwM2V2bV9tbSwgYWRkcik7XG4gXHRpZiAocGFnZSlcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwmIzM0O2JhZCBwYWdlIG1hcFwmIzM0Oyk7XG5AQCAtNjI3LDggJiM0Mzs2NzEsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlLCBwYWdlKSBcXFxuLVx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSlcbiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRhdXRvIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiYjNDM7XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuJiM0Mzt9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcJiMzNDtzdHJ1Y3QgcGFnZVwmIzM0OyBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIHRhYmxlIGVudHJ5LlxuQEAgLTYzNiw4ICYjNDM7Njg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcJiMzNDtzcGVjaWFsXCYjMzQ7LlxuLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuJiM0MzsgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwmIzM0O1NwZWNpYWxcJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCYjMzQ7c3RydWN0IHBhZ2VcJiMzNDsgKGVpdGhlclxuICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCxcbi1cdFx0dW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICYjNDM7NzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuJiM0MztcdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdC8qXG5AQCAtNzQxLDcgJiM0Mzs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbiYjNDM7XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCAmIzQzOzgxNywxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdGF1dG8gZW50cnkgPSBwdGVfdmFsKHB0ZSk7XG4mIzQzO1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksXG4tXHRcdFx0XHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuIH1cbiBcbiAvKipcbkBAIC04MDksOCAmIzQzOzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdHBtZF90IHBtZClcbiB7XG4mIzQzO1x0YXV0byBlbnRyeSA9IHBtZF92YWwocG1kKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSxcbi1cdFx0XHRcdHBtZF92YWwocG1kKSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1MCw4ICYjNDM7OTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90IHB1ZClcbiB7XG4mIzQzO1x0YXV0byBlbnRyeSA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCkuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGFzIGl0IG9ubHkgYWZmZWN0cyBsb2dnaW5nL2RpYWdub3N0aWMgb3V0cHV0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzAzZDYwZjIyYTAyYzU3Mjk1MjBlMDEzMmJhNGI2ZDlhYjJhZWFlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTg6NTc6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMxLi5jOGZlMmYzNzNmZDI3MiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgJmx0OyBlbnRyeV9zaXplICogMiAmIzQzOyAxKSkgewomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDtvdmVyZmxvdyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5X3NpemUpIHsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICYjMzQ7JTA4eCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JiMzNDssICooY29uc3QgdTY0ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCiYjNDM7CWNhc2Ugc2l6ZW9mKHUxMjgpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JTAxNmxseCYjMzQ7LAomIzQzOwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSAmZ3Q7Jmd0OyA2NCksCiYjNDM7CQkJICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0O3Vuc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpCQkJCQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCQkJXAomIzQzOwkJYXV0byBfX3ZhbCA9ICh2YWwpOwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQlcCiYjNDM7CQlwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgJmFtcDtfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7CVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXykKJiM0MzsjZGVmaW5lIFBUVkFMX1NUUl9NQVgJKDMyICYjNDM7IDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCAmIzQzOyBOVUwgKi8KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgUFRWQUxfU1RSX01BWAkoMTYgJiM0MzsgMSkgLyogTWF4IDY0LWJpdCB2YWx1ZSBpbiBoZXggJiM0MzsgTlVMICovCiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7CiYjNDM7CWNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTsKJiM0MzsJY2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdOwomIzQzOwljaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07CiYjNDM7CWNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTsKIAlwNGRfdCBwNGQsICpwNGRwOwogCXB1ZF90IHB1ZCwgKnB1ZHA7CiAJcG1kX3QgcG1kLCAqcG1kcDsKQEAgLTUzMiwzNCAmIzQzOzU3NSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZAogCSAqIHNlZSBsb2NraW5nIHJlcXVpcmVtZW50cyBmb3IgcHJpbnRfYmFkX3BhZ2VfbWFwKCkuCiAJICovCiAJcGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwotCXBnZHYgPSBwZ2RfdmFsKCpwZ2RwKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTsKIAogCWlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkgewotCQlwcl9hbGVydCgmIzM0O3BnZDolMDhsbHhcbiYjMzQ7LCBwZ2R2KTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGdkOiVzXG4mIzM0OywgcGdkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTsKIAlwNGQgPSBwNGRwX2dldChwNGRwKTsKLQlwNGR2ID0gcDRkX3ZhbChwNGQpOwomIzQzOwlwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTsKIAogCWlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDolcyBwNGQ6JXNcbiYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyKTsKIAkJcmV0dXJuOwogCX0KIAogCXB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpOwogCXB1ZCA9IHB1ZHBfZ2V0KHB1ZHApOwotCXB1ZHYgPSBwdWRfdmFsKHB1ZCk7CiYjNDM7CXB0dmFsX3RvX3N0cihwdWRfc3RyLCBwdWRfdmFsKHB1ZCkpOwogCiAJaWYgKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpIHsKLQkJcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseFxuJiMzNDssIHBnZHYsIHA0ZHYsIHB1ZHYpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwZ2Q6JXMgcDRkOiVzIHB1ZDolc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIpOwogCQlyZXR1cm47CiAJfQogCiAJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7CiAJcG1kID0gcG1kcF9nZXQocG1kcCk7Ci0JcG1kdiA9IHBtZF92YWwocG1kKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7CiAKIAkvKgogCSAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQmIzM5O3MgdHJpY2t5IHdpdGggQ09ORklHX0hJR0hQVEUsCkBAIC01NjcsOCAmIzQzOzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAJICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGQKIAkgKiBhbHJlYWR5IHRha2UgY2FyZSBvZiBwcmludGluZyB0aGUgUFRFLgogCSAqLwotCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxuJiMzNDssIHBnZHYsCi0JCSBwNGR2LCBwdWR2LCBwbWR2KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDtwZ2Q6JXMgcDRkOiVzIHB1ZDolcyBwbWQ6JXNcbiYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTsKIH0KIAogLyoKQEAgLTU4NCwxMCAmIzQzOzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZAogICogcGFnZSB0YWJsZSBsb2NrLgogICovCiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwomIzQzOwljaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTsKIAlwZ29mZl90IGluZGV4OwogCiAJaWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKQpAQCAtNTk2LDggJiM0Mzs2MzksOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJbWFwcGluZyA9IHZtYS0mZ3Q7dm1fZmlsZSA/IHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nIDogTlVMTDsKIAlpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7CiAKLQlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseCYjMzQ7LCBjdXJyZW50LSZndDtjb21tLAotCQkgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7CiYjNDM7CXB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpOwomIzQzOwlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzJiMzNDssIGN1cnJlbnQtJmd0O2NvbW0sCiYjNDM7CQkgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpOwogCV9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLSZndDt2bV9tbSwgYWRkcik7CiAJaWYgKHBhZ2UpCiAJCWR1bXBfcGFnZShwYWdlLCAmIzM0O2JhZCBwYWdlIG1hcCYjMzQ7KTsKQEAgLTYyNyw4ICYjNDM7NjcxLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAJfQogfQogCi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFwKLQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKQomIzQzO3N0YXRpYyB2b2lkIHByaW50X2JhZF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlhdXRvIGVudHJ5ID0gcHRlX3ZhbChwdGUpOwomIzQzOwomIzQzOwlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCAmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7fQogCiAvKioKICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuCkBAIC02MzYsOCAmIzQzOzY4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLgogICogQHBmbjogVGhlIFBGTiBzdG9yZWQgaW4gdGhlIHBhZ2UgdGFibGUgZW50cnkuCiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgJiMzNDtzcGVjaWFsJiMzNDsuCi0gKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS4KICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LgomIzQzOyAqIEBlbnRyeV9zaXplOiBUaGUgc2l6ZSBvZiBAZW50cnkuCiYjNDM7ICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuCiAgKgogICogJiMzNDtTcGVjaWFsJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgJiMzNDtzdHJ1Y3QgcGFnZSYjMzQ7IChlaXRoZXIKICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzCkBAIC02OTcsNyAmIzQzOzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCwKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiYjNDM7CQljb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIHsKIAlpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7CiAJCWlmICh1bmxpa2VseShzcGVjaWFsKSkgewpAQCAtNzEwLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJaWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKQogCQkJCXJldHVybiBOVUxMOwogCi0JCQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpOwomIzQzOwkJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQkvKgpAQCAtNzQxLDcgJiM0Mzs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJaWYgKHVubGlrZWx5KHBmbiAmZ3Q7IGhpZ2hlc3RfbWVtbWFwX3BmbikpIHsKIAkJLyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovCi0JCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7CiYjNDM7CQlwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJLyoKQEAgLTc2Nyw4ICYjNDM7ODE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICBwdGVfdCBwdGUpCiB7CiYjNDM7CWF1dG8gZW50cnkgPSBwdGVfdmFsKHB0ZSk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksCi0JCQkJcHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTsKIH0KIAogLyoqCkBAIC04MDksOCAmIzQzOzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXBtZF90IHBtZCkKIHsKJiM0MzsJYXV0byBlbnRyeSA9IHBtZF92YWwocG1kKTsKJiM0MzsKIAlyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSwKLQkJCQlwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTsKJiM0MzsJCQkJJmFtcDtlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QTUQpOwogfQogCiAvKioKQEAgLTg1MCw4ICYjNDM7OTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKQogewomIzQzOwlhdXRvIGVudHJ5ID0gcHVkX3ZhbChwdWQpOwomIzQzOwogCXJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHVkX3BmbihwdWQpLCBwdWRfc3BlY2lhbChwdWQpLAotCQkJCXB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpOwomIzQzOwkJCQkmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7CiB9CiAjZW5kaWYKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU0CgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMTEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYWRkaXRpb25zIG9mIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAsIHdoaWNoIGxvb2sgbGlrZSBzdHJpbmdpZmljYXRpb24gZnVuY3Rpb25zIG9yIG1hY3Jvcy4gVGhleSYjMzk7cmUgYmVpbmcgdXNlZCBpbiBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBwcl9hbGVydGAgY2FsbHMgd2l0aCBoZXggZm9ybWF0dGluZy4gSG1tLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCBpcyBhbHNvIG1vZGlmaWVkLCBub3cgdGFraW5nIGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIHJhdGhlciB0aGFuIGEgZGlyZWN0IGB1bnNpZ25lZCBsb25nIGxvbmdgLiBUaGUgc2FtZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIGBwcmludF9iYWRfcHRlYC4gQW5kIGl0IGxvb2tzIGxpa2UgYF9fdm1fbm9ybWFsX3BhZ2VgIGFuZCBpdHMgY2FsbGVycywgYHZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlX3BtZGAsIGB2bV9ub3JtYWxfcGFnZV9wdWRgIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQgdG8gcGFzcyB0aGUgZW50cnkgYW5kIGl0cyBzaXplLgoKQWhhISBJdCBzZWVtcyB0aGF0IGFsbCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBzb2xlbHkgcmVsYXRlZCB0byBob3cgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZXMgYXJlICpwcmludGVkKiBpbiBlcnJvciBtZXNzYWdlcywgbGlrZSB0aGUgb25lcyB0aGF0IHRyaWdnZXIgYEJVRzogQmFkIHBhZ2UgbWFwYC4gVGhlIGFpbSBpcyB0byBoYW5kbGUgZGlmZmVyZW50IGVudHJ5IHNpemVzIChlLmcuLCAxMjgtYml0IHZhbHVlcykgbW9yZSBjbGVhbmx5IGFuZCBwZXJoYXBzIGltcHJvdmUgZm9ybWF0dGluZyBjb25zaXN0ZW5jeSBmb3IgMzIvNjQgYml0IGVudHJpZXMuIFRoZSBsb2dpYyB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYF9fdm1fbm9ybWFsX3BhZ2VgIHJlbWFpbnMgdW50b3VjaGVkLCBleGNlcHQgZm9yIHRoZSBjaGFuZ2UgaW4gaG93IGl0IHBhc3NlcyB0aGUgZW50cnkgdG8gYHByaW50X2JhZF9wYWdlX21hcGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMuIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBpcyBpbmRlZWQgYSBuZXcgZnVuY3Rpb24sIGFuZCBgcHR2YWxfdG9fc3RyYCBpcyBhIG1hY3JvLiBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAgdXNlcyB0aGUgZm9ybWF0dGluZyBmdW5jdGlvbnMgd2l0aCBgcHJfYWxlcnRgLiBgcHJpbnRfYmFkX3BhZ2VfbWFwYCBhbHNvIHVzZXMgdGhlbS4gSW50ZXJlc3RpbmdseSwgYHByaW50X2JhZF9wdGVgIGhhcyBjaGFuZ2VkIGZyb20gYSBtYWNybyB0byBhIHN0YXRpYyB2b2lkIGZ1bmN0aW9uLiBUaGUgc2lnbmF0dXJlIG9mIGBfX3ZtX25vcm1hbF9wYWdlYCBpcyBjaGFuZ2VkLiBUaGUgc2lnbmF0dXJlcyBvZiBgdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VfcG1kYCwgYW5kIGB2bV9ub3JtYWxfcGFnZV9wdWRgIHJlbWFpbiB0aGUgc2FtZSwgYnV0IHRoZWlyIGJvZGllcyBhcmUgY2hhbmdlZCB0byBwYXNzIGAmYW1wO2VudHJ5LCBzaXplb2YoZW50cnkpYC4KCk9rYXksIGJ1dCBhcmUgdGhlcmUgYW55IGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93PyBOb3BlLCB0aGlzIGlzIHB1cmVseSBhYm91dCBob3cgZXJyb3IgcmVwb3J0cyBhcmUgZm9ybWF0dGVkLiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgb25seSBldmVyIGV4ZWN1dGVkIGluIGVycm9yIGNhc2VzLiBUaGUgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UsIGFuZCByZXR1cm4gTlVMTCBvciBkdW1wIHBhZ2UuIGBfX3ZtX25vcm1hbF9wYWdlYCByZXR1cm5zIE5VTEwsIHRoaXMgcGFydCBpcyB1bmNoYW5nZWQuIFNvIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuCgpMZXQgbWUgY29uZmlybS4gVGhlIHByb21wdCBzYXlzIHRoYXQgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cyYjMzQ7IHNob3VsZCByZXN1bHQgaW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgcGF0Y2ggY2xlYXJseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBJdCYjMzk7cyBqdXN0IGltcHJvdmluZyB0aGUgZm9ybWF0dGluZyBvZiBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNwbGF5ZWQgaW4gYHByX2FsZXJ0YC4KCkkmIzM5O2xsIHF1aWNrbHkgcmV2aWV3IHRoZSBkaWZmIG9uZSBsYXN0IHRpbWUuIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBpcyBmb3JtYXR0aW5nLiBgcHR2YWxfdG9fc3RyYCBpcyBmb3JtYXR0aW5nLiBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAgaXMgZm9ybWF0dGluZy4gYHByaW50X2JhZF9wYWdlX21hcGAgaXMgZm9ybWF0dGluZy4gYHByaW50X2JhZF9wdGVgIGlzIGZvcm1hdHRpbmcsIHRob3VnaCBpdCBhbHNvIGNoYW5nZWQgdG8gYSBmdW5jdGlvbi4gYF9fdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VfcG1kYCwgYHZtX25vcm1hbF9wYWdlX3B1ZGAgYXJlIGFsbCBqdXN0IHVwZGF0aW5nIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBwcmludC4KClllcCwgaXQmIzM5O3MganVzdCBkZWNvcmF0aXZlIGNoYW5nZXMuIEkmIzM5O2xsIHNldC1yZXN1bHRzIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgYHByaW50X2JhZF9wYWdlX21hcGApLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLCBhcyBpdCBvbmx5IGFmZmVjdHMgbG9nZ2luZy9kaWFnbm9zdGljIG91dHB1dC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBgcHJpbnRfYmFkX3BhZ2VfbWFwYCkuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGFzIGl0IG9ubHkgYWZmZWN0cyBsb2dnaW5nL2RpYWdub3N0aWMgb3V0cHV0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjU3OjM3LjgxMzcyNzI4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzg5MzU0MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgYHByaW50X2JhZF9wYWdlX21hcGApLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLCBhcyBpdCBvbmx5IGFmZmVjdHMgbG9nZ2luZy9kaWFnbm9zdGljIG91dHB1dC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjU3OjM3LjgxMzczNzkzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MTcxMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzAzZDYwZjIyYTAyYzU3Mjk1MjBlMDEzMmJhNGI2ZDlhYjJhZWFlNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjU3OjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uYzhmZTJmMzczZmQyNzIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MTksOSArNTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSlcXG4re1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGJ1Zl9zaXplIFxcdTAwM2MgZW50cnlfc2l6ZSAqIDIgKyAxKSkge1xcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwib3ZlcmZsb3dcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGVudHJ5X3NpemUpIHtcXG4rXFx0Y2FzZSBzaXplb2YodTMyKTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwOHhcXFwiLCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugc2l6ZW9mKHU2NCk6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4XFxcIiwgKihjb25zdCB1NjQgKillbnRyeSk7XFxuK1xcdFxcdGJyZWFrO1xcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcXG4rXFx0Y2FzZSBzaXplb2YodTEyOCk6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4JTAxNmxseFxcXCIsXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZyBsb25nKSgqKGNvbnN0IHUxMjggKillbnRyeSBcXHUwMDNlXFx1MDAzZSA2NCksXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZyBsb25nKSooY29uc3QgdTEyOCAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwidW5zdXBwb3J0ZWRcXFwiKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rI2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhdXRvIF9fdmFsID0gKHZhbCk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcXHUwMDI2X192YWwsIHNpemVvZihfX3ZhbCkpO1xcdFxcXFxcXG4rXFx0fSB3aGlsZSAoMClcXG4rXFxuKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKVxcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcXHQoMzIgKyAxKSAvKiBNYXggMTI4LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cXG4rI2Vsc2VcXG4rI2RlZmluZSBQVFZBTF9TVFJfTUFYXFx0KDE2ICsgMSkgLyogTWF4IDY0LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7XFxuK1xcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4rXFx0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbitcXHRjaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07XFxuK1xcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4gXFx0cDRkX3QgcDRkLCAqcDRkcDtcXG4gXFx0cHVkX3QgcHVkLCAqcHVkcDtcXG4gXFx0cG1kX3QgcG1kLCAqcG1kcDtcXG5AQCAtNTMyLDM0ICs1NzUsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gXFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cXG4gXFx0ICovXFxuIFxcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcXG4tXFx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xcbitcXHRwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpO1xcbiBcXG4gXFx0aWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDolc1xcXFxuXFxcIiwgcGdkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XFxuIFxcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xcbi1cXHRwNGR2ID0gcDRkX3ZhbChwNGQpO1xcbitcXHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcXG4gXFxuIFxcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcXFxcblxcXCIsIHBnZHYsIHA0ZHYpO1xcbitcXHRcXHRwcl9hbGVydChcXFwicGdkOiVzIHA0ZDolc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XFxuIFxcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xcbi1cXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xcbitcXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcXG4gXFxuIFxcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseFxcXFxuXFxcIiwgcGdkdiwgcDRkdiwgcHVkdik7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JXMgcDRkOiVzIHB1ZDolc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIFxcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xcbi1cXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xcbitcXHRwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQncyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcXG5AQCAtNTY3LDggKzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXFxuIFxcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXFxuIFxcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXFxuIFxcdCAqL1xcbi1cXHRwcl9hbGVydChcXFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcXFxuXFxcIiwgcGdkdixcXG4tXFx0XFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xcbitcXHRwcl9hbGVydChcXFwicGdkOiVzIHA0ZDolcyBwdWQ6JXMgcG1kOiVzXFxcXG5cXFwiLCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTg0LDEwICs2MjYsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gICogcGFnZSB0YWJsZSBsb2NrLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuIHtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuK1xcdGNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbiBcXHRwZ29mZl90IGluZGV4O1xcbiBcXG4gXFx0aWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKVxcbkBAIC01OTYsOCArNjM5LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRtYXBwaW5nID0gdm1hLVxcdTAwM2V2bV9maWxlID8gdm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcgOiBOVUxMO1xcbiBcXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XFxuIFxcbi1cXHRwcl9hbGVydChcXFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XFxcIiwgY3VycmVudC1cXHUwMDNlY29tbSxcXG4tXFx0XFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xcbitcXHRwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTtcXG4rXFx0cHJfYWxlcnQoXFxcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzXFxcIiwgY3VycmVudC1cXHUwMDNlY29tbSxcXG4rXFx0XFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcXG4gXFx0X19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZSh2bWEtXFx1MDAzZXZtX21tLCBhZGRyKTtcXG4gXFx0aWYgKHBhZ2UpXFxuIFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiYmFkIHBhZ2UgbWFwXFxcIik7XFxuQEAgLTYyNyw4ICs2NzEsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4gXFx0fVxcbiB9XFxuIFxcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXFxcXG4tXFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSlcXG4rc3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0YXV0byBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuK1xcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbit9XFxuIFxcbiAvKipcXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcXFwic3RydWN0IHBhZ2VcXFwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXFxuQEAgLTYzNiw4ICs2ODUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxcbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cXG4gICogQHNwZWNpYWw6IFdoZXRoZXIgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFya2VkIFxcXCJzcGVjaWFsXFxcIi5cXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXFxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxcbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxcbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cXG4gICpcXG4gICogXFxcIlNwZWNpYWxcXFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFxcXCJzdHJ1Y3QgcGFnZVxcXCIgKGVpdGhlclxcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qXFxuQEAgLTc0MSw3ICs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHBmbiBcXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcXG4gXFx0XFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXFxuLVxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdC8qXFxuQEAgLTc2Nyw4ICs4MTcsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICBwdGVfdCBwdGUpXFxuIHtcXG4rXFx0YXV0byBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuIFxcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxcbi1cXHRcXHRcXHRcXHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04MDksOCArODYxLDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0XFx0cG1kX3QgcG1kKVxcbiB7XFxuK1xcdGF1dG8gZW50cnkgPSBwbWRfdmFsKHBtZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHBtZF9wZm4ocG1kKSwgcG1kX3NwZWNpYWwocG1kKSxcXG4tXFx0XFx0XFx0XFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODUwLDggKzkwNCwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxcbiB7XFxuK1xcdGF1dG8gZW50cnkgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcXG4tXFx0XFx0XFx0XFx0cHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6NTc6MzguNTE4OTMyMjk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDA4NDE0MDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIGBwcmludF9iYWRfcGFnZV9tYXBgKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCwgYXMgaXQgb25seSBhZmZlY3RzIGxvZ2dpbmcvZGlhZ25vc3RpYyBvdXRwdXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwM2Q2MGYyMmEwMmM1NzI5NTIwZTAxMzJiYTRiNmQ5YWIyYWVhZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjU3OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmM4ZmUyZjM3M2ZkMjcyIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTE5LDkgKzUxOSw1MiBAQCBzdGF0aWMgYm9vbCBpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQodm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuK3tcbitcdGlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgXHUwMDNjIGVudHJ5X3NpemUgKiAyICsgMSkpIHtcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCJvdmVyZmxvd1wiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChlbnRyeV9zaXplKSB7XG4rXHRjYXNlIHNpemVvZih1MzIpOlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwOHhcIiwgKihjb25zdCB1MzIgKillbnRyeSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBzaXplb2YodTY0KTpcbitcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCIlMDE2bGx4XCIsICooY29uc3QgdTY0ICopZW50cnkpO1xuK1x0XHRicmVhaztcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbitcdGNhc2Ugc2l6ZW9mKHUxMjgpOlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwMTZsbHglMDE2bGx4XCIsXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKCooY29uc3QgdTEyOCAqKWVudHJ5IFx1MDAzZVx1MDAzZSA2NCksXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpKihjb25zdCB1MTI4ICopZW50cnkpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwidW5zdXBwb3J0ZWRcIik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbisjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGF1dG8gX192YWwgPSAodmFsKTtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuK1x0fSB3aGlsZSAoMClcbitcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcdCgzMiArIDEpIC8qIE1heCAxMjgtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xuKyNlbHNlXG4rI2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMTYgKyAxKSAvKiBNYXggNjQtYml0IHZhbHVlIGluIGhleCArIE5VTCAqL1xuKyNlbmRpZlxuK1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbitcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcDRkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHA0ZF90IHA0ZCwgKnA0ZHA7XG4gXHRwdWRfdCBwdWQsICpwdWRwO1xuIFx0cG1kX3QgcG1kLCAqcG1kcDtcbkBAIC01MzIsMzQgKzU3NSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cbiBcdCAqL1xuIFx0cGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xuLVx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xuK1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcInBnZDolMDhsbHhcXG5cIiwgcGdkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiVzXFxuXCIsIHBnZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbiBcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuLVx0cDRkdiA9IHA0ZF92YWwocDRkKTtcbitcdHB0dmFsX3RvX3N0cihwNGRfc3RyLCBwNGRfdmFsKHA0ZCkpO1xuIFxuIFx0aWYgKCFwNGRfcHJlc2VudChwNGQpIHx8IHA0ZF9sZWFmKHA0ZCkpIHtcbi1cdFx0cHJfYWxlcnQoXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHhcXG5cIiwgcGdkdiwgcDRkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiVzIHA0ZDolc1xcblwiLCBwZ2Rfc3RyLCBwNGRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbi1cdHB1ZHYgPSBwdWRfdmFsKHB1ZCk7XG4rXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHhcXG5cIiwgcGdkdiwgcDRkdiwgcHVkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiVzIHA0ZDolcyBwdWQ6JXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XG4tXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xuK1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCdzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxuQEAgLTU2Nyw4ICs2MTAsNyBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGRcbiBcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXG4gXHQgKi9cbi1cdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwiLCBwZ2R2LFxuLVx0XHQgcDRkdiwgcHVkdiwgcG1kdik7XG4rXHRwcl9hbGVydChcInBnZDolcyBwNGQ6JXMgcHVkOiVzIHBtZDolc1xcblwiLCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTtcbiB9XG4gXG4gLypcbkBAIC01ODQsMTAgKzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuICAqIHBhZ2UgdGFibGUgbG9jay5cbiAgKi9cbiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0ZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSxcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbitcdGNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdO1xuIFx0cGdvZmZfdCBpbmRleDtcbiBcbiBcdGlmIChpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQoKSlcbkBAIC01OTYsOCArNjM5LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0bWFwcGluZyA9IHZtYS1cdTAwM2V2bV9maWxlID8gdm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nIDogTlVMTDtcbiBcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbiBcbi1cdHByX2FsZXJ0KFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XCIsIGN1cnJlbnQtXHUwMDNlY29tbSxcbi1cdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xuK1x0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XG4rXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiVzXCIsIGN1cnJlbnQtXHUwMDNlY29tbSxcbitcdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcbiBcdF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRkdW1wX3BhZ2UocGFnZSwgXCJiYWQgcGFnZSBtYXBcIik7XG5AQCAtNjI3LDggKzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXG4tXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxuK3N0YXRpYyB2b2lkIHByaW50X2JhZF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgIHB0ZV90IHB0ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0YXV0byBlbnRyeSA9IHB0ZV92YWwocHRlKTtcbitcbitcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4rfVxuIFxuIC8qKlxuICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgXCJzdHJ1Y3QgcGFnZVwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXG5AQCAtNjM2LDggKzY4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICogQGFkZHI6IFRoZSBhZGRyZXNzIHdoZXJlIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcHBlZC5cbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cbiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgXCJzcGVjaWFsXCIuXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICogQGVudHJ5OiBUaGUgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZSBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4rICogQGVudHJ5X3NpemU6IFRoZSBzaXplIG9mIEBlbnRyeS5cbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwiU3BlY2lhbFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFwic3RydWN0IHBhZ2VcIiAoZWl0aGVyXG4gICogaXQgZG9lc24ndCBleGlzdCwgb3IgaXQgZXhpc3RzIGJ1dCB0aGV5IGRvbid0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBzcGVjaWFsLFxuLVx0XHR1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0Y29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0aWYgKHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGxldmVsKSkge1xuIFx0XHRpZiAodW5saWtlbHkoc3BlY2lhbCkpIHtcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuK1x0XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbiBcdFx0LypcbkBAIC03NDEsNyArNzkxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdGlmICh1bmxpa2VseShwZm4gXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcbiBcdFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXG4tXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XG4rXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCArODE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgIHB0ZV90IHB0ZSlcbiB7XG4rXHRhdXRvIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksXG4tXHRcdFx0XHRwdGVfdmFsKHB0ZSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4gfVxuIFxuIC8qKlxuQEAgLTgwOSw4ICs4NjEsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuK1x0YXV0byBlbnRyeSA9IHBtZF92YWwocG1kKTtcbitcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxuLVx0XHRcdFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4rXHRcdFx0XHRcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuIH1cbiBcbiAvKipcbkBAIC04NTAsOCArOTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90IHB1ZClcbiB7XG4rXHRhdXRvIGVudHJ5ID0gcHVkX3ZhbChwdWQpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdWRfcGZuKHB1ZCksIHB1ZF9zcGVjaWFsKHB1ZCksXG4tXHRcdFx0XHRwdWRfdmFsKHB1ZCksIFBHVEFCTEVfTEVWRUxfUFVEKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6NTc6MzguNTE4OTM0ODY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwODQxMDUzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYWRkaXRpb25zIG9mIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAsIHdoaWNoIGxvb2sgbGlrZSBzdHJpbmdpZmljYXRpb24gZnVuY3Rpb25zIG9yIG1hY3Jvcy4gVGhleSdyZSBiZWluZyB1c2VkIGluIGBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYHByX2FsZXJ0YCBjYWxscyB3aXRoIGhleCBmb3JtYXR0aW5nLiBIbW0sIGBwcmludF9iYWRfcGFnZV9tYXBgIGlzIGFsc28gbW9kaWZpZWQsIG5vdyB0YWtpbmcgYGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZWAgcmF0aGVyIHRoYW4gYSBkaXJlY3QgYHVuc2lnbmVkIGxvbmcgbG9uZ2AuIFRoZSBzYW1lIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gYHByaW50X2JhZF9wdGVgLiBBbmQgaXQgbG9va3MgbGlrZSBgX192bV9ub3JtYWxfcGFnZWAgYW5kIGl0cyBjYWxsZXJzLCBgdm1fbm9ybWFsX3BhZ2VgLCBgdm1fbm9ybWFsX3BhZ2VfcG1kYCwgYHZtX25vcm1hbF9wYWdlX3B1ZGAgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBwYXNzIHRoZSBlbnRyeSBhbmQgaXRzIHNpemUuXG5cbkFoYSEgSXQgc2VlbXMgdGhhdCBhbGwgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgc29sZWx5IHJlbGF0ZWQgdG8gaG93IHBhZ2UgdGFibGUgZW50cnkgdmFsdWVzIGFyZSAqcHJpbnRlZCogaW4gZXJyb3IgbWVzc2FnZXMsIGxpa2UgdGhlIG9uZXMgdGhhdCB0cmlnZ2VyIGBCVUc6IEJhZCBwYWdlIG1hcGAuIFRoZSBhaW0gaXMgdG8gaGFuZGxlIGRpZmZlcmVudCBlbnRyeSBzaXplcyAoZS5nLiwgMTI4LWJpdCB2YWx1ZXMpIG1vcmUgY2xlYW5seSBhbmQgcGVyaGFwcyBpbXByb3ZlIGZvcm1hdHRpbmcgY29uc2lzdGVuY3kgZm9yIDMyLzY0IGJpdCBlbnRyaWVzLiBUaGUgbG9naWMgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBfX3ZtX25vcm1hbF9wYWdlYCByZW1haW5zIHVudG91Y2hlZCwgZXhjZXB0IGZvciB0aGUgY2hhbmdlIGluIGhvdyBpdCBwYXNzZXMgdGhlIGVudHJ5IHRvIGBwcmludF9iYWRfcGFnZV9tYXBgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBmb3IgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcy4gYHB0dmFsX2J5dGVzX3RvX2hleF9zdHJgIGlzIGluZGVlZCBhIG5ldyBmdW5jdGlvbiwgYW5kIGBwdHZhbF90b19zdHJgIGlzIGEgbWFjcm8uIGBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlYCB1c2VzIHRoZSBmb3JtYXR0aW5nIGZ1bmN0aW9ucyB3aXRoIGBwcl9hbGVydGAuIGBwcmludF9iYWRfcGFnZV9tYXBgIGFsc28gdXNlcyB0aGVtLiBJbnRlcmVzdGluZ2x5LCBgcHJpbnRfYmFkX3B0ZWAgaGFzIGNoYW5nZWQgZnJvbSBhIG1hY3JvIHRvIGEgc3RhdGljIHZvaWQgZnVuY3Rpb24uIFRoZSBzaWduYXR1cmUgb2YgYF9fdm1fbm9ybWFsX3BhZ2VgIGlzIGNoYW5nZWQuIFRoZSBzaWduYXR1cmVzIG9mIGB2bV9ub3JtYWxfcGFnZWAsIGB2bV9ub3JtYWxfcGFnZV9wbWRgLCBhbmQgYHZtX25vcm1hbF9wYWdlX3B1ZGAgcmVtYWluIHRoZSBzYW1lLCBidXQgdGhlaXIgYm9kaWVzIGFyZSBjaGFuZ2VkIHRvIHBhc3MgYFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpYC5cblxuT2theSwgYnV0IGFyZSB0aGVyZSBhbnkgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3c/IE5vcGUsIHRoaXMgaXMgcHVyZWx5IGFib3V0IGhvdyBlcnJvciByZXBvcnRzIGFyZSBmb3JtYXR0ZWQuIFRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBvbmx5IGV2ZXIgZXhlY3V0ZWQgaW4gZXJyb3IgY2FzZXMuIFRoZSBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIHJldHVybiBOVUxMIG9yIGR1bXAgcGFnZS4gYF9fdm1fbm9ybWFsX3BhZ2VgIHJldHVybnMgTlVMTCwgdGhpcyBwYXJ0IGlzIHVuY2hhbmdlZC4gU28gbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaGVyZS5cblxuTGV0IG1lIGNvbmZpcm0uIFRoZSBwcm9tcHQgc2F5cyB0aGF0IFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHNcIiBzaG91bGQgcmVzdWx0IGluIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4gSXQncyBqdXN0IGltcHJvdmluZyB0aGUgZm9ybWF0dGluZyBvZiBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNwbGF5ZWQgaW4gYHByX2FsZXJ0YC5cblxuSSdsbCBxdWlja2x5IHJldmlldyB0aGUgZGlmZiBvbmUgbGFzdCB0aW1lLiBgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cmAgaXMgZm9ybWF0dGluZy4gYHB0dmFsX3RvX3N0cmAgaXMgZm9ybWF0dGluZy4gYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgIGlzIGZvcm1hdHRpbmcuIGBwcmludF9iYWRfcGFnZV9tYXBgIGlzIGZvcm1hdHRpbmcuIGBwcmludF9iYWRfcHRlYCBpcyBmb3JtYXR0aW5nLCB0aG91Z2ggaXQgYWxzbyBjaGFuZ2VkIHRvIGEgZnVuY3Rpb24uIGBfX3ZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlYCwgYHZtX25vcm1hbF9wYWdlX3BtZGAsIGB2bV9ub3JtYWxfcGFnZV9wdWRgIGFyZSBhbGwganVzdCB1cGRhdGluZyB0aGUgYXJndW1lbnRzIGZvciB0aGUgcHJpbnQuXG5cblllcCwgaXQncyBqdXN0IGRlY29yYXRpdmUgY2hhbmdlcy4gSSdsbCBzZXQtcmVzdWx0cyB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTU0LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjU3OjUyLjYwMzA0MjY0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIGBwcmludF9iYWRfcGFnZV9tYXBgKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCwgYXMgaXQgb25seSBhZmZlY3RzIGxvZ2dpbmcvZGlhZ25vc3RpYyBvdXRwdXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgYHByaW50X2JhZF9wYWdlX21hcGApLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLCBhcyBpdCBvbmx5IGFmZmVjdHMgbG9nZ2luZy9kaWFnbm9zdGljIG91dHB1dC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5m9gx[1] Phase: Running StartedAt: 2026-07-09 18:58:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5m9gx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 18:58:51 +0000 UTC FinishedAt: 2026-07-09 18:59:00 +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,}