Name: series-workflowhx8dw Phase: Failed StartedAt: 2026-07-22 06:53:40 +0000 UTC FinishedAt: 2026-07-22 07:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhx8dw[0] Phase: Succeeded StartedAt: 2026-07-22 06:53:40 +0000 UTC FinishedAt: 2026-07-22 07:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhx8dw[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 06:53:40 +0000 UTC FinishedAt: 2026-07-22 07:24:30 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2IwY2QyYzI0YTc4NTkzYTk2OTQ4ZTM5NmY5M2UwNjEyNzVlMDQzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDA3OjIzOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuaW5kZXggNTA3MTYwNWExYTExN2EuLjBjYTNlMGUxOWIwNzIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDIzICYjNDM7MSwzMiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4mIzQzOyAqIEF1dGhvcjogS3lsZSBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGh5bGliLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIGRlZmluZSBQSFk4ODI0IHRvcCBleHRlbmQgYWRkciBvZmZzZXQgaW50ZXJuYWwgYW5kIGV4dGVybmFsKi9cbiYjNDM7I2RlZmluZSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg1KVxuJiM0MzsjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDQpXG4mIzQzO1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0yOSw2ICYjNDM7MzgsMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4mIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuJiM0MzsgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuJiM0MzsgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0RklCRVIgRXh0ZW5kZWRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKi9cbiYjNDM7XG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzc1LDYgJiM0MzszOTYsMTYgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0VcdFx0XHQoMHgxKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkxcdFx0KDB4ODQpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0tcdFx0R0VOTUFTSygxNSwgMTMpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdEJJVCgxMylcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuJiM0MztcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5Myw2ICYjNDM7NDI0LDExIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9mZnNldDtcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMSw2ICYjNDM7NDY3LDQ2IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXG4mIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjI3LDYgJiM0Mzs3MDMsMTIxMiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvXG4mIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0ZGF0YSB8PSBwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsXG4mIzQzO1x0XHRcdFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4mIzQzO1x0XHRyZXQgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxO1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLFxuJiM0MztcdFx0XHRcdCAgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdC8qIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0IHw9IEJNQ1JfSVNPTEFURTtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXG4mIzQzO1x0XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcbiYjNDM7XHRcdFx0XHQgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCBcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcbiYjNDM7XHRcdFx0XHQgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcbiYjNDM7ICogYW5kIHNkcyBzb2Z0cmVzZXQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdC8qIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuJiM0MztcdFx0Lyogc29mdCByZXNldCAqL1xuJiM0MztcdFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0XHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuJiM0MztcdFx0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkXG4mIzQzO1x0XHRcdChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZFxuJiM0MztcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcbiYjNDM7XHRcdFx0KHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbiYjNDM7XHR1MTYgZGF0YSA9IDA7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldDtcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4mIzQzO1x0XHQvKiByZWFkIGVmdXNlICovXG4mIzQzO1x0XHR2YWxfMSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4mIzQzO1x0XHRpZiAodmFsXzEgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4mIzQzO1x0XHRpZiAodmFsXzIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHR2YWxfMyA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XG4mIzQzO1x0XHRpZiAodmFsXzMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocG9ydCA9PSAwKSB7XG4mIzQzO1x0XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogYW5hbG9nIENEUiAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkgXHUwMDNlXHUwMDNlIDYpO1xuJiM0MztcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSBcdTAwM2VcdTAwM2UgNCk7XG4mIzQzO1x0XHRcdHJldCB8PSB0bXA7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHRcdHRtcCA9ICh2YWxfMyBcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xuJiM0MztcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBTZXJkZXMgTERPICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XG4mIzQzO1x0XHRcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkgXHUwMDNlXHUwMDNlIDIpO1xuJiM0MztcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSBcdTAwM2VcdTAwM2UgNSk7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdFx0ZGF0YSBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4mIzQzO1x0XHRkYXRhIHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4mIzQzO1x0XHRkYXRhIHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0ZGF0YSB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4mIzQzO1x0XHQvKiBwb3dlciBkb3duICovXG4mIzQzO1x0XHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRkYXRhIHw9IEJNQ1JfUERPV047XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBlbmFibGUgbmliYmxlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCBwb3J0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0c2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXHUwMDNlb2Zmc2V0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgfD0gQk1DUl9QRE9XTjtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwb3J0ID09IDApIHtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzODgsIDB4YTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAyLjVHIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIEVNQyBDUyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIEVNQyBSRSovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocG9ydCA9PSAwKSB7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4mIzQzO1x0ZGF0YSB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgZGF0YSk7XG4mIzQzO1x0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKGRhdGEgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZGF0YSB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgZGF0YSk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbnRyKCkgLSBwaHk4ODI0IGludGVycnVwdCBjb25maWd1cmF0aW9uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuJiM0MztcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcG9ydDtcbiYjNDM7XG4mIzQzO1x0c2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGlmICgocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldCkgXHUwMDNjIDIpXG4mIzQzO1x0XHRwb3J0ID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwb3J0ID0gMjtcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMDBcbiYjNDM7XHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgcmV0IFx1MDAyNiAofkJJVCg2KSkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxOVxuJiM0MztcdFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJiMzOTtiMCBsZXZlbCwgMSYjMzk7YjEgcHVsc2VcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE5LCByZXQgfCBCSVQoNSkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcbiYjNDM7XHRcdCAqIHRvcCBleHQgcmVnIDB4YTAxOSB0aW1lcl90aWNrX3NlbCBiaXQ4OjdcbiYjNDM7XHRcdCAqIGJpdDE0OjggcGh5X3B1bHNlX2x0aCBiaXQ4OjcgdGltZXJfdGlja19zZWwgICBwdWxzZSB3aWR0aFxuJiM0MztcdFx0ICogMHgwMDdhXHRcdDB4MDAwMlx0XHQxMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwNjRcdFx0MHgwMDAxXHRcdDFtcyBwdWxzZSB3aWR0aFxuJiM0MztcdFx0ICogMHgwMDRlXHRcdDB4MDAwMFx0XHQxMDBtcyBwdWxzZSB3aWR0aFxuJiM0MztcdFx0ICogMHgwMDA5XHRcdDB4MDAwMFx0XHQxMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxOCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfjB4N2YwMDtcbiYjNDM7XHRcdHJldCB8PSAoMHgwMDA5IFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTgsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+MHgxODA7XG4mIzQzO1x0XHRyZXQgfD0gKDB4MDAwMCBcdTAwM2NcdTAwM2MgNyk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE5LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbiYjNDM7XHRcdCAqIGJpdDExIFBIWTMgMTogcGh5MyBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDEwIFBIWTIgMTogcGh5MiBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDkgIFBIWTEgMTogcGh5MSBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDggIFBIWTAgMTogcGh5MCBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBiaXQ3ICBQSFkzIDE6IHBoeTMgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQ2ICBQSFkyIDE6IHBoeTIgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQ1ICBQSFkxIDE6IHBoeTEgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQ0ICBQSFkwIDE6IHBoeTAgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0MyAgUEhZMyAxOiBwaHkzIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDIgIFBIWTIgMTogcGh5MiBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQxICBQSFkxIDE6IHBoeTEgbGluayB1cCBvY2N1cnMsIDA6IG5vdCBvY2N1clxuJiM0MztcdFx0ICogYml0MCAgUEhZMCAxOiBwaHkwIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWFcbiYjNDM7XHRcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50bl93b2wgcGluIG91dHB1dFxuJiM0MztcdFx0ICogYml0NCBpbnRuX21vZGUgMSYjMzk7YjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCBcdTAwMjY9IH5CSVQoNSk7XG4mIzQzO1x0XHRyZXQgfD0gQklUKDQpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxYSwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2tcbiYjNDM7XHRcdCAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluXG4mIzQzO1x0XHQgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluXG4mIzQzO1x0XHQgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFiKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgfD0gKEJJVChwb3J0ICYjNDM7IDgpIHwgQklUKHBvcnQgJiM0MzsgNCkgfCBCSVQocG9ydCkpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxYiwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCgpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgaGFuZGxlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlycXJldHVybl90IHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbiYjNDM7XHQgKiBiaXQxMSBQSFkzIGludGVycnVwdCAxOiBwaHkzIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0MTAgUEhZMiBpbnRlcnJ1cHQgMTogcGh5MiBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbiYjNDM7XHQgKiBiaXQ4ICBQSFkwIGludGVycnVwdCAxOiBwaHkwIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0NyAgUEhZMyBsaW5rIGRvd24gMTogcGh5MyBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbiYjNDM7XHQgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0NCAgUEhZMCBsaW5rIGRvd24gMTogcGh5MCBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDEgIFBIWTEgbGluayB1cCAxOiBwaHkxIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4ge1xuQEAgLTMwNTksNiAmIzQzOzQzNDEsNDA4IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpIFx1MDAyNlxuJiM0MztcdFx0XHQgICAgIFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvXG4mIzQzOyAqIG9wZXJhdGUuXG4mIzQzOyAqIEBzdGF0dXM6IFRoZSBsaW5rIHN0YXR1cywgaW5jbHVkZSBzcGVlZCwgZHVwbGV4IGFuZCBsaW5rIHN0YXRlLlxuJiM0MzsgKiBAbHBhOiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDEgKHV0cCBvciBmaWJlciBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSxcbiYjNDM7XHRcdFx0XHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRwYWdlIFx1MDAyNj0gWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHBhZ2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuJiM0MztcdCpscGEgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdCpzdGF0dXMgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gISEoKnN0YXR1cyBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rO1xuJiM0MztcdGludCBscGE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcbiYjNDM7XHRsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuJiM0MztcdGlmIChsaW5rIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGxpbms7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMCkpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHVwZGF0ZSBzcGVlZCBcdTAwMjYgZHVwbGV4ICovXG4mIzQzO1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0ICAgICAgIGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfkJNQ1JfUERPV047XG4mIzQzO1x0cmV0IFx1MDAyNj0gfkJNQ1JfSVNPTEFURTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCB8IEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkXG4mIzQzO1x0XHRcdChwaHlkZXYsXG4mIzQzO1x0XHRcdCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZFxuJiM0MztcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbiYjNDM7XHRcdFx0XHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcGh5X2N0cmwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbiYjNDM7XHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuJiM0MztcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcbiYjNDM7XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcJiMzNDttb3RvcmNvbW0saW50ZXJmYWNlLW1vZGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuJiM0MztcdFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZW9mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4mIzQzO1x0XHRcdFx0KGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxuQEAgLTMxNDUsMTMgJiM0Mzs0ODI5LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuJiM0MztcdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1lUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbiYjNDM7XHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2VcdFx0PSB5dDg4MjRfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBHZWlzXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0ZyYW5rXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtLeWxlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMxNjEsNiAmIzQzOzQ4NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjBjZDJjMjRhNzg1OTNhOTY5NDhlMzk2ZjkzZTA2MTI3NWUwNDM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMDc6MjM6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggNTA3MTYwNWExYTExN2EuLjBjYTNlMGUxOWIwNzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCkBAIC0xLDIzICYjNDM7MSwzMiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwogLyoKLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci4KJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4KICAqCiAgKiBBdXRob3I6IFBldGVyIEdlaXMgJmx0O3Bnd2lwZW91dEBnbWFpbC5jb20mZ3Q7CiAgKiBBdXRob3I6IEZyYW5rICZsdDtGcmFuay5TYWVAbW90b3ItY29tbS5jb20mZ3Q7CiYjNDM7ICogQXV0aG9yOiBLeWxlICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDtwaHlsaWIuaCYjMzQ7CiYjNDM7CiYjNDM7LyogZGVmaW5lIFBIWTg4MjQgdG9wIGV4dGVuZCBhZGRyIG9mZnNldCBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwqLwomIzQzOyNkZWZpbmUgSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVCAgICAoNSkKJiM0MzsjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDQpCiYjNDM7CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTEJCTB4MDAwMDAxMGEKICNkZWZpbmUgUEhZX0lEX1lUODUyMQkJMHgwMDAwMDExYQogI2RlZmluZSBQSFlfSURfWVQ4NTIyCQkweDRmNTFlOTI4CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzEJCTB4NGY1MWU5MWIKICNkZWZpbmUgUEhZX0lEX1lUODUzMVMJCTB4NGY1MWU5MWEKICNkZWZpbmUgUEhZX0lEX1lUODgyMQkJMHg0ZjUxZWExOQomIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNAkJMHg0ZjUxZThiOAogLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3CiAgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjksNiAmIzQzOzM4LDE4IEBACiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAomIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlldwomIzQzOyAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CUZJQkVSIFJlZ2lzdGVyIHNwYWNlCiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJVVRQIE1JSQkJCXwJRklCRVIgTUlJCSAgICAgICAgfAomIzQzOyAqIHwJVVRQIE1NRAkJCXwJCQkJfAomIzQzOyAqIHwJVVRQIEV4dGVuZGVkCQl8CUZJQkVSIEV4dGVuZGVkCQl8CiYjNDM7ICogfAlVVFAgVG9wIEV4dGVuZGVkCXwJRklCRVIgVG9wIEV4dGVuZGVkCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAkJCUNvbW1vbiBUb3AgRXh0ZW5kZWQJCQl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqLwomIzQzOwogLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi8KIAogLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtMzc1LDYgJiM0MzszOTYsMTYgQEAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSQkwCiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwCQkxCiAKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0sJCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFCQkJKDB4MSkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRQkJCSgweDApCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTAkJKDB4ODQpCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSwkJR0VOTUFTSygxNSwgMTMpCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSwkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRQkJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkcJCSgweDcpCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTMsNiAmIzQzOzQyNCwxMSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCXU4IHJlZ19wYWdlOwogfTsKIAomIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgewomIzQzOwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTQzMSw2ICYjNDM7NDY3LDQ2IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGUKJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkgICAgICAgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC02MjcsNiAmIzQzOzcwMywxMjEyIEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiBvbGRfcGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofllUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlkYXRhIHw9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCQkgICAgICBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJcmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsCiYjNDM7CQkJCSAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ICZhbXA7PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7CiYjNDM7CQlyZXQgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxOwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLAomIzQzOwkJCQkgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkgewomIzQzOwkJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCS8qIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0IHw9IEJNQ1JfSVNPTEFURTsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJICAgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwomIzQzOwkJLyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi8KJiM0MzsJCXJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkJICAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJCSAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkJICAgICBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLAomIzQzOwkJCQkgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCAmYW1wOz0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLOwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLAomIzQzOwkJCQkgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCQkgIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkvKiBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ICZhbXA7PSB+Qk1DUl9JU09MQVRFOwomIzQzOwkJLyogc29mdCByZXNldCAqLwomIzQzOwkJcmV0IHw9IEJNQ1JfUkVTRVQ7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJCS8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovCiYjNDM7CQlyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJCSAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCQkgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZAomIzQzOwkJCShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkCiYjNDM7CQkJKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHNvZnQgcmVzZXQgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkCiYjNDM7CQkJKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwl1MTYgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wOwomIzQzOwl1MTYgZGF0YSA9IDA7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXBvcnQgPSBwaHlkZXYtJmd0O21kaW8uYWRkciAtIHNoYXJlZF9wcml2LSZndDtvZmZzZXQ7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkgewomIzQzOwkJLyogcmVhZCBlZnVzZSAqLwomIzQzOwkJdmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpOwomIzQzOwkJaWYgKHZhbF8xICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQl2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7CiYjNDM7CQlpZiAodmFsXzIgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTsKJiM0MzsJCWlmICh2YWxfMyAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJaWYgKHBvcnQgPT0gMCkgewomIzQzOwkJCS8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogb3B0aW1pemVkIFZDTyAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBQTEwgbG9jayAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CQkJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNykgfCBCSVQoNikpICZndDsmZ3Q7IDYpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJCQl0bXAgPSAodmFsXzEgJmFtcDsgKEJJVCg1KSB8IEJJVCg0KSkgJmd0OyZndDsgNCk7CiYjNDM7CQkJcmV0IHw9IHRtcDsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwkJCXRtcCA9ICh2YWxfMyAmYW1wOyAoQklUKDEpIHwgQklUKDApKSk7CiYjNDM7CQkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBTZXJkZXMgTERPICovCiYjNDM7CQkJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ICZhbXA7PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7CiYjNDM7CQkJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpICZndDsmZ3Q7IDIpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDQpOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCAmYW1wOz0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTsKJiM0MzsJCQl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkgJmd0OyZndDsgNSk7CiYjNDM7CQkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgOCk7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogb3B0aW1pemVkIFNlcmRlcyBSWCAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBTZXJkZXMgVFggKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzICZndDsgOCAqLwomIzQzOwkJZGF0YSAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJCWRhdGEgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORzsKJiM0MzsJCWRhdGEgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCWRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJaWYgKGRhdGEgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCWRhdGEgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCWRhdGEgfD0gQk1DUl9BTkVOQUJMRTsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9IGVsc2UgaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHsKJiM0MzsJCS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJCWRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJaWYgKGRhdGEgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCWRhdGEgfD0gQk1DUl9QRE9XTjsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogcGxsIGNhbGlicmF0aW9uICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6YXRpb24gdXRwICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBlbmFibGUgbmliYmxlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY2LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY3LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY4LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY5LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgRU1DIENTICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgRU1DIFJFICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSAgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2OwomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCBwb3J0ID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJcG9ydCA9IHBoeWRldi0mZ3Q7bWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtJmd0O29mZnNldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgxLCAweDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSB8PSBCTUNSX1BET1dOOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwb3J0ID09IDApIHsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEyZmEsIDB4ODMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDIuNUcgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdmLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAwMCBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4ZjgsIDB4YjNmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMDAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg3MWYsIDB4MzYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSBNQVUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY3LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIEVNQyBDUyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiBFTUMgUkUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwb3J0ID09IDApIHsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlkYXRhID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTsKJiM0MzsJaWYgKGRhdGEgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlkYXRhICZhbXA7PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7CiYjNDM7CWRhdGEgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCBkYXRhKTsKJiM0MzsJZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSB8PSBCTUNSX1JFU0VUOwomIzQzOwlkYXRhIHw9IEJNQ1JfQU5FTkFCTEU7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSAmYW1wOz0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCBkYXRhKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJcmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfaW50cigpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwlpbnQgcG9ydDsKJiM0MzsKJiM0MzsJc2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpZiAoKHBoeWRldi0mZ3Q7bWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtJmd0O29mZnNldCkgJmx0OyAyKQomIzQzOwkJcG9ydCA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXBvcnQgPSAyOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMDAKJiM0MzsJCSAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwKJiM0MzsJCQkJCSAgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLAomIzQzOwkJCQkJICByZXQgJmFtcDsgKH5CSVQoNikpKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxOQomIzQzOwkJICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJiMzOTtiMCBsZXZlbCwgMSYjMzk7YjEgcHVsc2UKJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTksIHJldCB8IEJJVCg1KSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMTggcGh5X3B1bHNlX2x0aCBiaXQxNDo4CiYjNDM7CQkgKiB0b3AgZXh0IHJlZyAweGEwMTkgdGltZXJfdGlja19zZWwgYml0ODo3CiYjNDM7CQkgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGgKJiM0MzsJCSAqIDB4MDA3YQkJMHgwMDAyCQkxMG1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKiAweDAwNjQJCTB4MDAwMQkJMW1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKiAweDAwNGUJCTB4MDAwMAkJMTAwbXMgcHVsc2Ugd2lkdGgKJiM0MzsJCSAqIDB4MDAwOQkJMHgwMDAwCQkxMG1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxOCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4weDdmMDA7CiYjNDM7CQlyZXQgfD0gKDB4MDAwOSAmbHQ7Jmx0OyA4KTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTgsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTkpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ICZhbXA7PSB+MHgxODA7CiYjNDM7CQlyZXQgfD0gKDB4MDAwMCAmbHQ7Jmx0OyA3KTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTksIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWMgaW50ZXJydXB0IHN0YXRlKFJlYWQgQ2xlYXIpCiYjNDM7CQkgKiBiaXQxMSBQSFkzIDE6IHBoeTMgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQxMCBQSFkyIDE6IHBoeTIgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQ5ICBQSFkxIDE6IHBoeTEgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQ4ICBQSFkwIDE6IHBoeTAgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKgomIzQzOwkJICogYml0NyAgUEhZMyAxOiBwaHkzIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0NiAgUEhZMiAxOiBwaHkyIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0NSAgUEhZMSAxOiBwaHkxIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0NCAgUEhZMCAxOiBwaHkwIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDMgIFBIWTMgMTogcGh5MyBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQyICBQSFkyIDE6IHBoeTIgbGluayB1cCBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0MSAgUEhZMSAxOiBwaHkxIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXIKJiM0MzsJCSAqIGJpdDAgIFBIWTAgMTogcGh5MCBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWEKJiM0MzsJCSAqIGJpdDUgaW50bl93b2xfbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50bl93b2wgcGluIG91dHB1dAomIzQzOwkJICogYml0NCBpbnRuX21vZGUgMSYjMzk7YjEgZW5hYmxlIGludG4gcGluIG91dHB1dAomIzQzOwkJICovCiYjNDM7CQlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ICZhbXA7PSB+QklUKDUpOwomIzQzOwkJcmV0IHw9IEJJVCg0KTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMWEsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2sKJiM0MzsJCSAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW4KJiM0MzsJCSAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpbgomIzQzOwkJICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW4KJiM0MzsJCSAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpbgomIzQzOwkJICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpbgomIzQzOwkJICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluCiYjNDM7CQkgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluCiYjNDM7CQkgKgomIzQzOwkJICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluCiYjNDM7CQkgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW4KJiM0MzsJCSAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW4KJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFiKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCB8PSAoQklUKHBvcnQgJiM0MzsgOCkgfCBCSVQocG9ydCAmIzQzOyA0KSB8IEJJVChwb3J0KSk7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDFiLCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoKSAtIHBoeTg4MjQgaW50ZXJydXB0IGhhbmRsZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB5dDg4MjRfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcikKJiM0MzsJICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQxMCBQSFkyIGludGVycnVwdCAxOiBwaHkyIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ3ICBQSFkzIGxpbmsgZG93biAxOiBwaHkzIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ0ICBQSFkwIGxpbmsgZG93biAxOiBwaHkwIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0MSAgUEhZMSBsaW5rIHVwIDE6IHBoeTEgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzOwlpZiAocmV0ICZndDsgMCkgewomIzQzOwkJcGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpOwomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIElSUV9OT05FOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CkBAIC0zMDU5LDYgJiM0Mzs0MzQxLDQwOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApOwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgJmFtcDsKJiM0MzsJCQkgICAgIFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXG4mIzM0OywKJiM0MzsJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkciwgbGluayk7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8KJiM0MzsgKiBvcGVyYXRlLgomIzQzOyAqIEBzdGF0dXM6IFRoZSBsaW5rIHN0YXR1cywgaW5jbHVkZSBzcGVlZCwgZHVwbGV4IGFuZCBsaW5rIHN0YXRlLgomIzQzOyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDEgKHV0cCBvciBmaWJlciBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsCiYjNDM7CQkJCSAgICBpbnQgKnN0YXR1cywgaW50ICpscGEpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwYWdlICZhbXA7PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHBhZ2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSk7CiYjNDM7CSpscGEgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CSpzdGF0dXMgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSAhISgqc3RhdHVzICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXgKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbms7CiYjNDM7CWludCBscGE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwlwaHlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKJiM0MzsJcGh5ZGV2LSZndDtkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjsKJiM0MzsKJiM0MzsJbGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UsICZhbXA7dmFsLCAmYW1wO2xwYSk7CiYjNDM7CWlmIChsaW5rICZsdDsgMCkKJiM0MzsJCXJldHVybiBsaW5rOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJCXBoeWRldi0mZ3Q7cGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDEwKSk7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDExKSk7CiYjNDM7CiYjNDM7CQkvKiB1cGRhdGUgc3BlZWQgJmFtcDsgZHVwbGV4ICovCiYjNDM7CQl5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CQlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICAgICBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9QRE9XTjsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9JU09MQVRFOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQkgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJCVlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZAomIzQzOwkJCShwaHlkZXYsCiYjNDM7CQkJIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQkgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJCSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkCiYjNDM7CQkJKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBwaHlfY3RybCA9IDA7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCXBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLAomIzQzOwkJCQkgICAgICAgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsCiYjNDM7CQkJCSAgICAgICBwaHlfY3RybCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTsKJiM0MzsJY29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7CiYjNDM7CXByaXYtJmd0O29mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7CiYjNDM7CWlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlJiMzNDssCiYjNDM7CQkJCSAgICAgJmFtcDtpbnRlcmZhY2VfbW9kZV9uYW1lKSkgewomIzQzOwkJaWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCXBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTsKJiM0MzsJCQlwcml2LSZndDtvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUOwomIzQzOwkJfSBlbHNlIGlmICghc3RyY2FzZWNtcAomIzQzOwkJCQkoaW50ZXJmYWNlX21vZGVfbmFtZSwKJiM0MzsJCQkJIHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkgewomIzQzOwkJCXByaXYtJmd0O2ludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMOwomIzQzOwkJCXByaXYtJmd0O29mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7CiYjNDM7CXN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxNDUsMTMgJiM0Mzs0ODI5LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkuY29uZmlnX2ludHIgICAgICAgICAgICA9IHl0ODgyNF9jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0CT0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMTYxLDYgJiM0Mzs0ODYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgRHJpdmVyIGluIGEgRnV6emluZyBDb250ZXh0KioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gSXQgYWRkcyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgcmVhZHMsIHdyaXRlcywgaW5pdGlhbGl6YXRpb24sIHByb2JpbmcsIHRoZSB3b3JrcyDigJMgYW5kIHJlZ2lzdGVycyB0aGUgZHJpdmVyIGZvciBgUEhZX0lEX1lUODgyNGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/JiMzNDsgUEhZIGRyaXZlcnMsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBhcmUgdGllZCB0byBoYXJkd2FyZS4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXkmIzM5O3JlIGdlbmVyYWxseSBub3QgYWNjZXNzaWJsZSB1bmxlc3Mgd2UgaGF2ZSBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyBoaWdobHkgdW5saWtlbHkgZm9yIGEgbmljaGUgUEhZIGxpa2UgdGhpcy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGVtdWxhdGUgc3BlY2lmaWMgUEhZcywgYW5kIEkgZG91YnQgdGhlcmUgaXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gYXZhaWxhYmxlLgoKTm93LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIENvdWxkIHdlIHNvbWVob3cgZnV6eiB0aGUgTURJTyBidXMgaXRzZWxmPyBTeXprYWxsZXIgdHlwaWNhbGx5IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGZ1enogTURJTyBidXNlcyB1bmxlc3MgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQgZHJpdmVyIG9yIGludGVyZmFjZSBleHBsaWNpdGx5IGRlc2lnbmVkIGZvciBpdC4gQnV0IGl0IGRvZXMgZnV6eiBVU0IsIFBDSSwgZXRjLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIE1ESU8gcmVhY2hhYmxlIGluIHRoZSBzYW1lIHdheT8gTXkgaW5zdHJ1Y3Rpb25zIHNheTogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQmIzM5O3MgdGhpbmsgYWJvdXQgaG93IFBIWSBkcml2ZXJzIGFyZSBub3JtYWxseSBhY3RpdmF0ZWQuIFRoZXkmIzM5O3JlIHByb2JlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgcmVnaXN0ZXJzIGEgUEhZIG9uIGFuIE1ESU8gYnVzLiBDYW4gd2UgdHJpZ2dlciB0aGF0IHByb2JpbmcgZnJvbSB1c2VyIHNwYWNlPyBQZXJoYXBzIHRocm91Z2ggYG1kaW9gIG9yIGBwaHlgIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcz8gTm8sIHByb2JpbmcgaXMgYmFzZWQgb24gaGFyZHdhcmUsIHNvIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIHdvcmsuIElzIHRoZXJlIGEgYG1kaW8tbW9ja3VwYCBvciBzaW1pbGFyPyBOby4gV2UgZG8gaGF2ZSBgc3l6X2dlbmV0bGlua2AgaW4gU3l6a2FsbGVyLCBidXQgdGhhdCYjMzk7cyBmb3IgbmV0bGluay4KClNvLCBpcyB0aGVyZSBhbnkgcmVhbGlzdGljLCBoYXJkd2FyZS1pbmRlcGVuZGVudCB3YXkgdG8gZ2V0IHRvIGB5dDg4MjRfcHJvYmVgPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IG5vLiBUaGVyZSYjMzk7cyBubyBvYnZpb3VzIHNvZnR3YXJlIE1ESU8gYnVzLiBJIGNoZWNrZWQgdGhlIGRyaXZlcnMgaW4gYGRyaXZlcnMvbmV0L3BoeS9gIOKAkyBub3RoaW5nIGxpa2UgYW4gYG1kaW8tbW9ja3VwLmNgLiBUaGVyZSYjMzk7cyB0aGUgYGZpeGVkLXBoeWAsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IHByb2JlIHNwZWNpZmljIFBIWSBJRHMuIFdoYXQgYWJvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gRFNBLCBgZHNhX2xvb3BgIG9yIGBkc2FgPyBObywgdGhhdCBpcyBub3QgcmVsYXRlZC4KClRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyLCBwbGFpbiBhbmQgc2ltcGxlLgoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29udGFpbnMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2luY2UgaXQmIzM5O3MgYSBzcGVjaWZpYyBQSFksIHRoZSBNb3RvcmNvbW0gWVQ4ODI0LCBpdCYjMzk7cyBnb2luZyB0byByZXF1aXJlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvbiBhbiBNRElPIGJ1cy4gQ2FuIHdlIGVtdWxhdGUgaXQ/IE5vLCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBQSFkuIFRoZXJlZm9yZSwgaXQmIzM5O3MgdW50b3VjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBkb3VibGUgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byB0cmlnZ2VyIFBIWSBwcm9iaW5nIGZyb20gdXNlcnNwYWNlLiBDYW4geW91IHdyaXRlIHRvIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzLy4uLmA/IE5vLCB5b3UgY2FuJiMzOTt0IGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGRyaXZlci4gRXZlbiBpZiB3ZSBjb3VsZCBjb25qdXJlIGFuIE1ESU8gYnVzLCBmYWtpbmcgdGhlIFBIWSBJRCByZWFkIGZyb20gdGhlIGJ1cyB3b3VsZCBiZSBhIG5pZ2h0bWFyZSB1bmxlc3Mgd2UgaGFkIGEgdXNlci1jb250cm9sbGFibGUgbW9jayBNRElPIGJ1cy4gRG9lcyBMaW51eCBoYXZlIHNvbWV0aGluZyBsaWtlIHRoYXQ/IExldCBtZSBjaGVjayBgZHJpdmVycy9uZXQvcGh5L2AgYWdhaW4uCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZHJpdmVyIGlzIGluYWNjZXNzaWJsZSBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCBpcyB0aGVyZWZvcmUgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNRElPIERyaXZlcnMqKgoKT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gaW50byB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNRElPKSBkcml2ZXJzLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoaXMgZGlyZWN0b3J5IHdpbGwgbGlrZWx5IGhvdXNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGludGVyZmFjaW5nIHdpdGggdmFyaW91cyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBNRElPLWNvbXBsaWFudCBkZXZpY2VzLiBJIGV4cGVjdCB0byBmaW5kIHNvdXJjZSBjb2RlIHRoYXQgZGVmaW5lcyB0aGUgTURJTyBidXMgb3BlcmF0aW9ucywgZGV2aWNlIHByb2JpbmcsIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcywgYW5kIGludGVycnVwdCBoYW5kbGluZyBpZiBhcHBsaWNhYmxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBQSFkgTGFuZHNjYXBlKioKCkhtbSwgSSYjMzk7bSBwb25kZXJpbmcgdGhlIGJyb2FkZXIgc2NvcGUgb2YgYGRyaXZlcnMvbmV0L3BoeS9gLiBJdCYjMzk7cyBub3QganVzdCBhYm91dCBhIHNwZWNpZmljIFBIWSwgYnV0IHRoZSBlbnRpcmUgZWNvc3lzdGVtLCBpc24mIzM5O3QgaXQ/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbmFsaXRpZXMgYmV0d2VlbiB2YXJpb3VzIFBIWSBkcml2ZXJzLiBXaGF0IGFyZSB0aGUgY29yZSBhYnN0cmFjdGlvbnMgdGhleSBsZXZlcmFnZT8gV2hlcmUgYXJlIHRoZSBwYWluIHBvaW50cyBpbiB0aGlzIGFyZWEsIHR5cGljYWxseT8gSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gY29ubmVjdCB0aGlzIGRpcmVjdG9yeSB0byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBBcmUgdGhlcmUgY29tbW9uIGludGVyZmFjZXMgdGhlc2UgUEhZIGRyaXZlcnMgaW1wbGVtZW50PyBIb3cgd2VsbC1kZWZpbmVkIGFyZSB0aGUgZHJpdmVyIEFQSXM/IEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBkaXJlY3RvcnkgaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgbmV0d29yayBkZXZlbG9wbWVudC4gSXQgaXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHBoeXNpY2FsIG1lZGl1bSwgc28gYW55IGltcHJvdmVtZW50cyBvciBpc3N1ZXMgaGVyZSBjYW4gaGF2ZSBhIGNhc2NhZGluZyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIGFyZSBzb21lIGludGVyZXN0aW5nIHRpZGJpdHMgdG8gYmUgZm91bmQgaGVyZSByZWdhcmRpbmcgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eSBhbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBjaGFsbGVuZ2VzIG9mIHBvd2VyIG1hbmFnZW1lbnQgaW4gUEhZIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FkaW4uYyYjMzQ7LAogICAgJiMzNDthZGluMTEwMC5jJiMzNDssCiAgICAmIzM0O2FkaW4xMTQwLXBoeS5jJiMzNDssCiAgICAmIzM0O2Fpcl9hbjg4MDEuYyYjMzQ7LAogICAgJiMzNDthaXJfZW44ODExaC5jJiMzNDssCiAgICAmIzM0O2Fpcl9waHlfbGliLmMmIzM0OywKICAgICYjMzQ7YWlyX3BoeV9saWIuaCYjMzQ7LAogICAgJiMzNDthbWQuYyYjMzQ7LAogICAgJiMzNDthczIxeHh4LmMmIzM0OywKICAgICYjMzQ7YXg4ODc5NmIuYyYjMzQ7LAogICAgJiMzNDtheDg4Nzk2Yl9ydXN0LnJzJiMzNDssCiAgICAmIzM0O2JjbS1jeWdudXMuYyYjMzQ7LAogICAgJiMzNDtiY20tcGh5LWxpYi5jJiMzNDssCiAgICAmIzM0O2JjbS1waHktbGliLmgmIzM0OywKICAgICYjMzQ7YmNtLXBoeS1wdHAuYyYjMzQ7LAogICAgJiMzNDtiY201NDE0MC5jJiMzNDssCiAgICAmIzM0O2JjbTYzeHguYyYjMzQ7LAogICAgJiMzNDtiY203eHh4LmMmIzM0OywKICAgICYjMzQ7YmNtODQ4ODEuYyYjMzQ7LAogICAgJiMzNDtiY204N3h4LmMmIzM0OywKICAgICYjMzQ7YnJvYWRjb20uYyYjMzQ7LAogICAgJiMzNDtjaWNhZGEuYyYjMzQ7LAogICAgJiMzNDtjb3J0aW5hLmMmIzM0OywKICAgICYjMzQ7ZGF2aWNvbS5jJiMzNDssCiAgICAmIzM0O2RwODM2NDAuYyYjMzQ7LAogICAgJiMzNDtkcDgzNjQwX3JlZy5oJiMzNDssCiAgICAmIzM0O2RwODM4MjIuYyYjMzQ7LAogICAgJiMzNDtkcDgzODQ4LmMmIzM0OywKICAgICYjMzQ7ZHA4Mzg2Ny5jJiMzNDssCiAgICAmIzM0O2RwODM4NjkuYyYjMzQ7LAogICAgJiMzNDtkcDgzdGM4MTEuYyYjMzQ7LAogICAgJiMzNDtkcDgzdGQ1MTAuYyYjMzQ7LAogICAgJiMzNDtkcDgzdGc3MjAuYyYjMzQ7LAogICAgJiMzNDtldDEwMTFjLmMmIzM0OywKICAgICYjMzQ7Zml4ZWRfcGh5LmMmIzM0OywKICAgICYjMzQ7aWNwbHVzLmMmIzM0OywKICAgICYjMzQ7aW50ZWwteHdheS5jJiMzNDssCiAgICAmIzM0O2xpbmttb2RlLmMmIzM0OywKICAgICYjMzQ7bHh0LmMmIzM0OywKICAgICYjMzQ7bWFydmVsbC04OHEyeHh4LmMmIzM0OywKICAgICYjMzQ7bWFydmVsbC04OHgyMjIyLmMmIzM0OywKICAgICYjMzQ7bWFydmVsbC5jJiMzNDssCiAgICAmIzM0O21hcnZlbGwxMGcuYyYjMzQ7LAogICAgJiMzNDttZGlvLW9wZW4tYWxsaWFuY2UuaCYjMzQ7LAogICAgJiMzNDttZGlvX2J1cy5jJiMzNDssCiAgICAmIzM0O21kaW9fYnVzX3Byb3ZpZGVyLmMmIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2UuYyYjMzQ7LAogICAgJiMzNDttZGlvX2RldnJlcy5jJiMzNDssCiAgICAmIzM0O21lc29uLWd4bC5jJiMzNDssCiAgICAmIzM0O21pY3JlbC5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcC5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF9yZHNfcHRwLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwX3Jkc19wdHAuaCYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfdDEuYyYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfdDFzLmMmIzM0OywKICAgICYjMzQ7bWlpX3RpbWVzdGFtcGVyLmMmIzM0OywKICAgICYjMzQ7bW90b3Jjb21tLmMmIzM0OywKICAgICYjMzQ7bXhsLTg2MTEwLmMmIzM0OywKICAgICYjMzQ7bXhsLWdweS5jJiMzNDssCiAgICAmIzM0O25hdGlvbmFsLmMmIzM0OywKICAgICYjMzQ7bmNuMjYwMDAuYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHgtbWFjc2VjLmMmIzM0OywKICAgICYjMzQ7bnhwLWM0NS10amExMXh4LmMmIzM0OywKICAgICYjMzQ7bnhwLWM0NS10amExMXh4LmgmIzM0OywKICAgICYjMzQ7bnhwLWNidHguYyYjMzQ7LAogICAgJiMzNDtueHAtdGphMTF4eC5jJiMzNDssCiAgICAmIzM0O29wZW5fYWxsaWFuY2VfaGVscGVycy5jJiMzNDssCiAgICAmIzM0O29wZW5fYWxsaWFuY2VfaGVscGVycy5oJiMzNDssCiAgICAmIzM0O3BoeS1jNDUuYyYjMzQ7LAogICAgJiMzNDtwaHktY2Fwcy5oJiMzNDssCiAgICAmIzM0O3BoeS1jb3JlLmMmIzM0OywKICAgICYjMzQ7cGh5LmMmIzM0OywKICAgICYjMzQ7cGh5X2NhcHMuYyYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlLmMmIzM0OywKICAgICYjMzQ7cGh5X2xlZF90cmlnZ2Vycy5jJiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9sb2d5LmMmIzM0OywKICAgICYjMzQ7cGh5X3BhY2thZ2UuYyYjMzQ7LAogICAgJiMzNDtwaHlfcG9ydC5jJiMzNDssCiAgICAmIzM0O3BoeWxpYi1pbnRlcm5hbC5oJiMzNDssCiAgICAmIzM0O3BoeWxpYi5oJiMzNDssCiAgICAmIzM0O3BoeWxpbmsuYyYjMzQ7LAogICAgJiMzNDtxc2VtaS5jJiMzNDssCiAgICAmIzM0O3F0MjAyNS5ycyYjMzQ7LAogICAgJiMzNDtyb2NrY2hpcC5jJiMzNDssCiAgICAmIzM0O3NmcC1idXMuYyYjMzQ7LAogICAgJiMzNDtzZnAuYyYjMzQ7LAogICAgJiMzNDtzZnAuaCYjMzQ7LAogICAgJiMzNDtzbXNjLmMmIzM0OywKICAgICYjMzQ7c3RlMTBYcC5jJiMzNDssCiAgICAmIzM0O3N0dWJzLmMmIzM0OywKICAgICYjMzQ7c3dwaHkuYyYjMzQ7LAogICAgJiMzNDtzd3BoeS5oJiMzNDssCiAgICAmIzM0O3RlcmFuZXRpY3MuYyYjMzQ7LAogICAgJiMzNDt1UEQ2MDYyMC5jJiMzNDssCiAgICAmIzM0O3ZpdGVzc2UuYyYjMzQ7LAogICAgJiMzNDt4aWxpbnhfZ21paTJyZ21paS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2FxdWFudGlhJiMzNDssCiAgICAmIzM0O21lZGlhdGVrJiMzNDssCiAgICAmIzM0O21zY2MmIzM0OywKICAgICYjMzQ7cWNvbSYjMzQ7LAogICAgJiMzNDtyZWFsdGVrJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk3MQoJCQkJCQkJb3V0cHV0OiA5NQoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIFBIWSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYGZpeGVkX3BoeS5jYCBhbmQgYHN3cGh5LmNgLCBhbmQgaXQmIzM5O3MgYmVjb21lIGNsZWFyIHRoYXQgbmVpdGhlciBvZiB0aGVtIHByb3ZpZGUgYSB3YXkgdG8gaW5zdGFudGlhdGUgYW4gYXJiaXRyYXJ5IFBIWSBkcml2ZXIgYnkgSUQgYW5kIHRoZW4gc3RhcnQgZnV6emluZyBpdHMgcmVnaXN0ZXJzLiBOb3csIHRoZSBgbW90b3Jjb21tLmNgIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgZm9yIE1vdG9yY29tbSBQSFlzLiBJIHNlZSB0aGUgcHJvYmxlbS4gSW4gbXkgdmlydHVhbGl6ZWQgc2V0dXAsIHRoZSBNRElPIGJ1cyBpc24mIzM5O3QgZ29pbmcgdG8gcmVwb3J0IHRoZSBQSFkgSUQgYDB4NGY1MWU4YjhgIOKAkyB0aGF0JiMzOTtzIHRoZSBJRCBmb3IgdGhlIFlUODgyNCBQSFkg4oCTIG1lYW5pbmcgdGhlIGRyaXZlciB3b24mIzM5O3QgZXZlbiBiZSBwcm9iZWQuCgpFdmVuIGlmIEkgdHJpZWQgdG8gZm9yY2UtYmluZCB0aGUgZHJpdmVyIHRvIGEgZHVtbXkgZGV2aWNlLCBJJiMzOTtkIGltbWVkaWF0ZWx5IHJ1biBpbnRvIGFub3RoZXIgd2FsbC4gVGhpcyBkcml2ZXIgaGVhdmlseSByZWxpZXMgb24gcmVhZGluZyBhbmQgd3JpdGluZyBNRElPIHJlZ2lzdGVycywgZnVuY3Rpb25zIGxpa2UgYHl0cGh5X3JlYWRfZXh0YCBhbmQgYHl0cGh5X3dyaXRlX2V4dGAuIFdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCB0aG9zZSBvcGVyYXRpb25zIGFyZSBnb2luZyB0byBmYWlsIHNwZWN0YWN1bGFybHksIHJldHVybmluZyBlaXRoZXIgemVybyBvciBgMHhmZmZmYCwgd2hpY2ggd291bGRuJiMzOTt0IGdpdmUgbWUgYW55IG1lYW5pbmdmdWwgZnV6emluZyByZXN1bHRzLiBUaGVyZSYjMzk7cyBqdXN0IG5vIHdheSB0byBnZXQgdGhpcyBjb2RlIHRvIGV4ZWN1dGUgaW4gdGhpcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIE1vdG9yY29tbSBQSFlzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgUEhZIGRyaXZlciBhbmQgaXRzIGluYWNjZXNzaWJpbGl0eSBpbiBteSBjdXJyZW50IHNldHVwLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MganVzdCBub3QgcHJhY3RpY2FsIG9yIGZlYXNpYmxlIHRvIHRhcmdldCB0aGlzIGNvZGUgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjE3LjU0MjE0NzgwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjI2MDU3NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6MTcuNTQyMTU2MjY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTM4MTI5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YjBjZDJjMjRhNzg1OTNhOTY5NDhlMzk2ZjkzZTA2MTI3NWUwNDM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDA3OjIzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbmluZGV4IDUwNzE2MDVhMWExMTdhLi4wY2EzZTBlMTliMDcyMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSwyMyArMSwzMiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gLypcXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxcbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cXG4gICpcXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgKiBBdXRob3I6IEZyYW5rIFxcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuKyAqIEF1dGhvcjogS3lsZSBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJwaHlsaWIuaFxcXCJcXG4rXFxuKy8qIGRlZmluZSBQSFk4ODI0IHRvcCBleHRlbmQgYWRkciBvZmZzZXQgaW50ZXJuYWwgYW5kIGV4dGVybmFsKi9cXG4rI2RlZmluZSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg1KVxcbisjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDQpXFxuK1xcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcXHRcXHQweDAwMDAwMTBhXFxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXFx0XFx0MHg0ZjUxZTkyOFxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcXHRcXHQweDRmNTFlOTFiXFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVxcdFxcdDB4NGY1MWVhMTlcXG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XFx0XFx0MHg0ZjUxZThiOFxcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4gICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0yOSw2ICszOCwxOCBAQFxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAqL1xcbiBcXG4rLyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3XFxuKyAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFVUUCBNSUlcXHRcXHRcXHR8XFx0RklCRVIgTUlJXFx0ICAgICAgICB8XFxuKyAqIHxcXHRVVFAgTU1EXFx0XFx0XFx0fFxcdFxcdFxcdFxcdHxcXG4rICogfFxcdFVUUCBFeHRlbmRlZFxcdFxcdHxcXHRGSUJFUiBFeHRlbmRlZFxcdFxcdHxcXG4rICogfFxcdFVUUCBUb3AgRXh0ZW5kZWRcXHR8XFx0RklCRVIgVG9wIEV4dGVuZGVkXFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHxcXHRcXHRcXHRDb21tb24gVG9wIEV4dGVuZGVkXFx0XFx0XFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqL1xcbitcXG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cXG4gXFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5AQCAtMzc1LDYgKzM5NiwxNiBAQFxcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcXHQwXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcXHRcXHQxXFxuIFxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRVxcdFxcdFxcdCgweDEpXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFXFx0XFx0XFx0KDB4MClcXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTFxcdFxcdCgweDg0KVxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMTMpXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5Myw2ICs0MjQsMTEgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTQzMSw2ICs0NjcsNDYgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxcbitcXHRcXHRcXHQgICAgICAgdTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC02MjcsNiArNzAzLDEyMTIgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG4gXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvXFxuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcbitcXHRyZXR1cm4gb2xkX3BhZ2UgXFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHR1MTYgZGF0YTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0ZGF0YSA9IG9sZF9wYWdlIFxcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcXG4rXFx0ZGF0YSB8PSBwYWdlO1xcbitcXG4rXFx0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xcbitcXHRcXHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XFxuK1xcdFxcdHJldCB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdC8qIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgfD0gQk1DUl9JU09MQVRFO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCB8PSBCTUNSX1JFU0VUO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFxuK1xcdFxcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXFxuK1xcdFxcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0LyogZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH5CTUNSX0lTT0xBVEU7XFxuK1xcdFxcdC8qIHNvZnQgcmVzZXQgKi9cXG4rXFx0XFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRcXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xcbitcXHRcXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWRcXG4rXFx0XFx0XFx0KHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkXFxuK1xcdFxcdFxcdChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkXFxuK1xcdFxcdFxcdChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFx0dTE2IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0dTE2IGRhdGEgPSAwO1xcbitcXHRpbnQgcG9ydDtcXG4rXFxuK1xcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0cG9ydCA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXFx1MDAzZW9mZnNldDtcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XFxuK1xcdFxcdC8qIHJlYWQgZWZ1c2UgKi9cXG4rXFx0XFx0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xcbitcXHRcXHRpZiAodmFsXzEgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XFxuK1xcdFxcdGlmICh2YWxfMiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcXG4rXFx0XFx0aWYgKHZhbF8zIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0aWYgKHBvcnQgPT0gMCkge1xcbitcXHRcXHRcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0Lyogb3B0aW1pemVkIFZDTyAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSBcXHUwMDNlXFx1MDAzZSA2KTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSBcXHUwMDNlXFx1MDAzZSA0KTtcXG4rXFx0XFx0XFx0cmV0IHw9IHRtcDtcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzMgXFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XFxuK1xcdFxcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIFNlcmRlcyBMRE8gKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcXG4rXFx0XFx0XFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkgXFx1MDAzZVxcdTAwM2UgMik7XFxuK1xcdFxcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcXG4rXFx0XFx0XFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkgXFx1MDAzZVxcdTAwM2UgNSk7XFxuK1xcdFxcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFxcdTAwM2UgOCAqL1xcbitcXHRcXHRkYXRhIFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuK1xcdFxcdGRhdGEgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcXG4rXFx0XFx0ZGF0YSB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdGRhdGEgfD0gQk1DUl9SRVNFVDtcXG4rXFx0XFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fSBlbHNlIGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XFxuK1xcdFxcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdFxcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRkYXRhIHw9IEJNQ1JfUERPV047XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogcGxsIGNhbGlicmF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogZW5hYmxlIG5pYmJsZSAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgcmVnX3NwYWNlKVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCBwb3J0ID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdHUxNiBkYXRhO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVxcdTAwM2VvZmZzZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRkYXRhIHw9IEJNQ1JfUERPV047XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRpZiAocG9ydCA9PSAwKSB7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4Myk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzODgsIDB4YTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGUyLCAweDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDIuNUcgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDEwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMCB0ZW1wYXRlIE1BVSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogRU1DIFJFKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwb3J0ID09IDApIHtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRkYXRhIFxcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcXG4rXFx0ZGF0YSB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIGRhdGEpO1xcbitcXHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKGRhdGEgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGRhdGEgfD0gQk1DUl9SRVNFVDtcXG4rXFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRkYXRhIFxcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcXG4rXFx0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgZGF0YSk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfaW50cigpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XFxuK1xcdGludCBwb3J0O1xcbitcXG4rXFx0c2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpZiAoKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXFx1MDAzZW9mZnNldCkgXFx1MDAzYyAyKVxcbitcXHRcXHRwb3J0ID0gMDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwb3J0ID0gMjtcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkge1xcbitcXHRcXHQvKiB0b3AgZXh0IHJlZyAweGEwMDBcXG4rXFx0XFx0ICogYml0NiBpbnRfcG9sYXJpdHkgMSdiMCBsb3cgYWN0aXZlLCAxJ2IxIGhpZ2ggYWN0aXZlXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJldCBcXHUwMDI2ICh+QklUKDYpKSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcXG4rXFx0XFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJ2IwIGxldmVsLCAxJ2IxIHB1bHNlXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcXG4rXFx0XFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xcbitcXHRcXHQgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDdhXFx0XFx0MHgwMDAyXFx0XFx0MTBtcyBwdWxzZSB3aWR0aFxcbitcXHRcXHQgKiAweDAwNjRcXHRcXHQweDAwMDFcXHRcXHQxbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDRlXFx0XFx0MHgwMDAwXFx0XFx0MTAwbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDA5XFx0XFx0MHgwMDAwXFx0XFx0MTBtcyBwdWxzZSB3aWR0aFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+MHg3ZjAwO1xcbitcXHRcXHRyZXQgfD0gKDB4MDAwOSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOCwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfjB4MTgwO1xcbitcXHRcXHRyZXQgfD0gKDB4MDAwMCBcXHUwMDNjXFx1MDAzYyA3KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcXG4rXFx0XFx0ICogYml0MTEgUEhZMyAxOiBwaHkzIGxpbmsgdXAvZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxcbitcXHRcXHQgKiBiaXQxMCBQSFkyIDE6IHBoeTIgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDkgIFBIWTEgMTogcGh5MSBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcXG4rXFx0XFx0ICogYml0OCAgUEhZMCAxOiBwaHkwIGxpbmsgdXAvZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBiaXQ3ICBQSFkzIDE6IHBoeTMgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDYgIFBIWTIgMTogcGh5MiBsaW5rIGRvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcXG4rXFx0XFx0ICogYml0NSAgUEhZMSAxOiBwaHkxIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxcbitcXHRcXHQgKiBiaXQ0ICBQSFkwIDE6IHBoeTAgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDMgIFBIWTMgMTogcGh5MyBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDIgIFBIWTIgMTogcGh5MiBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDEgIFBIWTEgMTogcGh5MSBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDAgIFBIWTAgMTogcGh5MCBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogdG9wIGV4dCByZWcgMHhhMDFhXFxuK1xcdFxcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJ2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XFxuK1xcdFxcdCAqIGJpdDQgaW50bl9tb2RlIDEnYjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+QklUKDUpO1xcbitcXHRcXHRyZXQgfD0gQklUKDQpO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDFhLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogdG9wIGV4dCByZWcgMHhhMDFiIGludGVycnVwdCBtYXNrXFxuK1xcdFxcdCAqIGJpdDExIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQ3IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQzIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogYml0MTAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluXFxuK1xcdFxcdCAqIGJpdDYgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluXFxuK1xcdFxcdCAqIGJpdDIgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBiaXQ5IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQ1IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQxIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogYml0OCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICogYml0NCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICogYml0MCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWIpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IHw9IChCSVQocG9ydCArIDgpIHwgQklUKHBvcnQgKyA0KSB8IEJJVChwb3J0KSk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMWIsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCgpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgaGFuZGxlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB5dDg4MjRfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxcbitcXHQgKiBiaXQxMSBQSFkzIGludGVycnVwdCAxOiBwaHkzIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0OSAgUEhZMSBpbnRlcnJ1cHQgMTogcGh5MSBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ4ICBQSFkwIGludGVycnVwdCAxOiBwaHkwIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbitcXHRcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXFxuIHtcXG5AQCAtMzA1OSw2ICs0MzQxLDQwOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGxpbmsgPSAwO1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cXG4rICogb3BlcmF0ZS5cXG4rICogQHN0YXR1czogVGhlIGxpbmsgc3RhdHVzLCBpbmNsdWRlIHNwZWVkLCBkdXBsZXggYW5kIGxpbmsgc3RhdGUuXFxuKyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy5cXG4rICpcXG4rICogUmV0dXJuczogMSAodXRwIG9yIGZpYmVyIGxpbmspLDAgKG5vIGxpbmspIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLFxcbitcXHRcXHRcXHRcXHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRwYWdlIFxcdTAwMjY9IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcGFnZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfTFBBKTtcXG4rXFx0KmxwYSA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0KnN0YXR1cyA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9ICEhKCpzdGF0dXMgXFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGxpbms7XFxuK1xcdGludCBscGE7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuK1xcbitcXHRsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFLCBcXHUwMDI2dmFsLCBcXHUwMDI2bHBhKTtcXG4rXFx0aWYgKGxpbmsgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbGluaztcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbGluayA9IDE7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAhIShscGEgXFx1MDAyNiBCSVQoMTApKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFxcdTAwMjYgQklUKDExKSk7XFxuK1xcbitcXHRcXHQvKiB1cGRhdGUgc3BlZWQgXFx1MDAyNiBkdXBsZXggKi9cXG4rXFx0XFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH5CTUNSX1BET1dOO1xcbitcXHRyZXQgXFx1MDAyNj0gfkJNQ1JfSVNPTEFURTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcXG4rXFx0XFx0XFx0KHBoeWRldixcXG4rXFx0XFx0XFx0IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkXFxuK1xcdFxcdFxcdChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcGh5X2N0cmwgPSAwO1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcXG4rXFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwaHlfY3RybCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XFxuK1xcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XFxuK1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcXG4rXFx0cHJpdi1cXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcXG4rXFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXFxcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XFxuK1xcdFxcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXFxuK1xcdFxcdFxcdFxcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcXG4rXFx0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbiBcXHR7XFxuIFxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcXG5AQCAtMzE0NSwxMyArNDgyOSwzMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdFxcdC5zdXNwZW5kXFx0XFx0PSB5dDg4MjFfc3VzcGVuZCxcXG4gXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODIxX3Jlc3VtZSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXFxuK1xcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlXFx0XFx0PSB5dDg4MjRfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LmNvbmZpZ19pbnRyICAgICAgICAgICAgPSB5dDg4MjRfY29uZmlnX2ludHIsXFxuK1xcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCxcXG4rXFx0XFx0LnByb2JlXFx0XFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5hbmVnX2RvbmVcXHRcXHQ9IHl0ODgyNF9hbmVnX2RvbmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxcbitcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyNF9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODI0X3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyNF9yZXN1bWUsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbiBcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEdlaXNcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiRnJhbmtcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiS3lsZVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG5AQCAtMzE2MSw2ICs0ODYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxcbitcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxcbiBcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjE4LjE5Njk0ODMyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3OTcxMjQ3Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YjBjZDJjMjRhNzg1OTNhOTY5NDhlMzk2ZjkzZTA2MTI3NWUwNDM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDc6MjM6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDUwNzE2MDVhMWExMTdhLi4wY2EzZTBlMTliMDcyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5AQCAtMSwyMyArMSwzMiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxuICAqXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cdTAwM2VcbiAgKiBBdXRob3I6IEZyYW5rIFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVx1MDAzZVxuKyAqIEF1dGhvcjogS3lsZSBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwicGh5bGliLmhcIlxuK1xuKy8qIGRlZmluZSBQSFk4ODI0IHRvcCBleHRlbmQgYWRkciBvZmZzZXQgaW50ZXJuYWwgYW5kIGV4dGVybmFsKi9cbisjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDUpXG4rI2RlZmluZSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg0KVxuK1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTI5LDYgKzM4LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuKyAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuKyAqIHxcdFVUUCBNTURcdFx0XHR8XHRcdFx0XHR8XG4rICogfFx0VVRQIEV4dGVuZGVkXHRcdHxcdEZJQkVSIEV4dGVuZGVkXHRcdHxcbisgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqL1xuK1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM3NSw2ICszOTYsMTYgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFXHRcdFx0KDB4MSlcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTFx0XHQoMHg4NClcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLXHRcdEdFTk1BU0soMTUsIDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdEJJVCgxMylcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuK1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzkzLDYgKzQyNCwxMSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbitcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbitcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4rfTtcbitcbiAvKipcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzEsNiArNDY3LDQ2IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuK31cbitcbisvKipcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbitcdFx0XHQgICAgICAgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbit9XG4rXG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjcsNiArNzAzLDEyMTIgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9cbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvbGRfcGFnZTtcbitcbitcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHR1MTYgZGF0YTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbitcdGRhdGEgfD0gcGFnZTtcbitcbitcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcbitcdFx0XHRcdCAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0IFx1MDAyNj0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLO1xuK1x0XHRyZXQgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxO1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsXG4rXHRcdFx0XHQgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHQvKiBpc29sYXRpb24gKi9cbitcdFx0cmV0IHw9IEJNQ1JfSVNPTEFURTtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1xuK1x0XHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuK1x0XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdFx0ICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLFxuK1x0XHRcdFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcbitcdFx0XHRcdCAgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0XHQgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHQvKiBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuK1x0XHQvKiBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdFx0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbitcdFx0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHRcdCAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0fVxuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkXG4rXHRcdFx0KHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWRcbitcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcbitcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZ19zcGFjZSlcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbitcdHUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4rXHR1MTYgZGF0YSA9IDA7XG4rXHRpbnQgcG9ydDtcbitcbitcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXHUwMDNlb2Zmc2V0O1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdC8qIHJlYWQgZWZ1c2UgKi9cbitcdFx0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuK1x0XHRpZiAodmFsXzEgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4rXHRcdGlmICh2YWxfMiBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcbitcdFx0aWYgKHZhbF8zIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBhbmFsb2cgQ0RSICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkgXHUwMDNlXHUwMDNlIDYpO1xuK1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkgXHUwMDNlXHUwMDNlIDQpO1xuK1x0XHRcdHJldCB8PSB0bXA7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHRcdFx0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4rXHRcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIExETyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpIFx1MDAzZVx1MDAzZSAyKTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuK1x0XHRkYXRhIFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbitcdFx0ZGF0YSB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuK1x0XHRkYXRhIHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0XHRpZiAoZGF0YSBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdGRhdGEgfD0gQk1DUl9SRVNFVDtcbitcdFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9IGVsc2UgaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbitcdFx0LyogcG93ZXIgZG93biAqL1xuK1x0XHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdFx0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRkYXRhIHw9IEJNQ1JfUERPV047XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogcGxsIGNhbGlicmF0aW9uICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuKyAqXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcG9ydCA9IDA7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHUxNiBkYXRhO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRhdGEgfD0gQk1DUl9QRE9XTjtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzODgsIDB4YTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAyLjVHIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGM4LCAweGZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiBFTUMgUkUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocG9ydCA9PSAwKSB7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRkYXRhID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTtcbitcdGlmIChkYXRhIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRkYXRhIFx1MDAyNj0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLO1xuK1x0ZGF0YSB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XG4rXHRyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCBkYXRhKTtcbitcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRhdGEgfD0gQk1DUl9SRVNFVDtcbitcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XG4rXHRpZiAoZGF0YSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZGF0YSBcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcbitcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIGRhdGEpO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfaW50cigpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvblxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuK1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuK1x0aW50IHBvcnQ7XG4rXG4rXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpZiAoKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi1cdTAwM2VvZmZzZXQpIFx1MDAzYyAyKVxuK1x0XHRwb3J0ID0gMDtcbitcdGVsc2VcbitcdFx0cG9ydCA9IDI7XG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDAwXG4rXHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEnYjAgbG93IGFjdGl2ZSwgMSdiMSBoaWdoIGFjdGl2ZVxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LFxuK1x0XHRcdFx0XHQgIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyxcbitcdFx0XHRcdFx0ICByZXQgXHUwMDI2ICh+QklUKDYpKSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcbitcdFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJ2IwIGxldmVsLCAxJ2IxIHB1bHNlXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcbitcdFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xuK1x0XHQgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGhcbitcdFx0ICogMHgwMDdhXHRcdDB4MDAwMlx0XHQxMG1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA2NFx0XHQweDAwMDFcdFx0MW1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA0ZVx0XHQweDAwMDBcdFx0MTAwbXMgcHVsc2Ugd2lkdGhcbitcdFx0ICogMHgwMDA5XHRcdDB4MDAwMFx0XHQxMG1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfjB4N2YwMDtcbitcdFx0cmV0IHw9ICgweDAwMDkgXHUwMDNjXHUwMDNjIDgpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE4LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4weDE4MDtcbitcdFx0cmV0IHw9ICgweDAwMDAgXHUwMDNjXHUwMDNjIDcpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE5LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxuK1x0XHQgKiBiaXQxMSBQSFkzIDE6IHBoeTMgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4rXHRcdCAqIGJpdDEwIFBIWTIgMTogcGh5MiBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0OSAgUEhZMSAxOiBwaHkxIGxpbmsgdXAvZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxuK1x0XHQgKiBiaXQ4ICBQSFkwIDE6IHBoeTAgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDcgIFBIWTMgMTogcGh5MyBsaW5rIGRvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0NiAgUEhZMiAxOiBwaHkyIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxuK1x0XHQgKiBiaXQ1ICBQSFkxIDE6IHBoeTEgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4rXHRcdCAqIGJpdDQgIFBIWTAgMTogcGh5MCBsaW5rIGRvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICpcbitcdFx0ICogYml0MyAgUEhZMyAxOiBwaHkzIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0MiAgUEhZMiAxOiBwaHkyIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0MSAgUEhZMSAxOiBwaHkxIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0MCAgUEhZMCAxOiBwaHkwIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICovXG4rXHRcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWFcbitcdFx0ICogYml0NSBpbnRuX3dvbF9tb2RlIDEnYjEgZW5hYmxlIGludG5fd29sIHBpbiBvdXRwdXRcbitcdFx0ICogYml0NCBpbnRuX21vZGUgMSdiMSBlbmFibGUgaW50biBwaW4gb3V0cHV0XG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfkJJVCg1KTtcbitcdFx0cmV0IHw9IEJJVCg0KTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxYSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYiBpbnRlcnJ1cHQgbWFza1xuK1x0XHQgKiBiaXQxMSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0NyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0MyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDEwIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxuK1x0XHQgKiBiaXQ2IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxuK1x0XHQgKiBiaXQyIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cbitcdFx0ICpcbitcdFx0ICogYml0OSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0NSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0MSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDggMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluXG4rXHRcdCAqIGJpdDQgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluXG4rXHRcdCAqIGJpdDAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFiKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCB8PSAoQklUKHBvcnQgKyA4KSB8IEJJVChwb3J0ICsgNCkgfCBCSVQocG9ydCkpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDFiLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoKSAtIHBoeTg4MjQgaW50ZXJydXB0IGhhbmRsZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaXJxcmV0dXJuX3QgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbitcdCAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0MiAgUEhZMiBsaW5rIHVwIDE6IHBoeTIgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuK1x0ICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4ge1xuQEAgLTMwNTksNiArNDM0MSw0MDggQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpIFx1MDAyNlxuK1x0XHRcdCAgICAgWVRQSFlfU1NSX0xJTkspO1xuK1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxuXCIsXG4rXHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvXG4rICogb3BlcmF0ZS5cbisgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cbisgKiBAbHBhOiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNpbmcuXG4rICpcbisgKiBSZXR1cm5zOiAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLFxuK1x0XHRcdFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHBhZ2UgXHUwMDI2PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuK1x0KmxwYSA9IHJldDtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdCpzdGF0dXMgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSAhISgqc3RhdHVzIFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rO1xuK1x0aW50IGxwYTtcbitcdGludCB2YWw7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbitcbitcdGxpbmsgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UsIFx1MDAyNnZhbCwgXHUwMDI2bHBhKTtcbitcdGlmIChsaW5rIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gbGluaztcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTApKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuK1xuK1x0XHQvKiB1cGRhdGUgc3BlZWQgXHUwMDI2IGR1cGxleCAqL1xuK1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfkJNQ1JfUERPV047XG4rXHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgaW50IHJlZ19zcGFjZSlcbit7XG4rXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHRcdCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcbitcdFx0XHQocGh5ZGV2LFxuK1x0XHRcdCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZFxuK1x0XHRcdChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4rXHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4rXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbitcdFx0XHRcdCAgICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXG4rXHRcdFx0XHQgICAgICAgcGh5X2N0cmwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbitcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XG4rXG4rXHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuK1x0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuK1x0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCJtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGVcIixcbitcdFx0XHRcdCAgICAgXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcbitcdFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXG4rXHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcbitcdFx0XHRwcml2LVx1MDAzZW9mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbitcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuK1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbitcdFx0cmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTQ1LDEzICs0ODI5LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbitcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4rXHRcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxuK1x0XHQuaGFuZGxlX2ludGVycnVwdFx0PSB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCxcbitcdFx0LnByb2JlXHRcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXG4rXHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZVx0XHQ9IHl0ODgyNF9hbmVnX2RvbmUsXG4rXHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcbitcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldFx0XHQ9IHl0ODgyNF9zb2Z0X3Jlc2V0LFxuK1x0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyNF9zdXNwZW5kLFxuK1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuK1x0fSxcbiB9O1xuIFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcIik7XG4gTU9EVUxFX0FVVEhPUihcIlBldGVyIEdlaXNcIik7XG4gTU9EVUxFX0FVVEhPUihcIkZyYW5rXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJLeWxlXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMxNjEsNiArNDg2Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbitcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6MTguMTk2OTY0MDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ4MzQxNDcwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIERyaXZlciBpbiBhIEZ1enppbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gSXQgYWRkcyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgcmVhZHMsIHdyaXRlcywgaW5pdGlhbGl6YXRpb24sIHByb2JpbmcsIHRoZSB3b3JrcyDigJMgYW5kIHJlZ2lzdGVycyB0aGUgZHJpdmVyIGZvciBgUEhZX0lEX1lUODgyNGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/XCIgUEhZIGRyaXZlcnMsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBhcmUgdGllZCB0byBoYXJkd2FyZS4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXkncmUgZ2VuZXJhbGx5IG5vdCBhY2Nlc3NpYmxlIHVubGVzcyB3ZSBoYXZlIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXMgaGlnaGx5IHVubGlrZWx5IGZvciBhIG5pY2hlIFBIWSBsaWtlIHRoaXMuIFN5emthbGxlciBkb2Vzbid0IGVtdWxhdGUgc3BlY2lmaWMgUEhZcywgYW5kIEkgZG91YnQgdGhlcmUgaXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gYXZhaWxhYmxlLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gQ291bGQgd2Ugc29tZWhvdyBmdXp6IHRoZSBNRElPIGJ1cyBpdHNlbGY/IFN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBkaXJlY3RseSBmdXp6IE1ESU8gYnVzZXMgdW5sZXNzIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgZHJpdmVyIG9yIGludGVyZmFjZSBleHBsaWNpdGx5IGRlc2lnbmVkIGZvciBpdC4gQnV0IGl0IGRvZXMgZnV6eiBVU0IsIFBDSSwgZXRjLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIE1ESU8gcmVhY2hhYmxlIGluIHRoZSBzYW1lIHdheT8gTXkgaW5zdHJ1Y3Rpb25zIHNheTogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBUaGF0J3MgdGhlIGtleS5cblxuTGV0J3MgdGhpbmsgYWJvdXQgaG93IFBIWSBkcml2ZXJzIGFyZSBub3JtYWxseSBhY3RpdmF0ZWQuIFRoZXkncmUgcHJvYmVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSByZWdpc3RlcnMgYSBQSFkgb24gYW4gTURJTyBidXMuIENhbiB3ZSB0cmlnZ2VyIHRoYXQgcHJvYmluZyBmcm9tIHVzZXIgc3BhY2U/IFBlcmhhcHMgdGhyb3VnaCBgbWRpb2Agb3IgYHBoeWAgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzPyBObywgcHJvYmluZyBpcyBiYXNlZCBvbiBoYXJkd2FyZSwgc28gdGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLiBJcyB0aGVyZSBhIGBtZGlvLW1vY2t1cGAgb3Igc2ltaWxhcj8gTm8uIFdlIGRvIGhhdmUgYHN5el9nZW5ldGxpbmtgIGluIFN5emthbGxlciwgYnV0IHRoYXQncyBmb3IgbmV0bGluay5cblxuU28sIGlzIHRoZXJlIGFueSByZWFsaXN0aWMsIGhhcmR3YXJlLWluZGVwZW5kZW50IHdheSB0byBnZXQgdG8gYHl0ODgyNF9wcm9iZWA/IE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogbm8uIFRoZXJlJ3Mgbm8gb2J2aW91cyBzb2Z0d2FyZSBNRElPIGJ1cy4gSSBjaGVja2VkIHRoZSBkcml2ZXJzIGluIGBkcml2ZXJzL25ldC9waHkvYCDigJMgbm90aGluZyBsaWtlIGFuIGBtZGlvLW1vY2t1cC5jYC4gVGhlcmUncyB0aGUgYGZpeGVkLXBoeWAsIGJ1dCB0aGF0IGRvZXNuJ3QgcHJvYmUgc3BlY2lmaWMgUEhZIElEcy4gV2hhdCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBEU0EsIGBkc2FfbG9vcGAgb3IgYGRzYWA/IE5vLCB0aGF0IGlzIG5vdCByZWxhdGVkLlxuXG5UaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlciwgcGxhaW4gYW5kIHNpbXBsZS5cblxuVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29udGFpbnMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2UgaXQncyBhIHNwZWNpZmljIFBIWSwgdGhlIE1vdG9yY29tbSBZVDg4MjQsIGl0J3MgZ29pbmcgdG8gcmVxdWlyZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb24gYW4gTURJTyBidXMuIENhbiB3ZSBlbXVsYXRlIGl0PyBObywgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBQSFkuIFRoZXJlZm9yZSwgaXQncyB1bnRvdWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlIGNoZWNrIGlmIHRoZXJlJ3MgYW55IHdheSB0byB0cmlnZ2VyIFBIWSBwcm9iaW5nIGZyb20gdXNlcnNwYWNlLiBDYW4geW91IHdyaXRlIHRvIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzLy4uLmA/IE5vLCB5b3UgY2FuJ3QgY3JlYXRlIGFyYml0cmFyeSBNRElPIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBkcml2ZXIuIEV2ZW4gaWYgd2UgY291bGQgY29uanVyZSBhbiBNRElPIGJ1cywgZmFraW5nIHRoZSBQSFkgSUQgcmVhZCBmcm9tIHRoZSBidXMgd291bGQgYmUgYSBuaWdodG1hcmUgdW5sZXNzIHdlIGhhZCBhIHVzZXItY29udHJvbGxhYmxlIG1vY2sgTURJTyBidXMuIERvZXMgTGludXggaGF2ZSBzb21ldGhpbmcgbGlrZSB0aGF0PyBMZXQgbWUgY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9gIGFnYWluLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZHJpdmVyIGlzIGluYWNjZXNzaWJsZSBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCBpcyB0aGVyZWZvcmUgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6NDMuMDMxMTE0MTM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDM3MjgwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNzoyMzo0My4zMjE0OTc2NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM5OTIxNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNRElPIERyaXZlcnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1ESU8pIGRyaXZlcnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhpcyBkaXJlY3Rvcnkgd2lsbCBsaWtlbHkgaG91c2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB2YXJpb3VzIFBIWXMgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVycykgYW5kIE1ESU8tY29tcGxpYW50IGRldmljZXMuIEkgZXhwZWN0IHRvIGZpbmQgc291cmNlIGNvZGUgdGhhdCBkZWZpbmVzIHRoZSBNRElPIGJ1cyBvcGVyYXRpb25zLCBkZXZpY2UgcHJvYmluZywgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzLCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGlmIGFwcGxpY2FibGUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUyNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjQ3LjA2MTQyMTkyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM3NjU0MzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjQ3LjMxNTIxMDM1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDg2NjQ1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUEhZIExhbmRzY2FwZSoqXG5cbkhtbSwgSSdtIHBvbmRlcmluZyB0aGUgYnJvYWRlciBzY29wZSBvZiBgZHJpdmVycy9uZXQvcGh5L2AuIEl0J3Mgbm90IGp1c3QgYWJvdXQgYSBzcGVjaWZpYyBQSFksIGJ1dCB0aGUgZW50aXJlIGVjb3N5c3RlbSwgaXNuJ3QgaXQ/IEknbSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uYWxpdGllcyBiZXR3ZWVuIHZhcmlvdXMgUEhZIGRyaXZlcnMuIFdoYXQgYXJlIHRoZSBjb3JlIGFic3RyYWN0aW9ucyB0aGV5IGxldmVyYWdlPyBXaGVyZSBhcmUgdGhlIHBhaW4gcG9pbnRzIGluIHRoaXMgYXJlYSwgdHlwaWNhbGx5PyBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGNvbm5lY3QgdGhpcyBkaXJlY3RvcnkgdG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gQXJlIHRoZXJlIGNvbW1vbiBpbnRlcmZhY2VzIHRoZXNlIFBIWSBkcml2ZXJzIGltcGxlbWVudD8gSG93IHdlbGwtZGVmaW5lZCBhcmUgdGhlIGRyaXZlciBBUElzPyBJJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBkaXJlY3RvcnkgaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgbmV0d29yayBkZXZlbG9wbWVudC4gSXQgaXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHBoeXNpY2FsIG1lZGl1bSwgc28gYW55IGltcHJvdmVtZW50cyBvciBpc3N1ZXMgaGVyZSBjYW4gaGF2ZSBhIGNhc2NhZGluZyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIGFyZSBzb21lIGludGVyZXN0aW5nIHRpZGJpdHMgdG8gYmUgZm91bmQgaGVyZSByZWdhcmRpbmcgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eSBhbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBjaGFsbGVuZ2VzIG9mIHBvd2VyIG1hbmFnZW1lbnQgaW4gUEhZIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6NTEuNjYzODc3NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWRpbi5jXCIsXG4gICAgXCJhZGluMTEwMC5jXCIsXG4gICAgXCJhZGluMTE0MC1waHkuY1wiLFxuICAgIFwiYWlyX2FuODgwMS5jXCIsXG4gICAgXCJhaXJfZW44ODExaC5jXCIsXG4gICAgXCJhaXJfcGh5X2xpYi5jXCIsXG4gICAgXCJhaXJfcGh5X2xpYi5oXCIsXG4gICAgXCJhbWQuY1wiLFxuICAgIFwiYXMyMXh4eC5jXCIsXG4gICAgXCJheDg4Nzk2Yi5jXCIsXG4gICAgXCJheDg4Nzk2Yl9ydXN0LnJzXCIsXG4gICAgXCJiY20tY3lnbnVzLmNcIixcbiAgICBcImJjbS1waHktbGliLmNcIixcbiAgICBcImJjbS1waHktbGliLmhcIixcbiAgICBcImJjbS1waHktcHRwLmNcIixcbiAgICBcImJjbTU0MTQwLmNcIixcbiAgICBcImJjbTYzeHguY1wiLFxuICAgIFwiYmNtN3h4eC5jXCIsXG4gICAgXCJiY204NDg4MS5jXCIsXG4gICAgXCJiY204N3h4LmNcIixcbiAgICBcImJyb2FkY29tLmNcIixcbiAgICBcImNpY2FkYS5jXCIsXG4gICAgXCJjb3J0aW5hLmNcIixcbiAgICBcImRhdmljb20uY1wiLFxuICAgIFwiZHA4MzY0MC5jXCIsXG4gICAgXCJkcDgzNjQwX3JlZy5oXCIsXG4gICAgXCJkcDgzODIyLmNcIixcbiAgICBcImRwODM4NDguY1wiLFxuICAgIFwiZHA4Mzg2Ny5jXCIsXG4gICAgXCJkcDgzODY5LmNcIixcbiAgICBcImRwODN0YzgxMS5jXCIsXG4gICAgXCJkcDgzdGQ1MTAuY1wiLFxuICAgIFwiZHA4M3RnNzIwLmNcIixcbiAgICBcImV0MTAxMWMuY1wiLFxuICAgIFwiZml4ZWRfcGh5LmNcIixcbiAgICBcImljcGx1cy5jXCIsXG4gICAgXCJpbnRlbC14d2F5LmNcIixcbiAgICBcImxpbmttb2RlLmNcIixcbiAgICBcImx4dC5jXCIsXG4gICAgXCJtYXJ2ZWxsLTg4cTJ4eHguY1wiLFxuICAgIFwibWFydmVsbC04OHgyMjIyLmNcIixcbiAgICBcIm1hcnZlbGwuY1wiLFxuICAgIFwibWFydmVsbDEwZy5jXCIsXG4gICAgXCJtZGlvLW9wZW4tYWxsaWFuY2UuaFwiLFxuICAgIFwibWRpb19idXMuY1wiLFxuICAgIFwibWRpb19idXNfcHJvdmlkZXIuY1wiLFxuICAgIFwibWRpb19kZXZpY2UuY1wiLFxuICAgIFwibWRpb19kZXZyZXMuY1wiLFxuICAgIFwibWVzb24tZ3hsLmNcIixcbiAgICBcIm1pY3JlbC5jXCIsXG4gICAgXCJtaWNyb2NoaXAuY1wiLFxuICAgIFwibWljcm9jaGlwX3Jkc19wdHAuY1wiLFxuICAgIFwibWljcm9jaGlwX3Jkc19wdHAuaFwiLFxuICAgIFwibWljcm9jaGlwX3QxLmNcIixcbiAgICBcIm1pY3JvY2hpcF90MXMuY1wiLFxuICAgIFwibWlpX3RpbWVzdGFtcGVyLmNcIixcbiAgICBcIm1vdG9yY29tbS5jXCIsXG4gICAgXCJteGwtODYxMTAuY1wiLFxuICAgIFwibXhsLWdweS5jXCIsXG4gICAgXCJuYXRpb25hbC5jXCIsXG4gICAgXCJuY24yNjAwMC5jXCIsXG4gICAgXCJueHAtYzQ1LXRqYTExeHgtbWFjc2VjLmNcIixcbiAgICBcIm54cC1jNDUtdGphMTF4eC5jXCIsXG4gICAgXCJueHAtYzQ1LXRqYTExeHguaFwiLFxuICAgIFwibnhwLWNidHguY1wiLFxuICAgIFwibnhwLXRqYTExeHguY1wiLFxuICAgIFwib3Blbl9hbGxpYW5jZV9oZWxwZXJzLmNcIixcbiAgICBcIm9wZW5fYWxsaWFuY2VfaGVscGVycy5oXCIsXG4gICAgXCJwaHktYzQ1LmNcIixcbiAgICBcInBoeS1jYXBzLmhcIixcbiAgICBcInBoeS1jb3JlLmNcIixcbiAgICBcInBoeS5jXCIsXG4gICAgXCJwaHlfY2Fwcy5jXCIsXG4gICAgXCJwaHlfZGV2aWNlLmNcIixcbiAgICBcInBoeV9sZWRfdHJpZ2dlcnMuY1wiLFxuICAgIFwicGh5X2xpbmtfdG9wb2xvZ3kuY1wiLFxuICAgIFwicGh5X3BhY2thZ2UuY1wiLFxuICAgIFwicGh5X3BvcnQuY1wiLFxuICAgIFwicGh5bGliLWludGVybmFsLmhcIixcbiAgICBcInBoeWxpYi5oXCIsXG4gICAgXCJwaHlsaW5rLmNcIixcbiAgICBcInFzZW1pLmNcIixcbiAgICBcInF0MjAyNS5yc1wiLFxuICAgIFwicm9ja2NoaXAuY1wiLFxuICAgIFwic2ZwLWJ1cy5jXCIsXG4gICAgXCJzZnAuY1wiLFxuICAgIFwic2ZwLmhcIixcbiAgICBcInNtc2MuY1wiLFxuICAgIFwic3RlMTBYcC5jXCIsXG4gICAgXCJzdHVicy5jXCIsXG4gICAgXCJzd3BoeS5jXCIsXG4gICAgXCJzd3BoeS5oXCIsXG4gICAgXCJ0ZXJhbmV0aWNzLmNcIixcbiAgICBcInVQRDYwNjIwLmNcIixcbiAgICBcInZpdGVzc2UuY1wiLFxuICAgIFwieGlsaW54X2dtaWkycmdtaWkuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJhcXVhbnRpYVwiLFxuICAgIFwibWVkaWF0ZWtcIixcbiAgICBcIm1zY2NcIixcbiAgICBcInFjb21cIixcbiAgICBcInJlYWx0ZWtcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNzoyMzo1MS42NjQxMDA1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTA0MDQ5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIFBIWSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYGZpeGVkX3BoeS5jYCBhbmQgYHN3cGh5LmNgLCBhbmQgaXQncyBiZWNvbWUgY2xlYXIgdGhhdCBuZWl0aGVyIG9mIHRoZW0gcHJvdmlkZSBhIHdheSB0byBpbnN0YW50aWF0ZSBhbiBhcmJpdHJhcnkgUEhZIGRyaXZlciBieSBJRCBhbmQgdGhlbiBzdGFydCBmdXp6aW5nIGl0cyByZWdpc3RlcnMuIE5vdywgdGhlIGBtb3RvcmNvbW0uY2AgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgTW90b3Jjb21tIFBIWXMuIEkgc2VlIHRoZSBwcm9ibGVtLiBJbiBteSB2aXJ0dWFsaXplZCBzZXR1cCwgdGhlIE1ESU8gYnVzIGlzbid0IGdvaW5nIHRvIHJlcG9ydCB0aGUgUEhZIElEIGAweDRmNTFlOGI4YCDigJMgdGhhdCdzIHRoZSBJRCBmb3IgdGhlIFlUODgyNCBQSFkg4oCTIG1lYW5pbmcgdGhlIGRyaXZlciB3b24ndCBldmVuIGJlIHByb2JlZC5cblxuRXZlbiBpZiBJIHRyaWVkIHRvIGZvcmNlLWJpbmQgdGhlIGRyaXZlciB0byBhIGR1bW15IGRldmljZSwgSSdkIGltbWVkaWF0ZWx5IHJ1biBpbnRvIGFub3RoZXIgd2FsbC4gVGhpcyBkcml2ZXIgaGVhdmlseSByZWxpZXMgb24gcmVhZGluZyBhbmQgd3JpdGluZyBNRElPIHJlZ2lzdGVycywgZnVuY3Rpb25zIGxpa2UgYHl0cGh5X3JlYWRfZXh0YCBhbmQgYHl0cGh5X3dyaXRlX2V4dGAuIFdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCB0aG9zZSBvcGVyYXRpb25zIGFyZSBnb2luZyB0byBmYWlsIHNwZWN0YWN1bGFybHksIHJldHVybmluZyBlaXRoZXIgemVybyBvciBgMHhmZmZmYCwgd2hpY2ggd291bGRuJ3QgZ2l2ZSBtZSBhbnkgbWVhbmluZ2Z1bCBmdXp6aW5nIHJlc3VsdHMuIFRoZXJlJ3MganVzdCBubyB3YXkgdG8gZ2V0IHRoaXMgY29kZSB0byBleGVjdXRlIGluIHRoaXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24gZm9yIHRoZSBNb3RvcmNvbW0gUEhZcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgUEhZIGRyaXZlciBhbmQgaXRzIGluYWNjZXNzaWJpbGl0eSBpbiBteSBjdXJyZW50IHNldHVwLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCdzIGp1c3Qgbm90IHByYWN0aWNhbCBvciBmZWFzaWJsZSB0byB0YXJnZXQgdGhpcyBjb2RlIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NzEsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjI0OjE2LjE2ODE1NjM2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhx8dw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 06:53:40 +0000 UTC FinishedAt: 2026-07-22 07:24:18 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2IwY2QyYzI0YTc4NTkzYTk2OTQ4ZTM5NmY5M2UwNjEyNzVlMDQzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDA3OjIzOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuaW5kZXggNTA3MTYwNWExYTExN2EuLjBjYTNlMGUxOWIwNzIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDIzICYjNDM7MSwzMiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4mIzQzOyAqIEF1dGhvcjogS3lsZSBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGh5bGliLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIGRlZmluZSBQSFk4ODI0IHRvcCBleHRlbmQgYWRkciBvZmZzZXQgaW50ZXJuYWwgYW5kIGV4dGVybmFsKi9cbiYjNDM7I2RlZmluZSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg1KVxuJiM0MzsjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDQpXG4mIzQzO1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0yOSw2ICYjNDM7MzgsMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4mIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuJiM0MzsgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuJiM0MzsgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0RklCRVIgRXh0ZW5kZWRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKi9cbiYjNDM7XG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzc1LDYgJiM0MzszOTYsMTYgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0VcdFx0XHQoMHgxKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkxcdFx0KDB4ODQpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0tcdFx0R0VOTUFTSygxNSwgMTMpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdEJJVCgxMylcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuJiM0MztcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5Myw2ICYjNDM7NDI0LDExIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9mZnNldDtcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMSw2ICYjNDM7NDY3LDQ2IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXG4mIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjI3LDYgJiM0Mzs3MDMsMTIxMiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvXG4mIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0ZGF0YSB8PSBwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsXG4mIzQzO1x0XHRcdFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4mIzQzO1x0XHRyZXQgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxO1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLFxuJiM0MztcdFx0XHRcdCAgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdC8qIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0IHw9IEJNQ1JfSVNPTEFURTtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXG4mIzQzO1x0XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcbiYjNDM7XHRcdFx0XHQgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCBcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcbiYjNDM7XHRcdFx0XHQgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcbiYjNDM7ICogYW5kIHNkcyBzb2Z0cmVzZXQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkge1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdC8qIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuJiM0MztcdFx0Lyogc29mdCByZXNldCAqL1xuJiM0MztcdFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0XHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuJiM0MztcdFx0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkXG4mIzQzO1x0XHRcdChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZFxuJiM0MztcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcbiYjNDM7XHRcdFx0KHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbiYjNDM7XHR1MTYgZGF0YSA9IDA7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldDtcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4mIzQzO1x0XHQvKiByZWFkIGVmdXNlICovXG4mIzQzO1x0XHR2YWxfMSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4mIzQzO1x0XHRpZiAodmFsXzEgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4mIzQzO1x0XHRpZiAodmFsXzIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHR2YWxfMyA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XG4mIzQzO1x0XHRpZiAodmFsXzMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocG9ydCA9PSAwKSB7XG4mIzQzO1x0XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogYW5hbG9nIENEUiAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkgXHUwMDNlXHUwMDNlIDYpO1xuJiM0MztcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSBcdTAwM2VcdTAwM2UgNCk7XG4mIzQzO1x0XHRcdHJldCB8PSB0bXA7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHRcdHRtcCA9ICh2YWxfMyBcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xuJiM0MztcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBTZXJkZXMgTERPICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XG4mIzQzO1x0XHRcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkgXHUwMDNlXHUwMDNlIDIpO1xuJiM0MztcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSBcdTAwM2VcdTAwM2UgNSk7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdFx0ZGF0YSBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4mIzQzO1x0XHRkYXRhIHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4mIzQzO1x0XHRkYXRhIHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0ZGF0YSB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4mIzQzO1x0XHQvKiBwb3dlciBkb3duICovXG4mIzQzO1x0XHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRkYXRhIHw9IEJNQ1JfUERPV047XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBlbmFibGUgbmliYmxlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCBwb3J0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0c2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXHUwMDNlb2Zmc2V0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgfD0gQk1DUl9QRE9XTjtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwb3J0ID09IDApIHtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzODgsIDB4YTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAyLjVHIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAxMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIEVNQyBDUyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIEVNQyBSRSovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocG9ydCA9PSAwKSB7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4mIzQzO1x0ZGF0YSB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgZGF0YSk7XG4mIzQzO1x0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKGRhdGEgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZGF0YSB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGRhdGEgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgZGF0YSk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbnRyKCkgLSBwaHk4ODI0IGludGVycnVwdCBjb25maWd1cmF0aW9uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuJiM0MztcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcG9ydDtcbiYjNDM7XG4mIzQzO1x0c2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGlmICgocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldCkgXHUwMDNjIDIpXG4mIzQzO1x0XHRwb3J0ID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwb3J0ID0gMjtcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMDBcbiYjNDM7XHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgcmV0IFx1MDAyNiAofkJJVCg2KSkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxOVxuJiM0MztcdFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJiMzOTtiMCBsZXZlbCwgMSYjMzk7YjEgcHVsc2VcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE5LCByZXQgfCBCSVQoNSkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcbiYjNDM7XHRcdCAqIHRvcCBleHQgcmVnIDB4YTAxOSB0aW1lcl90aWNrX3NlbCBiaXQ4OjdcbiYjNDM7XHRcdCAqIGJpdDE0OjggcGh5X3B1bHNlX2x0aCBiaXQ4OjcgdGltZXJfdGlja19zZWwgICBwdWxzZSB3aWR0aFxuJiM0MztcdFx0ICogMHgwMDdhXHRcdDB4MDAwMlx0XHQxMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwNjRcdFx0MHgwMDAxXHRcdDFtcyBwdWxzZSB3aWR0aFxuJiM0MztcdFx0ICogMHgwMDRlXHRcdDB4MDAwMFx0XHQxMDBtcyBwdWxzZSB3aWR0aFxuJiM0MztcdFx0ICogMHgwMDA5XHRcdDB4MDAwMFx0XHQxMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxOCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfjB4N2YwMDtcbiYjNDM7XHRcdHJldCB8PSAoMHgwMDA5IFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTgsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+MHgxODA7XG4mIzQzO1x0XHRyZXQgfD0gKDB4MDAwMCBcdTAwM2NcdTAwM2MgNyk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE5LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbiYjNDM7XHRcdCAqIGJpdDExIFBIWTMgMTogcGh5MyBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDEwIFBIWTIgMTogcGh5MiBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDkgIFBIWTEgMTogcGh5MSBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDggIFBIWTAgMTogcGh5MCBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBiaXQ3ICBQSFkzIDE6IHBoeTMgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQ2ICBQSFkyIDE6IHBoeTIgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQ1ICBQSFkxIDE6IHBoeTEgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQ0ICBQSFkwIDE6IHBoeTAgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0MyAgUEhZMyAxOiBwaHkzIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqIGJpdDIgIFBIWTIgMTogcGh5MiBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXG4mIzQzO1x0XHQgKiBiaXQxICBQSFkxIDE6IHBoeTEgbGluayB1cCBvY2N1cnMsIDA6IG5vdCBvY2N1clxuJiM0MztcdFx0ICogYml0MCAgUEhZMCAxOiBwaHkwIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWFcbiYjNDM7XHRcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50bl93b2wgcGluIG91dHB1dFxuJiM0MztcdFx0ICogYml0NCBpbnRuX21vZGUgMSYjMzk7YjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCBcdTAwMjY9IH5CSVQoNSk7XG4mIzQzO1x0XHRyZXQgfD0gQklUKDQpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxYSwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2tcbiYjNDM7XHRcdCAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxuJiM0MztcdFx0ICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluXG4mIzQzO1x0XHQgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluXG4mIzQzO1x0XHQgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFiKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgfD0gKEJJVChwb3J0ICYjNDM7IDgpIHwgQklUKHBvcnQgJiM0MzsgNCkgfCBCSVQocG9ydCkpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxYiwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCgpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgaGFuZGxlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlycXJldHVybl90IHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbiYjNDM7XHQgKiBiaXQxMSBQSFkzIGludGVycnVwdCAxOiBwaHkzIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0MTAgUEhZMiBpbnRlcnJ1cHQgMTogcGh5MiBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbiYjNDM7XHQgKiBiaXQ4ICBQSFkwIGludGVycnVwdCAxOiBwaHkwIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0NyAgUEhZMyBsaW5rIGRvd24gMTogcGh5MyBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbiYjNDM7XHQgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0NCAgUEhZMCBsaW5rIGRvd24gMTogcGh5MCBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDEgIFBIWTEgbGluayB1cCAxOiBwaHkxIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4ge1xuQEAgLTMwNTksNiAmIzQzOzQzNDEsNDA4IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpIFx1MDAyNlxuJiM0MztcdFx0XHQgICAgIFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvXG4mIzQzOyAqIG9wZXJhdGUuXG4mIzQzOyAqIEBzdGF0dXM6IFRoZSBsaW5rIHN0YXR1cywgaW5jbHVkZSBzcGVlZCwgZHVwbGV4IGFuZCBsaW5rIHN0YXRlLlxuJiM0MzsgKiBAbHBhOiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDEgKHV0cCBvciBmaWJlciBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSxcbiYjNDM7XHRcdFx0XHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRwYWdlIFx1MDAyNj0gWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHBhZ2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuJiM0MztcdCpscGEgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdCpzdGF0dXMgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gISEoKnN0YXR1cyBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rO1xuJiM0MztcdGludCBscGE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcbiYjNDM7XHRsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuJiM0MztcdGlmIChsaW5rIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGxpbms7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMCkpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHVwZGF0ZSBzcGVlZCBcdTAwMjYgZHVwbGV4ICovXG4mIzQzO1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0ICAgICAgIGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfkJNQ1JfUERPV047XG4mIzQzO1x0cmV0IFx1MDAyNj0gfkJNQ1JfSVNPTEFURTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCB8IEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkXG4mIzQzO1x0XHRcdChwaHlkZXYsXG4mIzQzO1x0XHRcdCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZFxuJiM0MztcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbiYjNDM7XHRcdFx0XHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcGh5X2N0cmwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbiYjNDM7XHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuJiM0MztcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcbiYjNDM7XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcJiMzNDttb3RvcmNvbW0saW50ZXJmYWNlLW1vZGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuJiM0MztcdFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZW9mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4mIzQzO1x0XHRcdFx0KGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxuQEAgLTMxNDUsMTMgJiM0Mzs0ODI5LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuJiM0MztcdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1lUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbiYjNDM7XHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2VcdFx0PSB5dDg4MjRfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBHZWlzXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0ZyYW5rXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtLeWxlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMxNjEsNiAmIzQzOzQ4NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjBjZDJjMjRhNzg1OTNhOTY5NDhlMzk2ZjkzZTA2MTI3NWUwNDM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMDc6MjM6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggNTA3MTYwNWExYTExN2EuLjBjYTNlMGUxOWIwNzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCkBAIC0xLDIzICYjNDM7MSwzMiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwogLyoKLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci4KJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4KICAqCiAgKiBBdXRob3I6IFBldGVyIEdlaXMgJmx0O3Bnd2lwZW91dEBnbWFpbC5jb20mZ3Q7CiAgKiBBdXRob3I6IEZyYW5rICZsdDtGcmFuay5TYWVAbW90b3ItY29tbS5jb20mZ3Q7CiYjNDM7ICogQXV0aG9yOiBLeWxlICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDtwaHlsaWIuaCYjMzQ7CiYjNDM7CiYjNDM7LyogZGVmaW5lIFBIWTg4MjQgdG9wIGV4dGVuZCBhZGRyIG9mZnNldCBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwqLwomIzQzOyNkZWZpbmUgSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVCAgICAoNSkKJiM0MzsjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDQpCiYjNDM7CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTEJCTB4MDAwMDAxMGEKICNkZWZpbmUgUEhZX0lEX1lUODUyMQkJMHgwMDAwMDExYQogI2RlZmluZSBQSFlfSURfWVQ4NTIyCQkweDRmNTFlOTI4CiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzEJCTB4NGY1MWU5MWIKICNkZWZpbmUgUEhZX0lEX1lUODUzMVMJCTB4NGY1MWU5MWEKICNkZWZpbmUgUEhZX0lEX1lUODgyMQkJMHg0ZjUxZWExOQomIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNAkJMHg0ZjUxZThiOAogLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3CiAgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjksNiAmIzQzOzM4LDE4IEBACiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAomIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlldwomIzQzOyAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CUZJQkVSIFJlZ2lzdGVyIHNwYWNlCiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJVVRQIE1JSQkJCXwJRklCRVIgTUlJCSAgICAgICAgfAomIzQzOyAqIHwJVVRQIE1NRAkJCXwJCQkJfAomIzQzOyAqIHwJVVRQIEV4dGVuZGVkCQl8CUZJQkVSIEV4dGVuZGVkCQl8CiYjNDM7ICogfAlVVFAgVG9wIEV4dGVuZGVkCXwJRklCRVIgVG9wIEV4dGVuZGVkCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAkJCUNvbW1vbiBUb3AgRXh0ZW5kZWQJCQl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqLwomIzQzOwogLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi8KIAogLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtMzc1LDYgJiM0MzszOTYsMTYgQEAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSQkwCiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwCQkxCiAKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0sJCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFCQkJKDB4MSkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRQkJCSgweDApCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTAkJKDB4ODQpCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSwkJR0VOTUFTSygxNSwgMTMpCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSwkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRQkJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkcJCSgweDcpCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTMsNiAmIzQzOzQyNCwxMSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCXU4IHJlZ19wYWdlOwogfTsKIAomIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgewomIzQzOwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTQzMSw2ICYjNDM7NDY3LDQ2IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGUKJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkgICAgICAgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC02MjcsNiAmIzQzOzcwMywxMjEyIEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiBvbGRfcGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofllUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlkYXRhIHw9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCQkgICAgICBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJcmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsCiYjNDM7CQkJCSAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ICZhbXA7PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7CiYjNDM7CQlyZXQgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxOwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLAomIzQzOwkJCQkgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkgewomIzQzOwkJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCS8qIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0IHw9IEJNQ1JfSVNPTEFURTsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJICAgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwomIzQzOwkJLyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi8KJiM0MzsJCXJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkJICAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJCSAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkJICAgICBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLAomIzQzOwkJCQkgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCAmYW1wOz0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLOwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLAomIzQzOwkJCQkgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCQkgIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkvKiBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ICZhbXA7PSB+Qk1DUl9JU09MQVRFOwomIzQzOwkJLyogc29mdCByZXNldCAqLwomIzQzOwkJcmV0IHw9IEJNQ1JfUkVTRVQ7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJCS8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovCiYjNDM7CQlyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJCSAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCQkgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZAomIzQzOwkJCShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkCiYjNDM7CQkJKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHNvZnQgcmVzZXQgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkCiYjNDM7CQkJKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuCiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwl1MTYgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wOwomIzQzOwl1MTYgZGF0YSA9IDA7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXBvcnQgPSBwaHlkZXYtJmd0O21kaW8uYWRkciAtIHNoYXJlZF9wcml2LSZndDtvZmZzZXQ7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkgewomIzQzOwkJLyogcmVhZCBlZnVzZSAqLwomIzQzOwkJdmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpOwomIzQzOwkJaWYgKHZhbF8xICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQl2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7CiYjNDM7CQlpZiAodmFsXzIgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTsKJiM0MzsJCWlmICh2YWxfMyAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJaWYgKHBvcnQgPT0gMCkgewomIzQzOwkJCS8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogb3B0aW1pemVkIFZDTyAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBQTEwgbG9jayAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CQkJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNykgfCBCSVQoNikpICZndDsmZ3Q7IDYpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJCQl0bXAgPSAodmFsXzEgJmFtcDsgKEJJVCg1KSB8IEJJVCg0KSkgJmd0OyZndDsgNCk7CiYjNDM7CQkJcmV0IHw9IHRtcDsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwkJCXRtcCA9ICh2YWxfMyAmYW1wOyAoQklUKDEpIHwgQklUKDApKSk7CiYjNDM7CQkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBTZXJkZXMgTERPICovCiYjNDM7CQkJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ICZhbXA7PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7CiYjNDM7CQkJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpICZndDsmZ3Q7IDIpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDQpOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCAmYW1wOz0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTsKJiM0MzsJCQl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkgJmd0OyZndDsgNSk7CiYjNDM7CQkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgOCk7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogb3B0aW1pemVkIFNlcmRlcyBSWCAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBTZXJkZXMgVFggKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzICZndDsgOCAqLwomIzQzOwkJZGF0YSAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJCWRhdGEgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORzsKJiM0MzsJCWRhdGEgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCWRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJaWYgKGRhdGEgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCWRhdGEgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCWRhdGEgfD0gQk1DUl9BTkVOQUJMRTsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9IGVsc2UgaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHsKJiM0MzsJCS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJCWRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJaWYgKGRhdGEgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCWRhdGEgfD0gQk1DUl9QRE9XTjsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogcGxsIGNhbGlicmF0aW9uICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6YXRpb24gdXRwICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBlbmFibGUgbmliYmxlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY2LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY3LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY4LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY5LCAweDZjNmMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgRU1DIENTICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgRU1DIFJFICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSAgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2OwomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCBwb3J0ID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJcG9ydCA9IHBoeWRldi0mZ3Q7bWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtJmd0O29mZnNldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgxLCAweDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSB8PSBCTUNSX1BET1dOOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwb3J0ID09IDApIHsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEyZmEsIDB4ODMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDIuNUcgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdmLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAwMCBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4ZjgsIDB4YjNmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMDAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg3MWYsIDB4MzYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSBNQVUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY3LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIEVNQyBDUyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiBFTUMgUkUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwb3J0ID09IDApIHsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlkYXRhID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTsKJiM0MzsJaWYgKGRhdGEgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlkYXRhICZhbXA7PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7CiYjNDM7CWRhdGEgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCBkYXRhKTsKJiM0MzsJZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSB8PSBCTUNSX1JFU0VUOwomIzQzOwlkYXRhIHw9IEJNQ1JfQU5FTkFCTEU7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZGF0YSAmYW1wOz0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCBkYXRhKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJcmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfaW50cigpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwlpbnQgcG9ydDsKJiM0MzsKJiM0MzsJc2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpZiAoKHBoeWRldi0mZ3Q7bWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtJmd0O29mZnNldCkgJmx0OyAyKQomIzQzOwkJcG9ydCA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXBvcnQgPSAyOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMDAKJiM0MzsJCSAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwKJiM0MzsJCQkJCSAgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLAomIzQzOwkJCQkJICByZXQgJmFtcDsgKH5CSVQoNikpKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxOQomIzQzOwkJICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJiMzOTtiMCBsZXZlbCwgMSYjMzk7YjEgcHVsc2UKJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTksIHJldCB8IEJJVCg1KSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMTggcGh5X3B1bHNlX2x0aCBiaXQxNDo4CiYjNDM7CQkgKiB0b3AgZXh0IHJlZyAweGEwMTkgdGltZXJfdGlja19zZWwgYml0ODo3CiYjNDM7CQkgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGgKJiM0MzsJCSAqIDB4MDA3YQkJMHgwMDAyCQkxMG1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKiAweDAwNjQJCTB4MDAwMQkJMW1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKiAweDAwNGUJCTB4MDAwMAkJMTAwbXMgcHVsc2Ugd2lkdGgKJiM0MzsJCSAqIDB4MDAwOQkJMHgwMDAwCQkxMG1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxOCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4weDdmMDA7CiYjNDM7CQlyZXQgfD0gKDB4MDAwOSAmbHQ7Jmx0OyA4KTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTgsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTkpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ICZhbXA7PSB+MHgxODA7CiYjNDM7CQlyZXQgfD0gKDB4MDAwMCAmbHQ7Jmx0OyA3KTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMTksIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWMgaW50ZXJydXB0IHN0YXRlKFJlYWQgQ2xlYXIpCiYjNDM7CQkgKiBiaXQxMSBQSFkzIDE6IHBoeTMgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQxMCBQSFkyIDE6IHBoeTIgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQ5ICBQSFkxIDE6IHBoeTEgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQ4ICBQSFkwIDE6IHBoeTAgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKgomIzQzOwkJICogYml0NyAgUEhZMyAxOiBwaHkzIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0NiAgUEhZMiAxOiBwaHkyIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0NSAgUEhZMSAxOiBwaHkxIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0NCAgUEhZMCAxOiBwaHkwIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDMgIFBIWTMgMTogcGh5MyBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKiBiaXQyICBQSFkyIDE6IHBoeTIgbGluayB1cCBvY2N1cnMsIDA6IG5vdCBvY2N1cgomIzQzOwkJICogYml0MSAgUEhZMSAxOiBwaHkxIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXIKJiM0MzsJCSAqIGJpdDAgIFBIWTAgMTogcGh5MCBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWEKJiM0MzsJCSAqIGJpdDUgaW50bl93b2xfbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50bl93b2wgcGluIG91dHB1dAomIzQzOwkJICogYml0NCBpbnRuX21vZGUgMSYjMzk7YjEgZW5hYmxlIGludG4gcGluIG91dHB1dAomIzQzOwkJICovCiYjNDM7CQlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ICZhbXA7PSB+QklUKDUpOwomIzQzOwkJcmV0IHw9IEJJVCg0KTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMWEsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2sKJiM0MzsJCSAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW4KJiM0MzsJCSAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpbgomIzQzOwkJICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW4KJiM0MzsJCSAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpbgomIzQzOwkJICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpbgomIzQzOwkJICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluCiYjNDM7CQkgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluCiYjNDM7CQkgKgomIzQzOwkJICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluCiYjNDM7CQkgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW4KJiM0MzsJCSAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW4KJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFiKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCB8PSAoQklUKHBvcnQgJiM0MzsgOCkgfCBCSVQocG9ydCAmIzQzOyA0KSB8IEJJVChwb3J0KSk7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDFiLCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoKSAtIHBoeTg4MjQgaW50ZXJydXB0IGhhbmRsZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB5dDg4MjRfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcikKJiM0MzsJICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQxMCBQSFkyIGludGVycnVwdCAxOiBwaHkyIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ3ICBQSFkzIGxpbmsgZG93biAxOiBwaHkzIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ0ICBQSFkwIGxpbmsgZG93biAxOiBwaHkwIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0MSAgUEhZMSBsaW5rIHVwIDE6IHBoeTEgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZAomIzQzOwkgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzOwlpZiAocmV0ICZndDsgMCkgewomIzQzOwkJcGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpOwomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIElSUV9OT05FOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CkBAIC0zMDU5LDYgJiM0Mzs0MzQxLDQwOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApOwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgJmFtcDsKJiM0MzsJCQkgICAgIFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXG4mIzM0OywKJiM0MzsJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkciwgbGluayk7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8KJiM0MzsgKiBvcGVyYXRlLgomIzQzOyAqIEBzdGF0dXM6IFRoZSBsaW5rIHN0YXR1cywgaW5jbHVkZSBzcGVlZCwgZHVwbGV4IGFuZCBsaW5rIHN0YXRlLgomIzQzOyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDEgKHV0cCBvciBmaWJlciBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsCiYjNDM7CQkJCSAgICBpbnQgKnN0YXR1cywgaW50ICpscGEpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwYWdlICZhbXA7PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHBhZ2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSk7CiYjNDM7CSpscGEgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CSpzdGF0dXMgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSAhISgqc3RhdHVzICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXgKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbms7CiYjNDM7CWludCBscGE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwlwaHlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKJiM0MzsJcGh5ZGV2LSZndDtkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjsKJiM0MzsKJiM0MzsJbGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UsICZhbXA7dmFsLCAmYW1wO2xwYSk7CiYjNDM7CWlmIChsaW5rICZsdDsgMCkKJiM0MzsJCXJldHVybiBsaW5rOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJCXBoeWRldi0mZ3Q7cGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDEwKSk7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDExKSk7CiYjNDM7CiYjNDM7CQkvKiB1cGRhdGUgc3BlZWQgJmFtcDsgZHVwbGV4ICovCiYjNDM7CQl5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CQlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICAgICBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9QRE9XTjsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9JU09MQVRFOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQkgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJCVlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZAomIzQzOwkJCShwaHlkZXYsCiYjNDM7CQkJIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQkgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJCSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkJWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkCiYjNDM7CQkJKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBwaHlfY3RybCA9IDA7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCXBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLAomIzQzOwkJCQkgICAgICAgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsCiYjNDM7CQkJCSAgICAgICBwaHlfY3RybCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTsKJiM0MzsJY29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7CiYjNDM7CXByaXYtJmd0O29mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7CiYjNDM7CWlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlJiMzNDssCiYjNDM7CQkJCSAgICAgJmFtcDtpbnRlcmZhY2VfbW9kZV9uYW1lKSkgewomIzQzOwkJaWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCXBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTsKJiM0MzsJCQlwcml2LSZndDtvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUOwomIzQzOwkJfSBlbHNlIGlmICghc3RyY2FzZWNtcAomIzQzOwkJCQkoaW50ZXJmYWNlX21vZGVfbmFtZSwKJiM0MzsJCQkJIHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkgewomIzQzOwkJCXByaXYtJmd0O2ludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMOwomIzQzOwkJCXByaXYtJmd0O29mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7CiYjNDM7CXN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxNDUsMTMgJiM0Mzs0ODI5LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkuY29uZmlnX2ludHIgICAgICAgICAgICA9IHl0ODgyNF9jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0CT0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMTYxLDYgJiM0Mzs0ODYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgRHJpdmVyIGluIGEgRnV6emluZyBDb250ZXh0KioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gSXQgYWRkcyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgcmVhZHMsIHdyaXRlcywgaW5pdGlhbGl6YXRpb24sIHByb2JpbmcsIHRoZSB3b3JrcyDigJMgYW5kIHJlZ2lzdGVycyB0aGUgZHJpdmVyIGZvciBgUEhZX0lEX1lUODgyNGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/JiMzNDsgUEhZIGRyaXZlcnMsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBhcmUgdGllZCB0byBoYXJkd2FyZS4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXkmIzM5O3JlIGdlbmVyYWxseSBub3QgYWNjZXNzaWJsZSB1bmxlc3Mgd2UgaGF2ZSBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyBoaWdobHkgdW5saWtlbHkgZm9yIGEgbmljaGUgUEhZIGxpa2UgdGhpcy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGVtdWxhdGUgc3BlY2lmaWMgUEhZcywgYW5kIEkgZG91YnQgdGhlcmUgaXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gYXZhaWxhYmxlLgoKTm93LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIENvdWxkIHdlIHNvbWVob3cgZnV6eiB0aGUgTURJTyBidXMgaXRzZWxmPyBTeXprYWxsZXIgdHlwaWNhbGx5IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGZ1enogTURJTyBidXNlcyB1bmxlc3MgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQgZHJpdmVyIG9yIGludGVyZmFjZSBleHBsaWNpdGx5IGRlc2lnbmVkIGZvciBpdC4gQnV0IGl0IGRvZXMgZnV6eiBVU0IsIFBDSSwgZXRjLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIE1ESU8gcmVhY2hhYmxlIGluIHRoZSBzYW1lIHdheT8gTXkgaW5zdHJ1Y3Rpb25zIHNheTogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQmIzM5O3MgdGhpbmsgYWJvdXQgaG93IFBIWSBkcml2ZXJzIGFyZSBub3JtYWxseSBhY3RpdmF0ZWQuIFRoZXkmIzM5O3JlIHByb2JlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgcmVnaXN0ZXJzIGEgUEhZIG9uIGFuIE1ESU8gYnVzLiBDYW4gd2UgdHJpZ2dlciB0aGF0IHByb2JpbmcgZnJvbSB1c2VyIHNwYWNlPyBQZXJoYXBzIHRocm91Z2ggYG1kaW9gIG9yIGBwaHlgIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcz8gTm8sIHByb2JpbmcgaXMgYmFzZWQgb24gaGFyZHdhcmUsIHNvIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIHdvcmsuIElzIHRoZXJlIGEgYG1kaW8tbW9ja3VwYCBvciBzaW1pbGFyPyBOby4gV2UgZG8gaGF2ZSBgc3l6X2dlbmV0bGlua2AgaW4gU3l6a2FsbGVyLCBidXQgdGhhdCYjMzk7cyBmb3IgbmV0bGluay4KClNvLCBpcyB0aGVyZSBhbnkgcmVhbGlzdGljLCBoYXJkd2FyZS1pbmRlcGVuZGVudCB3YXkgdG8gZ2V0IHRvIGB5dDg4MjRfcHJvYmVgPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IG5vLiBUaGVyZSYjMzk7cyBubyBvYnZpb3VzIHNvZnR3YXJlIE1ESU8gYnVzLiBJIGNoZWNrZWQgdGhlIGRyaXZlcnMgaW4gYGRyaXZlcnMvbmV0L3BoeS9gIOKAkyBub3RoaW5nIGxpa2UgYW4gYG1kaW8tbW9ja3VwLmNgLiBUaGVyZSYjMzk7cyB0aGUgYGZpeGVkLXBoeWAsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IHByb2JlIHNwZWNpZmljIFBIWSBJRHMuIFdoYXQgYWJvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gRFNBLCBgZHNhX2xvb3BgIG9yIGBkc2FgPyBObywgdGhhdCBpcyBub3QgcmVsYXRlZC4KClRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyLCBwbGFpbiBhbmQgc2ltcGxlLgoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29udGFpbnMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2luY2UgaXQmIzM5O3MgYSBzcGVjaWZpYyBQSFksIHRoZSBNb3RvcmNvbW0gWVQ4ODI0LCBpdCYjMzk7cyBnb2luZyB0byByZXF1aXJlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvbiBhbiBNRElPIGJ1cy4gQ2FuIHdlIGVtdWxhdGUgaXQ/IE5vLCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBQSFkuIFRoZXJlZm9yZSwgaXQmIzM5O3MgdW50b3VjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBkb3VibGUgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byB0cmlnZ2VyIFBIWSBwcm9iaW5nIGZyb20gdXNlcnNwYWNlLiBDYW4geW91IHdyaXRlIHRvIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzLy4uLmA/IE5vLCB5b3UgY2FuJiMzOTt0IGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGRyaXZlci4gRXZlbiBpZiB3ZSBjb3VsZCBjb25qdXJlIGFuIE1ESU8gYnVzLCBmYWtpbmcgdGhlIFBIWSBJRCByZWFkIGZyb20gdGhlIGJ1cyB3b3VsZCBiZSBhIG5pZ2h0bWFyZSB1bmxlc3Mgd2UgaGFkIGEgdXNlci1jb250cm9sbGFibGUgbW9jayBNRElPIGJ1cy4gRG9lcyBMaW51eCBoYXZlIHNvbWV0aGluZyBsaWtlIHRoYXQ/IExldCBtZSBjaGVjayBgZHJpdmVycy9uZXQvcGh5L2AgYWdhaW4uCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZHJpdmVyIGlzIGluYWNjZXNzaWJsZSBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCBpcyB0aGVyZWZvcmUgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNRElPIERyaXZlcnMqKgoKT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gaW50byB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNRElPKSBkcml2ZXJzLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoaXMgZGlyZWN0b3J5IHdpbGwgbGlrZWx5IGhvdXNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGludGVyZmFjaW5nIHdpdGggdmFyaW91cyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBNRElPLWNvbXBsaWFudCBkZXZpY2VzLiBJIGV4cGVjdCB0byBmaW5kIHNvdXJjZSBjb2RlIHRoYXQgZGVmaW5lcyB0aGUgTURJTyBidXMgb3BlcmF0aW9ucywgZGV2aWNlIHByb2JpbmcsIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcywgYW5kIGludGVycnVwdCBoYW5kbGluZyBpZiBhcHBsaWNhYmxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBQSFkgTGFuZHNjYXBlKioKCkhtbSwgSSYjMzk7bSBwb25kZXJpbmcgdGhlIGJyb2FkZXIgc2NvcGUgb2YgYGRyaXZlcnMvbmV0L3BoeS9gLiBJdCYjMzk7cyBub3QganVzdCBhYm91dCBhIHNwZWNpZmljIFBIWSwgYnV0IHRoZSBlbnRpcmUgZWNvc3lzdGVtLCBpc24mIzM5O3QgaXQ/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbmFsaXRpZXMgYmV0d2VlbiB2YXJpb3VzIFBIWSBkcml2ZXJzLiBXaGF0IGFyZSB0aGUgY29yZSBhYnN0cmFjdGlvbnMgdGhleSBsZXZlcmFnZT8gV2hlcmUgYXJlIHRoZSBwYWluIHBvaW50cyBpbiB0aGlzIGFyZWEsIHR5cGljYWxseT8gSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gY29ubmVjdCB0aGlzIGRpcmVjdG9yeSB0byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBBcmUgdGhlcmUgY29tbW9uIGludGVyZmFjZXMgdGhlc2UgUEhZIGRyaXZlcnMgaW1wbGVtZW50PyBIb3cgd2VsbC1kZWZpbmVkIGFyZSB0aGUgZHJpdmVyIEFQSXM/IEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBkaXJlY3RvcnkgaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgbmV0d29yayBkZXZlbG9wbWVudC4gSXQgaXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHBoeXNpY2FsIG1lZGl1bSwgc28gYW55IGltcHJvdmVtZW50cyBvciBpc3N1ZXMgaGVyZSBjYW4gaGF2ZSBhIGNhc2NhZGluZyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIGFyZSBzb21lIGludGVyZXN0aW5nIHRpZGJpdHMgdG8gYmUgZm91bmQgaGVyZSByZWdhcmRpbmcgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eSBhbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBjaGFsbGVuZ2VzIG9mIHBvd2VyIG1hbmFnZW1lbnQgaW4gUEhZIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FkaW4uYyYjMzQ7LAogICAgJiMzNDthZGluMTEwMC5jJiMzNDssCiAgICAmIzM0O2FkaW4xMTQwLXBoeS5jJiMzNDssCiAgICAmIzM0O2Fpcl9hbjg4MDEuYyYjMzQ7LAogICAgJiMzNDthaXJfZW44ODExaC5jJiMzNDssCiAgICAmIzM0O2Fpcl9waHlfbGliLmMmIzM0OywKICAgICYjMzQ7YWlyX3BoeV9saWIuaCYjMzQ7LAogICAgJiMzNDthbWQuYyYjMzQ7LAogICAgJiMzNDthczIxeHh4LmMmIzM0OywKICAgICYjMzQ7YXg4ODc5NmIuYyYjMzQ7LAogICAgJiMzNDtheDg4Nzk2Yl9ydXN0LnJzJiMzNDssCiAgICAmIzM0O2JjbS1jeWdudXMuYyYjMzQ7LAogICAgJiMzNDtiY20tcGh5LWxpYi5jJiMzNDssCiAgICAmIzM0O2JjbS1waHktbGliLmgmIzM0OywKICAgICYjMzQ7YmNtLXBoeS1wdHAuYyYjMzQ7LAogICAgJiMzNDtiY201NDE0MC5jJiMzNDssCiAgICAmIzM0O2JjbTYzeHguYyYjMzQ7LAogICAgJiMzNDtiY203eHh4LmMmIzM0OywKICAgICYjMzQ7YmNtODQ4ODEuYyYjMzQ7LAogICAgJiMzNDtiY204N3h4LmMmIzM0OywKICAgICYjMzQ7YnJvYWRjb20uYyYjMzQ7LAogICAgJiMzNDtjaWNhZGEuYyYjMzQ7LAogICAgJiMzNDtjb3J0aW5hLmMmIzM0OywKICAgICYjMzQ7ZGF2aWNvbS5jJiMzNDssCiAgICAmIzM0O2RwODM2NDAuYyYjMzQ7LAogICAgJiMzNDtkcDgzNjQwX3JlZy5oJiMzNDssCiAgICAmIzM0O2RwODM4MjIuYyYjMzQ7LAogICAgJiMzNDtkcDgzODQ4LmMmIzM0OywKICAgICYjMzQ7ZHA4Mzg2Ny5jJiMzNDssCiAgICAmIzM0O2RwODM4NjkuYyYjMzQ7LAogICAgJiMzNDtkcDgzdGM4MTEuYyYjMzQ7LAogICAgJiMzNDtkcDgzdGQ1MTAuYyYjMzQ7LAogICAgJiMzNDtkcDgzdGc3MjAuYyYjMzQ7LAogICAgJiMzNDtldDEwMTFjLmMmIzM0OywKICAgICYjMzQ7Zml4ZWRfcGh5LmMmIzM0OywKICAgICYjMzQ7aWNwbHVzLmMmIzM0OywKICAgICYjMzQ7aW50ZWwteHdheS5jJiMzNDssCiAgICAmIzM0O2xpbmttb2RlLmMmIzM0OywKICAgICYjMzQ7bHh0LmMmIzM0OywKICAgICYjMzQ7bWFydmVsbC04OHEyeHh4LmMmIzM0OywKICAgICYjMzQ7bWFydmVsbC04OHgyMjIyLmMmIzM0OywKICAgICYjMzQ7bWFydmVsbC5jJiMzNDssCiAgICAmIzM0O21hcnZlbGwxMGcuYyYjMzQ7LAogICAgJiMzNDttZGlvLW9wZW4tYWxsaWFuY2UuaCYjMzQ7LAogICAgJiMzNDttZGlvX2J1cy5jJiMzNDssCiAgICAmIzM0O21kaW9fYnVzX3Byb3ZpZGVyLmMmIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2UuYyYjMzQ7LAogICAgJiMzNDttZGlvX2RldnJlcy5jJiMzNDssCiAgICAmIzM0O21lc29uLWd4bC5jJiMzNDssCiAgICAmIzM0O21pY3JlbC5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcC5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF9yZHNfcHRwLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwX3Jkc19wdHAuaCYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfdDEuYyYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfdDFzLmMmIzM0OywKICAgICYjMzQ7bWlpX3RpbWVzdGFtcGVyLmMmIzM0OywKICAgICYjMzQ7bW90b3Jjb21tLmMmIzM0OywKICAgICYjMzQ7bXhsLTg2MTEwLmMmIzM0OywKICAgICYjMzQ7bXhsLWdweS5jJiMzNDssCiAgICAmIzM0O25hdGlvbmFsLmMmIzM0OywKICAgICYjMzQ7bmNuMjYwMDAuYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHgtbWFjc2VjLmMmIzM0OywKICAgICYjMzQ7bnhwLWM0NS10amExMXh4LmMmIzM0OywKICAgICYjMzQ7bnhwLWM0NS10amExMXh4LmgmIzM0OywKICAgICYjMzQ7bnhwLWNidHguYyYjMzQ7LAogICAgJiMzNDtueHAtdGphMTF4eC5jJiMzNDssCiAgICAmIzM0O29wZW5fYWxsaWFuY2VfaGVscGVycy5jJiMzNDssCiAgICAmIzM0O29wZW5fYWxsaWFuY2VfaGVscGVycy5oJiMzNDssCiAgICAmIzM0O3BoeS1jNDUuYyYjMzQ7LAogICAgJiMzNDtwaHktY2Fwcy5oJiMzNDssCiAgICAmIzM0O3BoeS1jb3JlLmMmIzM0OywKICAgICYjMzQ7cGh5LmMmIzM0OywKICAgICYjMzQ7cGh5X2NhcHMuYyYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlLmMmIzM0OywKICAgICYjMzQ7cGh5X2xlZF90cmlnZ2Vycy5jJiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9sb2d5LmMmIzM0OywKICAgICYjMzQ7cGh5X3BhY2thZ2UuYyYjMzQ7LAogICAgJiMzNDtwaHlfcG9ydC5jJiMzNDssCiAgICAmIzM0O3BoeWxpYi1pbnRlcm5hbC5oJiMzNDssCiAgICAmIzM0O3BoeWxpYi5oJiMzNDssCiAgICAmIzM0O3BoeWxpbmsuYyYjMzQ7LAogICAgJiMzNDtxc2VtaS5jJiMzNDssCiAgICAmIzM0O3F0MjAyNS5ycyYjMzQ7LAogICAgJiMzNDtyb2NrY2hpcC5jJiMzNDssCiAgICAmIzM0O3NmcC1idXMuYyYjMzQ7LAogICAgJiMzNDtzZnAuYyYjMzQ7LAogICAgJiMzNDtzZnAuaCYjMzQ7LAogICAgJiMzNDtzbXNjLmMmIzM0OywKICAgICYjMzQ7c3RlMTBYcC5jJiMzNDssCiAgICAmIzM0O3N0dWJzLmMmIzM0OywKICAgICYjMzQ7c3dwaHkuYyYjMzQ7LAogICAgJiMzNDtzd3BoeS5oJiMzNDssCiAgICAmIzM0O3RlcmFuZXRpY3MuYyYjMzQ7LAogICAgJiMzNDt1UEQ2MDYyMC5jJiMzNDssCiAgICAmIzM0O3ZpdGVzc2UuYyYjMzQ7LAogICAgJiMzNDt4aWxpbnhfZ21paTJyZ21paS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2FxdWFudGlhJiMzNDssCiAgICAmIzM0O21lZGlhdGVrJiMzNDssCiAgICAmIzM0O21zY2MmIzM0OywKICAgICYjMzQ7cWNvbSYjMzQ7LAogICAgJiMzNDtyZWFsdGVrJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk3MQoJCQkJCQkJb3V0cHV0OiA5NQoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIFBIWSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYGZpeGVkX3BoeS5jYCBhbmQgYHN3cGh5LmNgLCBhbmQgaXQmIzM5O3MgYmVjb21lIGNsZWFyIHRoYXQgbmVpdGhlciBvZiB0aGVtIHByb3ZpZGUgYSB3YXkgdG8gaW5zdGFudGlhdGUgYW4gYXJiaXRyYXJ5IFBIWSBkcml2ZXIgYnkgSUQgYW5kIHRoZW4gc3RhcnQgZnV6emluZyBpdHMgcmVnaXN0ZXJzLiBOb3csIHRoZSBgbW90b3Jjb21tLmNgIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgZm9yIE1vdG9yY29tbSBQSFlzLiBJIHNlZSB0aGUgcHJvYmxlbS4gSW4gbXkgdmlydHVhbGl6ZWQgc2V0dXAsIHRoZSBNRElPIGJ1cyBpc24mIzM5O3QgZ29pbmcgdG8gcmVwb3J0IHRoZSBQSFkgSUQgYDB4NGY1MWU4YjhgIOKAkyB0aGF0JiMzOTtzIHRoZSBJRCBmb3IgdGhlIFlUODgyNCBQSFkg4oCTIG1lYW5pbmcgdGhlIGRyaXZlciB3b24mIzM5O3QgZXZlbiBiZSBwcm9iZWQuCgpFdmVuIGlmIEkgdHJpZWQgdG8gZm9yY2UtYmluZCB0aGUgZHJpdmVyIHRvIGEgZHVtbXkgZGV2aWNlLCBJJiMzOTtkIGltbWVkaWF0ZWx5IHJ1biBpbnRvIGFub3RoZXIgd2FsbC4gVGhpcyBkcml2ZXIgaGVhdmlseSByZWxpZXMgb24gcmVhZGluZyBhbmQgd3JpdGluZyBNRElPIHJlZ2lzdGVycywgZnVuY3Rpb25zIGxpa2UgYHl0cGh5X3JlYWRfZXh0YCBhbmQgYHl0cGh5X3dyaXRlX2V4dGAuIFdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCB0aG9zZSBvcGVyYXRpb25zIGFyZSBnb2luZyB0byBmYWlsIHNwZWN0YWN1bGFybHksIHJldHVybmluZyBlaXRoZXIgemVybyBvciBgMHhmZmZmYCwgd2hpY2ggd291bGRuJiMzOTt0IGdpdmUgbWUgYW55IG1lYW5pbmdmdWwgZnV6emluZyByZXN1bHRzLiBUaGVyZSYjMzk7cyBqdXN0IG5vIHdheSB0byBnZXQgdGhpcyBjb2RlIHRvIGV4ZWN1dGUgaW4gdGhpcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIE1vdG9yY29tbSBQSFlzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgUEhZIGRyaXZlciBhbmQgaXRzIGluYWNjZXNzaWJpbGl0eSBpbiBteSBjdXJyZW50IHNldHVwLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MganVzdCBub3QgcHJhY3RpY2FsIG9yIGZlYXNpYmxlIHRvIHRhcmdldCB0aGlzIGNvZGUgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjE3LjU0MjE0NzgwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjI2MDU3NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6MTcuNTQyMTU2MjY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTM4MTI5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YjBjZDJjMjRhNzg1OTNhOTY5NDhlMzk2ZjkzZTA2MTI3NWUwNDM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDA3OjIzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbmluZGV4IDUwNzE2MDVhMWExMTdhLi4wY2EzZTBlMTliMDcyMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSwyMyArMSwzMiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gLypcXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxcbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cXG4gICpcXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgKiBBdXRob3I6IEZyYW5rIFxcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuKyAqIEF1dGhvcjogS3lsZSBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJwaHlsaWIuaFxcXCJcXG4rXFxuKy8qIGRlZmluZSBQSFk4ODI0IHRvcCBleHRlbmQgYWRkciBvZmZzZXQgaW50ZXJuYWwgYW5kIGV4dGVybmFsKi9cXG4rI2RlZmluZSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg1KVxcbisjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDQpXFxuK1xcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcXHRcXHQweDAwMDAwMTBhXFxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXFx0XFx0MHg0ZjUxZTkyOFxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcXHRcXHQweDRmNTFlOTFiXFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVxcdFxcdDB4NGY1MWVhMTlcXG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XFx0XFx0MHg0ZjUxZThiOFxcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4gICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0yOSw2ICszOCwxOCBAQFxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAqL1xcbiBcXG4rLyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3XFxuKyAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFVUUCBNSUlcXHRcXHRcXHR8XFx0RklCRVIgTUlJXFx0ICAgICAgICB8XFxuKyAqIHxcXHRVVFAgTU1EXFx0XFx0XFx0fFxcdFxcdFxcdFxcdHxcXG4rICogfFxcdFVUUCBFeHRlbmRlZFxcdFxcdHxcXHRGSUJFUiBFeHRlbmRlZFxcdFxcdHxcXG4rICogfFxcdFVUUCBUb3AgRXh0ZW5kZWRcXHR8XFx0RklCRVIgVG9wIEV4dGVuZGVkXFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHxcXHRcXHRcXHRDb21tb24gVG9wIEV4dGVuZGVkXFx0XFx0XFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqL1xcbitcXG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cXG4gXFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5AQCAtMzc1LDYgKzM5NiwxNiBAQFxcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcXHQwXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcXHRcXHQxXFxuIFxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRVxcdFxcdFxcdCgweDEpXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFXFx0XFx0XFx0KDB4MClcXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTFxcdFxcdCgweDg0KVxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMTMpXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5Myw2ICs0MjQsMTEgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTQzMSw2ICs0NjcsNDYgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxcbitcXHRcXHRcXHQgICAgICAgdTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC02MjcsNiArNzAzLDEyMTIgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG4gXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvXFxuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcbitcXHRyZXR1cm4gb2xkX3BhZ2UgXFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHR1MTYgZGF0YTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0ZGF0YSA9IG9sZF9wYWdlIFxcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcXG4rXFx0ZGF0YSB8PSBwYWdlO1xcbitcXG4rXFx0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xcbitcXHRcXHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XFxuK1xcdFxcdHJldCB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdC8qIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgfD0gQk1DUl9JU09MQVRFO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCB8PSBCTUNSX1JFU0VUO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFxuK1xcdFxcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXFxuK1xcdFxcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0LyogZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH5CTUNSX0lTT0xBVEU7XFxuK1xcdFxcdC8qIHNvZnQgcmVzZXQgKi9cXG4rXFx0XFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRcXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xcbitcXHRcXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWRcXG4rXFx0XFx0XFx0KHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkXFxuK1xcdFxcdFxcdChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkXFxuK1xcdFxcdFxcdChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFx0dTE2IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0dTE2IGRhdGEgPSAwO1xcbitcXHRpbnQgcG9ydDtcXG4rXFxuK1xcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0cG9ydCA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXFx1MDAzZW9mZnNldDtcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XFxuK1xcdFxcdC8qIHJlYWQgZWZ1c2UgKi9cXG4rXFx0XFx0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xcbitcXHRcXHRpZiAodmFsXzEgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XFxuK1xcdFxcdGlmICh2YWxfMiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcXG4rXFx0XFx0aWYgKHZhbF8zIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0aWYgKHBvcnQgPT0gMCkge1xcbitcXHRcXHRcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0Lyogb3B0aW1pemVkIFZDTyAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSBcXHUwMDNlXFx1MDAzZSA2KTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSBcXHUwMDNlXFx1MDAzZSA0KTtcXG4rXFx0XFx0XFx0cmV0IHw9IHRtcDtcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzMgXFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XFxuK1xcdFxcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIFNlcmRlcyBMRE8gKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcXG4rXFx0XFx0XFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkgXFx1MDAzZVxcdTAwM2UgMik7XFxuK1xcdFxcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcXG4rXFx0XFx0XFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkgXFx1MDAzZVxcdTAwM2UgNSk7XFxuK1xcdFxcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFxcdTAwM2UgOCAqL1xcbitcXHRcXHRkYXRhIFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuK1xcdFxcdGRhdGEgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcXG4rXFx0XFx0ZGF0YSB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdGRhdGEgfD0gQk1DUl9SRVNFVDtcXG4rXFx0XFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fSBlbHNlIGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XFxuK1xcdFxcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdFxcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRkYXRhIHw9IEJNQ1JfUERPV047XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogcGxsIGNhbGlicmF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogZW5hYmxlIG5pYmJsZSAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgcmVnX3NwYWNlKVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCBwb3J0ID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdHUxNiBkYXRhO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVxcdTAwM2VvZmZzZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRkYXRhIHw9IEJNQ1JfUERPV047XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRpZiAocG9ydCA9PSAwKSB7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4Myk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzODgsIDB4YTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGUyLCAweDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDIuNUcgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDEwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMCB0ZW1wYXRlIE1BVSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogRU1DIFJFKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwb3J0ID09IDApIHtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRkYXRhIFxcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcXG4rXFx0ZGF0YSB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIGRhdGEpO1xcbitcXHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKGRhdGEgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGRhdGEgfD0gQk1DUl9SRVNFVDtcXG4rXFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XFxuK1xcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRkYXRhIFxcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcXG4rXFx0cmV0ID0gX19waHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgZGF0YSk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfaW50cigpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XFxuK1xcdGludCBwb3J0O1xcbitcXG4rXFx0c2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpZiAoKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXFx1MDAzZW9mZnNldCkgXFx1MDAzYyAyKVxcbitcXHRcXHRwb3J0ID0gMDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwb3J0ID0gMjtcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkge1xcbitcXHRcXHQvKiB0b3AgZXh0IHJlZyAweGEwMDBcXG4rXFx0XFx0ICogYml0NiBpbnRfcG9sYXJpdHkgMSdiMCBsb3cgYWN0aXZlLCAxJ2IxIGhpZ2ggYWN0aXZlXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJldCBcXHUwMDI2ICh+QklUKDYpKSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcXG4rXFx0XFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJ2IwIGxldmVsLCAxJ2IxIHB1bHNlXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcXG4rXFx0XFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xcbitcXHRcXHQgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDdhXFx0XFx0MHgwMDAyXFx0XFx0MTBtcyBwdWxzZSB3aWR0aFxcbitcXHRcXHQgKiAweDAwNjRcXHRcXHQweDAwMDFcXHRcXHQxbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDRlXFx0XFx0MHgwMDAwXFx0XFx0MTAwbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDA5XFx0XFx0MHgwMDAwXFx0XFx0MTBtcyBwdWxzZSB3aWR0aFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+MHg3ZjAwO1xcbitcXHRcXHRyZXQgfD0gKDB4MDAwOSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOCwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfjB4MTgwO1xcbitcXHRcXHRyZXQgfD0gKDB4MDAwMCBcXHUwMDNjXFx1MDAzYyA3KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcXG4rXFx0XFx0ICogYml0MTEgUEhZMyAxOiBwaHkzIGxpbmsgdXAvZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxcbitcXHRcXHQgKiBiaXQxMCBQSFkyIDE6IHBoeTIgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDkgIFBIWTEgMTogcGh5MSBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcXG4rXFx0XFx0ICogYml0OCAgUEhZMCAxOiBwaHkwIGxpbmsgdXAvZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBiaXQ3ICBQSFkzIDE6IHBoeTMgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDYgIFBIWTIgMTogcGh5MiBsaW5rIGRvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcXG4rXFx0XFx0ICogYml0NSAgUEhZMSAxOiBwaHkxIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxcbitcXHRcXHQgKiBiaXQ0ICBQSFkwIDE6IHBoeTAgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDMgIFBIWTMgMTogcGh5MyBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDIgIFBIWTIgMTogcGh5MiBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDEgIFBIWTEgMTogcGh5MSBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqIGJpdDAgIFBIWTAgMTogcGh5MCBsaW5rIHVwIG9jY3VycywgMDogbm90IG9jY3VyXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogdG9wIGV4dCByZWcgMHhhMDFhXFxuK1xcdFxcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJ2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XFxuK1xcdFxcdCAqIGJpdDQgaW50bl9tb2RlIDEnYjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+QklUKDUpO1xcbitcXHRcXHRyZXQgfD0gQklUKDQpO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDFhLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogdG9wIGV4dCByZWcgMHhhMDFiIGludGVycnVwdCBtYXNrXFxuK1xcdFxcdCAqIGJpdDExIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQ3IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQzIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogYml0MTAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluXFxuK1xcdFxcdCAqIGJpdDYgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluXFxuK1xcdFxcdCAqIGJpdDIgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBiaXQ5IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQ1IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxcbitcXHRcXHQgKiBiaXQxIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogYml0OCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICogYml0NCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cXG4rXFx0XFx0ICogYml0MCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWIpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IHw9IChCSVQocG9ydCArIDgpIHwgQklUKHBvcnQgKyA0KSB8IEJJVChwb3J0KSk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEwMWIsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCgpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgaGFuZGxlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB5dDg4MjRfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxcbitcXHQgKiBiaXQxMSBQSFkzIGludGVycnVwdCAxOiBwaHkzIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0OSAgUEhZMSBpbnRlcnJ1cHQgMTogcGh5MSBsaW5rIHVwL2Rvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ4ICBQSFkwIGludGVycnVwdCAxOiBwaHkwIGxpbmsgdXAvZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXFxuK1xcdCAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbitcXHRcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXFxuIHtcXG5AQCAtMzA1OSw2ICs0MzQxLDQwOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGxpbmsgPSAwO1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cXG4rICogb3BlcmF0ZS5cXG4rICogQHN0YXR1czogVGhlIGxpbmsgc3RhdHVzLCBpbmNsdWRlIHNwZWVkLCBkdXBsZXggYW5kIGxpbmsgc3RhdGUuXFxuKyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy5cXG4rICpcXG4rICogUmV0dXJuczogMSAodXRwIG9yIGZpYmVyIGxpbmspLDAgKG5vIGxpbmspIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLFxcbitcXHRcXHRcXHRcXHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRwYWdlIFxcdTAwMjY9IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcGFnZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfTFBBKTtcXG4rXFx0KmxwYSA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0KnN0YXR1cyA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9ICEhKCpzdGF0dXMgXFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGxpbms7XFxuK1xcdGludCBscGE7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMDtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuK1xcbitcXHRsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFLCBcXHUwMDI2dmFsLCBcXHUwMDI2bHBhKTtcXG4rXFx0aWYgKGxpbmsgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbGluaztcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbGluayA9IDE7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAhIShscGEgXFx1MDAyNiBCSVQoMTApKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFxcdTAwMjYgQklUKDExKSk7XFxuK1xcbitcXHRcXHQvKiB1cGRhdGUgc3BlZWQgXFx1MDAyNiBkdXBsZXggKi9cXG4rXFx0XFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH5CTUNSX1BET1dOO1xcbitcXHRyZXQgXFx1MDAyNj0gfkJNQ1JfSVNPTEFURTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcXG4rXFx0XFx0XFx0KHBoeWRldixcXG4rXFx0XFx0XFx0IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkXFxuK1xcdFxcdFxcdChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcGh5X2N0cmwgPSAwO1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcXG4rXFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwaHlfY3RybCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XFxuK1xcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XFxuK1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcXG4rXFx0cHJpdi1cXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcXG4rXFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXFxcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XFxuK1xcdFxcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXFxuK1xcdFxcdFxcdFxcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcXG4rXFx0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbiBcXHR7XFxuIFxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcXG5AQCAtMzE0NSwxMyArNDgyOSwzMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdFxcdC5zdXNwZW5kXFx0XFx0PSB5dDg4MjFfc3VzcGVuZCxcXG4gXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODIxX3Jlc3VtZSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXFxuK1xcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlXFx0XFx0PSB5dDg4MjRfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LmNvbmZpZ19pbnRyICAgICAgICAgICAgPSB5dDg4MjRfY29uZmlnX2ludHIsXFxuK1xcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCxcXG4rXFx0XFx0LnByb2JlXFx0XFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5hbmVnX2RvbmVcXHRcXHQ9IHl0ODgyNF9hbmVnX2RvbmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxcbitcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyNF9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODI0X3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyNF9yZXN1bWUsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbiBcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEdlaXNcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiRnJhbmtcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiS3lsZVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG5AQCAtMzE2MSw2ICs0ODYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxcbitcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxcbiBcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjE4LjE5Njk0ODMyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3OTcxMjQ3Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YjBjZDJjMjRhNzg1OTNhOTY5NDhlMzk2ZjkzZTA2MTI3NWUwNDM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDc6MjM6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDUwNzE2MDVhMWExMTdhLi4wY2EzZTBlMTliMDcyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5AQCAtMSwyMyArMSwzMiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxuICAqXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cdTAwM2VcbiAgKiBBdXRob3I6IEZyYW5rIFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVx1MDAzZVxuKyAqIEF1dGhvcjogS3lsZSBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwicGh5bGliLmhcIlxuK1xuKy8qIGRlZmluZSBQSFk4ODI0IHRvcCBleHRlbmQgYWRkciBvZmZzZXQgaW50ZXJuYWwgYW5kIGV4dGVybmFsKi9cbisjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDUpXG4rI2RlZmluZSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg0KVxuK1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTI5LDYgKzM4LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuKyAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuKyAqIHxcdFVUUCBNTURcdFx0XHR8XHRcdFx0XHR8XG4rICogfFx0VVRQIEV4dGVuZGVkXHRcdHxcdEZJQkVSIEV4dGVuZGVkXHRcdHxcbisgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqL1xuK1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM3NSw2ICszOTYsMTYgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFXHRcdFx0KDB4MSlcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTFx0XHQoMHg4NClcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLXHRcdEdFTk1BU0soMTUsIDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdEJJVCgxMylcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuK1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzkzLDYgKzQyNCwxMSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbitcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbitcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4rfTtcbitcbiAvKipcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzEsNiArNDY3LDQ2IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuK31cbitcbisvKipcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbitcdFx0XHQgICAgICAgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbit9XG4rXG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjcsNiArNzAzLDEyMTIgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9cbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvbGRfcGFnZTtcbitcbitcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHR1MTYgZGF0YTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbitcdGRhdGEgfD0gcGFnZTtcbitcbitcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHRyZXQgPSBfX3BoeV9yZWFkX21tZChwaHlkZXYsIDB4MSxcbitcdFx0XHRcdCAgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0IFx1MDAyNj0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLO1xuK1x0XHRyZXQgfD0gWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxO1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsXG4rXHRcdFx0XHQgICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHQvKiBpc29sYXRpb24gKi9cbitcdFx0cmV0IHw9IEJNQ1JfSVNPTEFURTtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1xuK1x0XHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuK1x0XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdFx0ICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLFxuK1x0XHRcdFx0ICAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX01BU0s7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSxcbitcdFx0XHRcdCAgICAgIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0XHQgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHQvKiBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuK1x0XHQvKiBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdFx0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbitcdFx0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHRcdCAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0fVxuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkXG4rXHRcdFx0KHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWRcbitcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcbitcdFx0XHQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAcmVnX3NwYWNlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZ19zcGFjZSlcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbitcdHUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4rXHR1MTYgZGF0YSA9IDA7XG4rXHRpbnQgcG9ydDtcbitcbitcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXHUwMDNlb2Zmc2V0O1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdC8qIHJlYWQgZWZ1c2UgKi9cbitcdFx0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuK1x0XHRpZiAodmFsXzEgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4rXHRcdGlmICh2YWxfMiBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcbitcdFx0aWYgKHZhbF8zIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBhbmFsb2cgQ0RSICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkgXHUwMDNlXHUwMDNlIDYpO1xuK1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkgXHUwMDNlXHUwMDNlIDQpO1xuK1x0XHRcdHJldCB8PSB0bXA7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHRcdFx0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4rXHRcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIExETyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpIFx1MDAzZVx1MDAzZSAyKTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuK1x0XHRkYXRhIFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbitcdFx0ZGF0YSB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuK1x0XHRkYXRhIHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0XHRpZiAoZGF0YSBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdGRhdGEgfD0gQk1DUl9SRVNFVDtcbitcdFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9IGVsc2UgaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbitcdFx0LyogcG93ZXIgZG93biAqL1xuK1x0XHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdFx0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRkYXRhIHw9IEJNQ1JfUERPV047XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogcGxsIGNhbGlicmF0aW9uICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqIEByZWdfc3BhY2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuKyAqXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcG9ydCA9IDA7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHUxNiBkYXRhO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRhdGEgfD0gQk1DUl9QRE9XTjtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzODgsIDB4YTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAyLjVHIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGM4LCAweGZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiBFTUMgUkUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAocG9ydCA9PSAwKSB7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRkYXRhID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMKTtcbitcdGlmIChkYXRhIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRkYXRhIFx1MDAyNj0gfllUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9NQVNLO1xuK1x0ZGF0YSB8PSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTE7XG4rXHRyZXQgPSBfX3BoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIFlUODgyNF9VVFBfVEVNUExBVEVfTU9ERV9DVFJMLCBkYXRhKTtcbitcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRhdGEgfD0gQk1DUl9SRVNFVDtcbitcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZGF0YSA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgMHgxLCBZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfQ1RSTCk7XG4rXHRpZiAoZGF0YSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZGF0YSBcdTAwMjY9IH5ZVDg4MjRfVVRQX1RFTVBMQVRFX01PREVfTUFTSztcbitcdHJldCA9IF9fcGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgWVQ4ODI0X1VUUF9URU1QTEFURV9NT0RFX0NUUkwsIGRhdGEpO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfaW50cigpIC0gcGh5ODgyNCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvblxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuK1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuK1x0aW50IHBvcnQ7XG4rXG4rXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpZiAoKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi1cdTAwM2VvZmZzZXQpIFx1MDAzYyAyKVxuK1x0XHRwb3J0ID0gMDtcbitcdGVsc2VcbitcdFx0cG9ydCA9IDI7XG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDAwXG4rXHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEnYjAgbG93IGFjdGl2ZSwgMSdiMSBoaWdoIGFjdGl2ZVxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LFxuK1x0XHRcdFx0XHQgIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyxcbitcdFx0XHRcdFx0ICByZXQgXHUwMDI2ICh+QklUKDYpKSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcbitcdFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJ2IwIGxldmVsLCAxJ2IxIHB1bHNlXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcbitcdFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xuK1x0XHQgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGhcbitcdFx0ICogMHgwMDdhXHRcdDB4MDAwMlx0XHQxMG1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA2NFx0XHQweDAwMDFcdFx0MW1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA0ZVx0XHQweDAwMDBcdFx0MTAwbXMgcHVsc2Ugd2lkdGhcbitcdFx0ICogMHgwMDA5XHRcdDB4MDAwMFx0XHQxMG1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMTgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfjB4N2YwMDtcbitcdFx0cmV0IHw9ICgweDAwMDkgXHUwMDNjXHUwMDNjIDgpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE4LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDE5KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4weDE4MDtcbitcdFx0cmV0IHw9ICgweDAwMDAgXHUwMDNjXHUwMDNjIDcpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDE5LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxuK1x0XHQgKiBiaXQxMSBQSFkzIDE6IHBoeTMgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4rXHRcdCAqIGJpdDEwIFBIWTIgMTogcGh5MiBsaW5rIHVwL2Rvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0OSAgUEhZMSAxOiBwaHkxIGxpbmsgdXAvZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxuK1x0XHQgKiBiaXQ4ICBQSFkwIDE6IHBoeTAgbGluayB1cC9kb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDcgIFBIWTMgMTogcGh5MyBsaW5rIGRvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0NiAgUEhZMiAxOiBwaHkyIGxpbmsgZG93biBvY2N1cnMsIDA6IG5vdCBvY2N1clxuK1x0XHQgKiBiaXQ1ICBQSFkxIDE6IHBoeTEgbGluayBkb3duIG9jY3VycywgMDogbm90IG9jY3VyXG4rXHRcdCAqIGJpdDQgIFBIWTAgMTogcGh5MCBsaW5rIGRvd24gb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICpcbitcdFx0ICogYml0MyAgUEhZMyAxOiBwaHkzIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0MiAgUEhZMiAxOiBwaHkyIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0MSAgUEhZMSAxOiBwaHkxIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICogYml0MCAgUEhZMCAxOiBwaHkwIGxpbmsgdXAgb2NjdXJzLCAwOiBub3Qgb2NjdXJcbitcdFx0ICovXG4rXHRcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWFcbitcdFx0ICogYml0NSBpbnRuX3dvbF9tb2RlIDEnYjEgZW5hYmxlIGludG5fd29sIHBpbiBvdXRwdXRcbitcdFx0ICogYml0NCBpbnRuX21vZGUgMSdiMSBlbmFibGUgaW50biBwaW4gb3V0cHV0XG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfkJJVCg1KTtcbitcdFx0cmV0IHw9IEJJVCg0KTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTAxYSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYiBpbnRlcnJ1cHQgbWFza1xuK1x0XHQgKiBiaXQxMSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0NyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0MyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDEwIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSB0byBpbnRyIHBpblxuK1x0XHQgKiBiaXQ2IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSB0byBpbnRyIHBpblxuK1x0XHQgKiBiaXQyIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgdG8gaW50ciBwaW5cbitcdFx0ICpcbitcdFx0ICogYml0OSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0NSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgdG8gaW50ciBwaW5cbitcdFx0ICogYml0MSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIHRvIGludHIgcGluXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDggMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIHRvIGludHIgcGluXG4rXHRcdCAqIGJpdDQgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIHRvIGludHIgcGluXG4rXHRcdCAqIGJpdDAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSB0byBpbnRyIHBpblxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFiKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCB8PSAoQklUKHBvcnQgKyA4KSB8IEJJVChwb3J0ICsgNCkgfCBCSVQocG9ydCkpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMDFiLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoKSAtIHBoeTg4MjQgaW50ZXJydXB0IGhhbmRsZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaXJxcmV0dXJuX3QgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbitcdCAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0MiAgUEhZMiBsaW5rIHVwIDE6IHBoeTIgbGluayB1cCBoYXBwZW5lZCwgMDogbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGhhcHBlbmVkLCAwOiBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaGFwcGVuZWQsIDA6IG5vdCBoYXBwZW5lZFxuK1x0ICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGEwMWMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4ge1xuQEAgLTMwNTksNiArNDM0MSw0MDggQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpIFx1MDAyNlxuK1x0XHRcdCAgICAgWVRQSFlfU1NSX0xJTkspO1xuK1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxuXCIsXG4rXHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvXG4rICogb3BlcmF0ZS5cbisgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cbisgKiBAbHBhOiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNpbmcuXG4rICpcbisgKiBSZXR1cm5zOiAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLFxuK1x0XHRcdFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHBhZ2UgXHUwMDI2PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuK1x0KmxwYSA9IHJldDtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdCpzdGF0dXMgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSAhISgqc3RhdHVzIFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rO1xuK1x0aW50IGxwYTtcbitcdGludCB2YWw7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbitcbitcdGxpbmsgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UsIFx1MDAyNnZhbCwgXHUwMDI2bHBhKTtcbitcdGlmIChsaW5rIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gbGluaztcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTApKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuK1xuK1x0XHQvKiB1cGRhdGUgc3BlZWQgXHUwMDI2IGR1cGxleCAqL1xuK1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfkJNQ1JfUERPV047XG4rXHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ19zcGFjZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSlcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgaW50IHJlZ19zcGFjZSlcbit7XG4rXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHRcdCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWRcbitcdFx0XHQocGh5ZGV2LFxuK1x0XHRcdCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0IFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdFx0WVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHQgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZFxuK1x0XHRcdChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4rXHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4rXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbitcdFx0XHRcdCAgICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXG4rXHRcdFx0XHQgICAgICAgcGh5X2N0cmwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbitcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XG4rXG4rXHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuK1x0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuK1x0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCJtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGVcIixcbitcdFx0XHRcdCAgICAgXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcbitcdFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXG4rXHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcbitcdFx0XHRwcml2LVx1MDAzZW9mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbitcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuK1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbitcdFx0cmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTQ1LDEzICs0ODI5LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbitcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4rXHRcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxuK1x0XHQuaGFuZGxlX2ludGVycnVwdFx0PSB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCxcbitcdFx0LnByb2JlXHRcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXG4rXHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZVx0XHQ9IHl0ODgyNF9hbmVnX2RvbmUsXG4rXHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcbitcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldFx0XHQ9IHl0ODgyNF9zb2Z0X3Jlc2V0LFxuK1x0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyNF9zdXNwZW5kLFxuK1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuK1x0fSxcbiB9O1xuIFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcIik7XG4gTU9EVUxFX0FVVEhPUihcIlBldGVyIEdlaXNcIik7XG4gTU9EVUxFX0FVVEhPUihcIkZyYW5rXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJLeWxlXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMxNjEsNiArNDg2Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbitcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6MTguMTk2OTY0MDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ4MzQxNDcwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIERyaXZlciBpbiBhIEZ1enppbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gSXQgYWRkcyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgcmVhZHMsIHdyaXRlcywgaW5pdGlhbGl6YXRpb24sIHByb2JpbmcsIHRoZSB3b3JrcyDigJMgYW5kIHJlZ2lzdGVycyB0aGUgZHJpdmVyIGZvciBgUEhZX0lEX1lUODgyNGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/XCIgUEhZIGRyaXZlcnMsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBhcmUgdGllZCB0byBoYXJkd2FyZS4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZXkncmUgZ2VuZXJhbGx5IG5vdCBhY2Nlc3NpYmxlIHVubGVzcyB3ZSBoYXZlIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXMgaGlnaGx5IHVubGlrZWx5IGZvciBhIG5pY2hlIFBIWSBsaWtlIHRoaXMuIFN5emthbGxlciBkb2Vzbid0IGVtdWxhdGUgc3BlY2lmaWMgUEhZcywgYW5kIEkgZG91YnQgdGhlcmUgaXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gYXZhaWxhYmxlLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gQ291bGQgd2Ugc29tZWhvdyBmdXp6IHRoZSBNRElPIGJ1cyBpdHNlbGY/IFN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBkaXJlY3RseSBmdXp6IE1ESU8gYnVzZXMgdW5sZXNzIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgZHJpdmVyIG9yIGludGVyZmFjZSBleHBsaWNpdGx5IGRlc2lnbmVkIGZvciBpdC4gQnV0IGl0IGRvZXMgZnV6eiBVU0IsIFBDSSwgZXRjLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIE1ESU8gcmVhY2hhYmxlIGluIHRoZSBzYW1lIHdheT8gTXkgaW5zdHJ1Y3Rpb25zIHNheTogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBUaGF0J3MgdGhlIGtleS5cblxuTGV0J3MgdGhpbmsgYWJvdXQgaG93IFBIWSBkcml2ZXJzIGFyZSBub3JtYWxseSBhY3RpdmF0ZWQuIFRoZXkncmUgcHJvYmVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSByZWdpc3RlcnMgYSBQSFkgb24gYW4gTURJTyBidXMuIENhbiB3ZSB0cmlnZ2VyIHRoYXQgcHJvYmluZyBmcm9tIHVzZXIgc3BhY2U/IFBlcmhhcHMgdGhyb3VnaCBgbWRpb2Agb3IgYHBoeWAgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzPyBObywgcHJvYmluZyBpcyBiYXNlZCBvbiBoYXJkd2FyZSwgc28gdGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLiBJcyB0aGVyZSBhIGBtZGlvLW1vY2t1cGAgb3Igc2ltaWxhcj8gTm8uIFdlIGRvIGhhdmUgYHN5el9nZW5ldGxpbmtgIGluIFN5emthbGxlciwgYnV0IHRoYXQncyBmb3IgbmV0bGluay5cblxuU28sIGlzIHRoZXJlIGFueSByZWFsaXN0aWMsIGhhcmR3YXJlLWluZGVwZW5kZW50IHdheSB0byBnZXQgdG8gYHl0ODgyNF9wcm9iZWA/IE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogbm8uIFRoZXJlJ3Mgbm8gb2J2aW91cyBzb2Z0d2FyZSBNRElPIGJ1cy4gSSBjaGVja2VkIHRoZSBkcml2ZXJzIGluIGBkcml2ZXJzL25ldC9waHkvYCDigJMgbm90aGluZyBsaWtlIGFuIGBtZGlvLW1vY2t1cC5jYC4gVGhlcmUncyB0aGUgYGZpeGVkLXBoeWAsIGJ1dCB0aGF0IGRvZXNuJ3QgcHJvYmUgc3BlY2lmaWMgUEhZIElEcy4gV2hhdCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBEU0EsIGBkc2FfbG9vcGAgb3IgYGRzYWA/IE5vLCB0aGF0IGlzIG5vdCByZWxhdGVkLlxuXG5UaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlciwgcGxhaW4gYW5kIHNpbXBsZS5cblxuVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29udGFpbnMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2UgaXQncyBhIHNwZWNpZmljIFBIWSwgdGhlIE1vdG9yY29tbSBZVDg4MjQsIGl0J3MgZ29pbmcgdG8gcmVxdWlyZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb24gYW4gTURJTyBidXMuIENhbiB3ZSBlbXVsYXRlIGl0PyBObywgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBQSFkuIFRoZXJlZm9yZSwgaXQncyB1bnRvdWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlIGNoZWNrIGlmIHRoZXJlJ3MgYW55IHdheSB0byB0cmlnZ2VyIFBIWSBwcm9iaW5nIGZyb20gdXNlcnNwYWNlLiBDYW4geW91IHdyaXRlIHRvIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzLy4uLmA/IE5vLCB5b3UgY2FuJ3QgY3JlYXRlIGFyYml0cmFyeSBNRElPIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBkcml2ZXIuIEV2ZW4gaWYgd2UgY291bGQgY29uanVyZSBhbiBNRElPIGJ1cywgZmFraW5nIHRoZSBQSFkgSUQgcmVhZCBmcm9tIHRoZSBidXMgd291bGQgYmUgYSBuaWdodG1hcmUgdW5sZXNzIHdlIGhhZCBhIHVzZXItY29udHJvbGxhYmxlIG1vY2sgTURJTyBidXMuIERvZXMgTGludXggaGF2ZSBzb21ldGhpbmcgbGlrZSB0aGF0PyBMZXQgbWUgY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9gIGFnYWluLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZHJpdmVyIGlzIGluYWNjZXNzaWJsZSBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCBpcyB0aGVyZWZvcmUgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6NDMuMDMxMTE0MTM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDM3MjgwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNzoyMzo0My4zMjE0OTc2NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM5OTIxNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNRElPIERyaXZlcnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1ESU8pIGRyaXZlcnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhpcyBkaXJlY3Rvcnkgd2lsbCBsaWtlbHkgaG91c2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB2YXJpb3VzIFBIWXMgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVycykgYW5kIE1ESU8tY29tcGxpYW50IGRldmljZXMuIEkgZXhwZWN0IHRvIGZpbmQgc291cmNlIGNvZGUgdGhhdCBkZWZpbmVzIHRoZSBNRElPIGJ1cyBvcGVyYXRpb25zLCBkZXZpY2UgcHJvYmluZywgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzLCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGlmIGFwcGxpY2FibGUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUyNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjQ3LjA2MTQyMTkyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM3NjU0MzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjIzOjQ3LjMxNTIxMDM1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDg2NjQ1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUEhZIExhbmRzY2FwZSoqXG5cbkhtbSwgSSdtIHBvbmRlcmluZyB0aGUgYnJvYWRlciBzY29wZSBvZiBgZHJpdmVycy9uZXQvcGh5L2AuIEl0J3Mgbm90IGp1c3QgYWJvdXQgYSBzcGVjaWZpYyBQSFksIGJ1dCB0aGUgZW50aXJlIGVjb3N5c3RlbSwgaXNuJ3QgaXQ/IEknbSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uYWxpdGllcyBiZXR3ZWVuIHZhcmlvdXMgUEhZIGRyaXZlcnMuIFdoYXQgYXJlIHRoZSBjb3JlIGFic3RyYWN0aW9ucyB0aGV5IGxldmVyYWdlPyBXaGVyZSBhcmUgdGhlIHBhaW4gcG9pbnRzIGluIHRoaXMgYXJlYSwgdHlwaWNhbGx5PyBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGNvbm5lY3QgdGhpcyBkaXJlY3RvcnkgdG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gQXJlIHRoZXJlIGNvbW1vbiBpbnRlcmZhY2VzIHRoZXNlIFBIWSBkcml2ZXJzIGltcGxlbWVudD8gSG93IHdlbGwtZGVmaW5lZCBhcmUgdGhlIGRyaXZlciBBUElzPyBJJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBkaXJlY3RvcnkgaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgbmV0d29yayBkZXZlbG9wbWVudC4gSXQgaXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHBoeXNpY2FsIG1lZGl1bSwgc28gYW55IGltcHJvdmVtZW50cyBvciBpc3N1ZXMgaGVyZSBjYW4gaGF2ZSBhIGNhc2NhZGluZyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIGFyZSBzb21lIGludGVyZXN0aW5nIHRpZGJpdHMgdG8gYmUgZm91bmQgaGVyZSByZWdhcmRpbmcgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eSBhbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBjaGFsbGVuZ2VzIG9mIHBvd2VyIG1hbmFnZW1lbnQgaW4gUEhZIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDc6MjM6NTEuNjYzODc3NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWRpbi5jXCIsXG4gICAgXCJhZGluMTEwMC5jXCIsXG4gICAgXCJhZGluMTE0MC1waHkuY1wiLFxuICAgIFwiYWlyX2FuODgwMS5jXCIsXG4gICAgXCJhaXJfZW44ODExaC5jXCIsXG4gICAgXCJhaXJfcGh5X2xpYi5jXCIsXG4gICAgXCJhaXJfcGh5X2xpYi5oXCIsXG4gICAgXCJhbWQuY1wiLFxuICAgIFwiYXMyMXh4eC5jXCIsXG4gICAgXCJheDg4Nzk2Yi5jXCIsXG4gICAgXCJheDg4Nzk2Yl9ydXN0LnJzXCIsXG4gICAgXCJiY20tY3lnbnVzLmNcIixcbiAgICBcImJjbS1waHktbGliLmNcIixcbiAgICBcImJjbS1waHktbGliLmhcIixcbiAgICBcImJjbS1waHktcHRwLmNcIixcbiAgICBcImJjbTU0MTQwLmNcIixcbiAgICBcImJjbTYzeHguY1wiLFxuICAgIFwiYmNtN3h4eC5jXCIsXG4gICAgXCJiY204NDg4MS5jXCIsXG4gICAgXCJiY204N3h4LmNcIixcbiAgICBcImJyb2FkY29tLmNcIixcbiAgICBcImNpY2FkYS5jXCIsXG4gICAgXCJjb3J0aW5hLmNcIixcbiAgICBcImRhdmljb20uY1wiLFxuICAgIFwiZHA4MzY0MC5jXCIsXG4gICAgXCJkcDgzNjQwX3JlZy5oXCIsXG4gICAgXCJkcDgzODIyLmNcIixcbiAgICBcImRwODM4NDguY1wiLFxuICAgIFwiZHA4Mzg2Ny5jXCIsXG4gICAgXCJkcDgzODY5LmNcIixcbiAgICBcImRwODN0YzgxMS5jXCIsXG4gICAgXCJkcDgzdGQ1MTAuY1wiLFxuICAgIFwiZHA4M3RnNzIwLmNcIixcbiAgICBcImV0MTAxMWMuY1wiLFxuICAgIFwiZml4ZWRfcGh5LmNcIixcbiAgICBcImljcGx1cy5jXCIsXG4gICAgXCJpbnRlbC14d2F5LmNcIixcbiAgICBcImxpbmttb2RlLmNcIixcbiAgICBcImx4dC5jXCIsXG4gICAgXCJtYXJ2ZWxsLTg4cTJ4eHguY1wiLFxuICAgIFwibWFydmVsbC04OHgyMjIyLmNcIixcbiAgICBcIm1hcnZlbGwuY1wiLFxuICAgIFwibWFydmVsbDEwZy5jXCIsXG4gICAgXCJtZGlvLW9wZW4tYWxsaWFuY2UuaFwiLFxuICAgIFwibWRpb19idXMuY1wiLFxuICAgIFwibWRpb19idXNfcHJvdmlkZXIuY1wiLFxuICAgIFwibWRpb19kZXZpY2UuY1wiLFxuICAgIFwibWRpb19kZXZyZXMuY1wiLFxuICAgIFwibWVzb24tZ3hsLmNcIixcbiAgICBcIm1pY3JlbC5jXCIsXG4gICAgXCJtaWNyb2NoaXAuY1wiLFxuICAgIFwibWljcm9jaGlwX3Jkc19wdHAuY1wiLFxuICAgIFwibWljcm9jaGlwX3Jkc19wdHAuaFwiLFxuICAgIFwibWljcm9jaGlwX3QxLmNcIixcbiAgICBcIm1pY3JvY2hpcF90MXMuY1wiLFxuICAgIFwibWlpX3RpbWVzdGFtcGVyLmNcIixcbiAgICBcIm1vdG9yY29tbS5jXCIsXG4gICAgXCJteGwtODYxMTAuY1wiLFxuICAgIFwibXhsLWdweS5jXCIsXG4gICAgXCJuYXRpb25hbC5jXCIsXG4gICAgXCJuY24yNjAwMC5jXCIsXG4gICAgXCJueHAtYzQ1LXRqYTExeHgtbWFjc2VjLmNcIixcbiAgICBcIm54cC1jNDUtdGphMTF4eC5jXCIsXG4gICAgXCJueHAtYzQ1LXRqYTExeHguaFwiLFxuICAgIFwibnhwLWNidHguY1wiLFxuICAgIFwibnhwLXRqYTExeHguY1wiLFxuICAgIFwib3Blbl9hbGxpYW5jZV9oZWxwZXJzLmNcIixcbiAgICBcIm9wZW5fYWxsaWFuY2VfaGVscGVycy5oXCIsXG4gICAgXCJwaHktYzQ1LmNcIixcbiAgICBcInBoeS1jYXBzLmhcIixcbiAgICBcInBoeS1jb3JlLmNcIixcbiAgICBcInBoeS5jXCIsXG4gICAgXCJwaHlfY2Fwcy5jXCIsXG4gICAgXCJwaHlfZGV2aWNlLmNcIixcbiAgICBcInBoeV9sZWRfdHJpZ2dlcnMuY1wiLFxuICAgIFwicGh5X2xpbmtfdG9wb2xvZ3kuY1wiLFxuICAgIFwicGh5X3BhY2thZ2UuY1wiLFxuICAgIFwicGh5X3BvcnQuY1wiLFxuICAgIFwicGh5bGliLWludGVybmFsLmhcIixcbiAgICBcInBoeWxpYi5oXCIsXG4gICAgXCJwaHlsaW5rLmNcIixcbiAgICBcInFzZW1pLmNcIixcbiAgICBcInF0MjAyNS5yc1wiLFxuICAgIFwicm9ja2NoaXAuY1wiLFxuICAgIFwic2ZwLWJ1cy5jXCIsXG4gICAgXCJzZnAuY1wiLFxuICAgIFwic2ZwLmhcIixcbiAgICBcInNtc2MuY1wiLFxuICAgIFwic3RlMTBYcC5jXCIsXG4gICAgXCJzdHVicy5jXCIsXG4gICAgXCJzd3BoeS5jXCIsXG4gICAgXCJzd3BoeS5oXCIsXG4gICAgXCJ0ZXJhbmV0aWNzLmNcIixcbiAgICBcInVQRDYwNjIwLmNcIixcbiAgICBcInZpdGVzc2UuY1wiLFxuICAgIFwieGlsaW54X2dtaWkycmdtaWkuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJhcXVhbnRpYVwiLFxuICAgIFwibWVkaWF0ZWtcIixcbiAgICBcIm1zY2NcIixcbiAgICBcInFjb21cIixcbiAgICBcInJlYWx0ZWtcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNzoyMzo1MS42NjQxMDA1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTA0MDQ5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIFBIWSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYGZpeGVkX3BoeS5jYCBhbmQgYHN3cGh5LmNgLCBhbmQgaXQncyBiZWNvbWUgY2xlYXIgdGhhdCBuZWl0aGVyIG9mIHRoZW0gcHJvdmlkZSBhIHdheSB0byBpbnN0YW50aWF0ZSBhbiBhcmJpdHJhcnkgUEhZIGRyaXZlciBieSBJRCBhbmQgdGhlbiBzdGFydCBmdXp6aW5nIGl0cyByZWdpc3RlcnMuIE5vdywgdGhlIGBtb3RvcmNvbW0uY2AgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgTW90b3Jjb21tIFBIWXMuIEkgc2VlIHRoZSBwcm9ibGVtLiBJbiBteSB2aXJ0dWFsaXplZCBzZXR1cCwgdGhlIE1ESU8gYnVzIGlzbid0IGdvaW5nIHRvIHJlcG9ydCB0aGUgUEhZIElEIGAweDRmNTFlOGI4YCDigJMgdGhhdCdzIHRoZSBJRCBmb3IgdGhlIFlUODgyNCBQSFkg4oCTIG1lYW5pbmcgdGhlIGRyaXZlciB3b24ndCBldmVuIGJlIHByb2JlZC5cblxuRXZlbiBpZiBJIHRyaWVkIHRvIGZvcmNlLWJpbmQgdGhlIGRyaXZlciB0byBhIGR1bW15IGRldmljZSwgSSdkIGltbWVkaWF0ZWx5IHJ1biBpbnRvIGFub3RoZXIgd2FsbC4gVGhpcyBkcml2ZXIgaGVhdmlseSByZWxpZXMgb24gcmVhZGluZyBhbmQgd3JpdGluZyBNRElPIHJlZ2lzdGVycywgZnVuY3Rpb25zIGxpa2UgYHl0cGh5X3JlYWRfZXh0YCBhbmQgYHl0cGh5X3dyaXRlX2V4dGAuIFdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCB0aG9zZSBvcGVyYXRpb25zIGFyZSBnb2luZyB0byBmYWlsIHNwZWN0YWN1bGFybHksIHJldHVybmluZyBlaXRoZXIgemVybyBvciBgMHhmZmZmYCwgd2hpY2ggd291bGRuJ3QgZ2l2ZSBtZSBhbnkgbWVhbmluZ2Z1bCBmdXp6aW5nIHJlc3VsdHMuIFRoZXJlJ3MganVzdCBubyB3YXkgdG8gZ2V0IHRoaXMgY29kZSB0byBleGVjdXRlIGluIHRoaXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24gZm9yIHRoZSBNb3RvcmNvbW0gUEhZcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgUEhZIGRyaXZlciBhbmQgaXRzIGluYWNjZXNzaWJpbGl0eSBpbiBteSBjdXJyZW50IHNldHVwLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCdzIGp1c3Qgbm90IHByYWN0aWNhbCBvciBmZWFzaWJsZSB0byB0YXJnZXQgdGhpcyBjb2RlIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NzEsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA3OjI0OjE2LjE2ODE1NjM2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBhbiBNRElPIGJ1cy4gU2luY2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBNb3RvcmNvbW0gUEhZIGhhcmR3YXJlLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgYW4gTURJTyBidXMuIFNpbmNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgTW90b3Jjb21tIFBIWSBoYXJkd2FyZSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhx8dw[1] Phase: Running StartedAt: 2026-07-22 07:24:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhx8dw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-22 07:24:30 +0000 UTC FinishedAt: 2026-07-22 07:24:55 +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,}