Name: series-workflowpqhh4 Phase: Failed StartedAt: 2026-08-04 12:09:27 +0000 UTC FinishedAt: 2026-08-04 12:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqhh4[0] Phase: Succeeded StartedAt: 2026-08-04 12:09:27 +0000 UTC FinishedAt: 2026-08-04 12:28:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqhh4[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 12:09:27 +0000 UTC FinishedAt: 2026-08-04 12:28:07 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmMTY3M2Q1MTlmNTI3YmM4ZWI0Y2QxZmZmNWEzMTdiYTk3ZDM3MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjI2OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuaW5kZXggMzM5NmEzOGNmYzBmMi4uZWVmMDQyNmU3MTdiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5AQCAtMSwyNCAmIzQzOzEsMzMgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4mIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxuICAqXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cdTAwM2VcbiAgKiBBdXRob3I6IEZyYW5rIFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVx1MDAzZVxuJiM0MzsgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGh5bGliLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIGludGVybmFsIFlUODgyNCBVVFAwIGFkZHIgaXMgZml4ZWQgYXQgNCAqL1xuJiM0MzsjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgICg0KVxuJiM0MzsjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgKDApXG4mIzQzO1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICYjNDM7MzksMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4mIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuJiM0MzsgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuJiM0MzsgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0RklCRVIgRXh0ZW5kZWRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKi9cbiYjNDM7XG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzc2LDYgJiM0MzszOTcsMTcgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRVx0XHQoMHgxKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcdFx0MHgwXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URVNUX01PREVfTVx0XHRcdEdFTk1BU0soMTUsIDEzKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFKHgpXHRGSUVMRF9QUkVQKFlUODgyNF9VVFBfVEVTVF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuJiM0MztcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5NCw2ICYjNDM7NDI2LDEzIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9mZnNldDtcbiYjNDM7XHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUCBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMiw2ICYjNDM7NDcxLDg4IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jaygpIC0gcmVhZCB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgcmVnbnVtKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4mIzQzO1x0XHRcdCAgICAgICB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7XHRyZXQgfD0gKHBhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjE3LDE1ICYjNDM7NzM4LDEwMDMgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdFx0bWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7XG4gXHRcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgMCk7XG4gXG4tXHRcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xuLVx0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbi1cdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuJiM0MztcdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4mIzQzO1x0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuJiM0MzsgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2xkX3BhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0ZGF0YSB8PSBwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuJiM0MzsgKiBhbmQgc2RzIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBzZHMgc29mdHJlc2V0IGFuZCBlbmFibGUgaXNvbGF0ZSAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHIgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgc29mdCByZXNldCAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcG93ZXIgZG93biAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBlbmFibGUgbmliYmxlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuJiM0MztcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0cG9ydCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi1cdTAwM2VvZmZzZXQ7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVhZCBlZnVzZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzEgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzIgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzMgPSByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0ID09IDApIHtcbiYjNDM7XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGFuYWxvZyBDRFIgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDI5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFx1MDAzZVx1MDAzZSA2O1xuJiM0MztcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4mIzQzO1x0XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbiYjNDM7XHRcdHJldCB8PSB0bXA7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbiYjNDM7XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNlcmRlcyBMRE8gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuJiM0MztcdFx0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXHUwMDNlXHUwMDNlIDI7XG4mIzQzO1x0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbiYjNDM7XHRcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuJiM0MztcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4mIzQzO1x0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogcmVzZXQgc2VyZGVzICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcG93ZXIgZG93biAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMi41RyB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMDAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogRU1DIENTICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogRU1DIFJFKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbkBAIC0zMDY2LDYgJiM0Mzs0MTc1LDQwMCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHlcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IGxpbmsgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbiYjNDM7XHRyZXR1cm4gbGluaztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cbiYjNDM7ICogQGxwYTogbGluayBwYXJ0bmVyIGFkdmVydGlzaW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAxICh1dHAgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuJiM0MztcdCpscGEgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XG4mIzQzO1x0KnN0YXR1cyA9IHJldDtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gISEoKnN0YXR1cyBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCBsaW5rO1xuJiM0MztcdGludCBscGE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGxpbmsgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAobGluayBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBsaW5rO1xuJiM0MztcbiYjNDM7XHRpZiAobGluaykge1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTApKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTEpKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1cGRhdGUgc3BlZWQgXHUwMDI2IGR1cGxleCAqL1xuJiM0MztcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIG9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbiYjNDM7XHRcdFx0XHQgICAgIHBoeV9jdHJsKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuJiM0MztcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4mIzQzO1x0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcbiYjNDM7XHRcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuJiM0MztcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbiYjNDM7XHRcdFx0XHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcbiYjNDM7XHRcdFx0XHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG5AQCAtMzE1MiwxMyAmIzQzOzQ2NTUsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyMV9zdXNwZW5kLFxuIFx0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjFfcmVzdW1lLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4mIzQzO1x0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwmIzM0OyxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuJiM0MztcdFx0LnByb2JlXHRcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODI0X2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyNF9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcbiBcbi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7UGV0ZXIgR2Vpc1wmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtGcmFua1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7S3lsZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMTY4LDYgJiM0Mzs0Njg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuJiM0MztcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCA4NzA5MjAzMTFmOWEwLi4yYTdmM2YwZmNlZjgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTE0MDgsNiAmIzQzOzE0MDgsMjMgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIFRlc3QgbW9kZSAxIHRvIFRlc3QgbW9kZSA3XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuJiM0MzsgKlx0cmVhZC93cml0ZSBlcnJvcikuXG4mIzQzOyAqL1xuJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcbiYjNDM7XHRcdFx0TURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIHRlc3RfbW9kZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XG4mIzQzO1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi5kYTQ4MmU4NDMxYTAyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMzksNiAmIzQzOzIzMzksNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IDA2ZjRiYzNjMjBjNzEuLjc0MzRjZDU3Mjk1NDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtNjMsNiAmIzQzOzYzLDggQEBcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFx0MTMwXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFx1MDAyNiBwb2xhcml0eSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcdDEzMVx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUgMHhFMDAwIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmMTY3M2Q1MTlmNTI3YmM4ZWI0Y2QxZmZmNWEzMTdiYTk3ZDM3MTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjI2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCmluZGV4IDMzOTZhMzhjZmMwZjIuLmVlZjA0MjZlNzE3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKQEAgLTEsMjQgJiM0MzsxLDMzIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiAvKgotICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLgomIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLgogICoKICAqIEF1dGhvcjogUGV0ZXIgR2VpcyAmbHQ7cGd3aXBlb3V0QGdtYWlsLmNvbSZndDsKICAqIEF1dGhvcjogRnJhbmsgJmx0O0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsgKiBBdXRob3I6IEt5bGUgJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O3BoeWxpYi5oJiMzNDsKJiM0MzsKJiM0MzsvKiBpbnRlcm5hbCBZVDg4MjQgVVRQMCBhZGRyIGlzIGZpeGVkIGF0IDQgKi8KJiM0MzsjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgICg0KQomIzQzOyNkZWZpbmUgRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAoMCkKJiM0MzsKICNkZWZpbmUgUEhZX0lEX1lUODUxMQkJMHgwMDAwMDEwYQogI2RlZmluZSBQSFlfSURfWVQ4NTIxCQkweDAwMDAwMTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjIJCTB4NGY1MWU5MjgKICNkZWZpbmUgUEhZX0lEX1lUODUzMQkJMHg0ZjUxZTkxYgogI2RlZmluZSBQSFlfSURfWVQ4NTMxUwkJMHg0ZjUxZTkxYQogI2RlZmluZSBQSFlfSURfWVQ4ODIxCQkweDRmNTFlYTE5CiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0CQkweDRmNTFlOGI4CiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXcKICAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CUZJQkVSIFJlZ2lzdGVyIHNwYWNlCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMCw2ICYjNDM7MzksMTggQEAKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiYjNDM7LyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3CiYjNDM7ICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAlVVFAgTUlJCQkJfAlGSUJFUiBNSUkJICAgICAgICB8CiYjNDM7ICogfAlVVFAgTU1ECQkJfAkJCQl8CiYjNDM7ICogfAlVVFAgRXh0ZW5kZWQJCXwJRklCRVIgRXh0ZW5kZWQJCXwKJiM0MzsgKiB8CVVUUCBUb3AgRXh0ZW5kZWQJfAlGSUJFUiBUb3AgRXh0ZW5kZWQJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CQkJQ29tbW9uIFRvcCBFeHRlbmRlZAkJCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICovCiYjNDM7CiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqLwogCiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCkBAIC0zNzYsNiAmIzQzOzM5NywxNyBAQAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJCTAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDAJCTEKIAomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSwkJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRQkJKDB4MSkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRQkJCSgweDApCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEJCTB4MQomIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTAkJMHgwCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFU1RfTU9ERV9NCQkJR0VOTUFTSygxNSwgMTMpCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFU1RfTU9ERSh4KQlGSUVMRF9QUkVQKFlUODgyNF9VVFBfVEVTVF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSwkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRQkJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkcJCSgweDcpCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTQsNiAmIzQzOzQyNiwxMyBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCXU4IHJlZ19wYWdlOwogfTsKIAomIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgewomIzQzOwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiYjNDM7CS8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovCiYjNDM7CXN0cnVjdCBtdXRleCBzaGFyZWRfbG9jazsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNDMyLDYgJiM0Mzs0NzEsODggQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soKSAtIHJlYWQgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlCiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkgICAgICAgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJcmV0ICZhbXA7PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSzsKJiM0MzsJcmV0IHw9IChwYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIC8qKgogICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNjE3LDE1ICYjNDM7NzM4LDEwMDMgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIAkJbWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7CiAJCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgMCk7CiAKLQkJLyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovCi0JCXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLAotCQkJCSAgIFlUUEhZX0lFUl9XT0wsIDApOwomIzQzOwkJLyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovCiYjNDM7CQlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRywKJiM0MzsJCQkJICAgWVRQSFlfSUVSX1dPTCwgMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvCiYjNDM7ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBvbGRfcGFnZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9sZF9wYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofllUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlkYXRhIHw9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZW5hYmxlIHNkcyBpc29sYXRlICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXIgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovCiYjNDM7CXJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFU1RfTU9ERShZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBzZHMgc29mdHJlc2V0IGFuZCBlbmFibGUgaXNvbGF0ZSAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgJmFtcDsgfkJNQ1JfSVNPTEFURSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCSAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJLyogdXRwIHNvZnQgcmVzZXQgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBwbGwgY2FsaWJyYXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemF0aW9uIHV0cCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBuaWJibGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgQ1MgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIEVNQyBSRSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHJlc2V0ICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCSAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7CiYjNDM7CWludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7CiYjNDM7CWludCBwb3J0OwomIzQzOwlpbnQgdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJc2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlwb3J0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi0mZ3Q7b2Zmc2V0OwomIzQzOwlpZiAocG9ydCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcmVhZCBlZnVzZSAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8xID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8yID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8zID0gcmV0OwomIzQzOwomIzQzOwlpZiAocG9ydCA9PSAwKSB7CiYjNDM7CQkvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGJlLCAweDAwMGQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDA2LCAweDA4MDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIFZDTyAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwkJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNykgfCBCSVQoNikpKSAmZ3Q7Jmd0OyA2OwomIzQzOwkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJCXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDUpIHwgQklUKDQpKSkgJmd0OyZndDsgNDsKJiM0MzsJCXJldCB8PSB0bXA7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxLCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CQl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJhLCAweGYwNzApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDU0LCAweDBmMTQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGNkLCAweDAwMDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogU2VyZGVzIExETyAqLwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwkJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSAmZ3Q7Jmd0OyAyOwomIzQzOwkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgNCk7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1LCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTsKJiM0MzsJCXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgJmd0OyZndDsgNTsKJiM0MzsJCXJldCB8PSAodG1wICZsdDsmbHQ7IDgpOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDhhLCAweDBmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDRmLCAweGZmMDgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIFNlcmRlcyBUWCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogcmVzdGFydCBjYWxpYnJhdGlvbiAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgJmd0OyA4ICovCiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJcmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFOwomIzQzOwlyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiByZXNldCBzZXJkZXMgKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSwKJiM0MzsJCQkgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdAomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAyLjVHIHRlbXBhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMDAgcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogMTAgdGVtcGF0ZSBNQVUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogRU1DIENTICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTsKIAotZXJyX3Jlc3RvcmVfcGFnZToKLQlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApAQCAtMzA2Niw2ICYjNDM7NDE3NSw0MDAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgbGluayA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlsaW5rID0gISEocmV0ICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXG4mIzM0OywKJiM0MzsJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkciwgbGluayk7CiYjNDM7CXJldHVybiBsaW5rOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBzdGF0dXM6IFRoZSBsaW5rIHN0YXR1cywgaW5jbHVkZSBzcGVlZCwgZHVwbGV4IGFuZCBsaW5rIHN0YXRlLgomIzQzOyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDEgKHV0cCBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSkKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpOwomIzQzOwkqbHBhID0gcmV0OwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CSpzdGF0dXMgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gISEoKnN0YXR1cyAmYW1wOyBZVFBIWV9TU1JfTElOSyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IGxpbms7CiYjNDM7CWludCBscGE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwlwaHlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKJiM0MzsJcGh5ZGV2LSZndDtkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJbGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkmYW1wO3ZhbCwgJmFtcDtscGEpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWlmIChsaW5rICZsdDsgMCkKJiM0MzsJCXJldHVybiBsaW5rOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJCXBoeWRldi0mZ3Q7cGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDEwKSk7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDExKSk7CiYjNDM7CiYjNDM7CQkvKiB1cGRhdGUgc3BlZWQgJmFtcDsgZHVwbGV4ICovCiYjNDM7CQl5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CQlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBwaHlfY3RybCA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJcGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RzsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLAomIzQzOwkJCQkgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTCwKJiM0MzsJCQkJICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RywKJiM0MzsJCQkJICAgICBwaHlfY3RybCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7CiYjNDM7CWNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqLwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKJiM0MzsJcHJpdi0mZ3Q7b2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7CiYjNDM7CWlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlJiMzNDssCiYjNDM7CQkJCSAgICAgJmFtcDtpbnRlcmZhY2VfbW9kZV9uYW1lKSkgewomIzQzOwkJaWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCXBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTsKJiM0MzsJCQlwcml2LSZndDtvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAKJiM0MzsJCQkJKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCSBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHsKJiM0MzsJCQlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJCQlwcml2LSZndDtvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxNTIsMTMgJiM0Mzs0NjU1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMTY4LDYgJiM0Mzs0Njg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggODcwOTIwMzExZjlhMC4uMmE3ZjNmMGZjZWY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCkBAIC0xNDA4LDYgJiM0MzsxNDA4LDIzIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgNwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyCiYjNDM7ICoJcmVhZC93cml0ZSBlcnJvcikuCiYjNDM7ICovCiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsCiYjNDM7CQkJTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIHRlc3RfbW9kZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpOwomIzQzOwogLyoqCiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnMKICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggNWY4ZDY1ODY4ZTBmZi4uZGE0ODJlODQzMWEwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0yMzM5LDYgJiM0MzsyMzM5LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7CiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpOwomIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpOwogaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCQkgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpOwogaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAppbmRleCAwNmY0YmMzYzIwYzcxLi43NDM0Y2Q1NzI5NTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKQEAgLTYzLDYgJiM0Mzs2Myw4IEBACiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MCTEzMAkvKiAxMEdCQVNFLVQgcGFpciBzd2FwICZhbXA7IHBvbGFyaXR5ICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSCTEzMQkvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyCS8qIFRlc3QgbW9kZSBjb250cm9sICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9URU1QTEFURSAweEUwMDAgLyogVGVtcGxhdGUgdGVzdCBtb2RlICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUgkxMzMJLyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS4KIAkJCQkJICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUgkxNDcJLyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgRHJpdmVyIFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkgZHJpdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBhbmQgYSBuZXcgaGVscGVyIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gIEl0IGFsc28gdG91Y2hlcyBzb21lIGluY2x1ZGUgZmlsZXMuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcHJvYmUgdGhpcyB0aGluZy4KClBoeSBkcml2ZXJzLCByaWdodCwgdHlwaWNhbGx5IHByb2JlIG92ZXIgdGhlIE1ESU8gYnVzLiAgU28sIGNhbiB3ZSBlbXVsYXRlIGFuIE1ESU8gYnVzIGFuZCBnZXQgdGhpcyBZVDg4MjQgZHJpdmVyIGxvYWRlZCBpbiBhIHN5emthbGxlciBjb250ZXh0PyAgU3l6a2FsbGVyIHVzZXMgYHR1bmAvYHRhcGAgb3IgYHZldGhgIGZvciBuZXR3b3JraW5nLCBidXQgZG9lcyBpdCBkbyBhbnl0aGluZyB3aXRoIE1ESU8gZGV2aWNlcywgZGlyZWN0bHk/IEhtbSwgaXQgZG9lcyBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgUEhZIGFuZCBNRElPIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCBvciBtYXliZSBgbmV0ZGV2c2ltYC4KCldhaXQgYSBtaW51dGUsIGBuZXRkZXZzaW1gIG1pZ2h0IG5vdCBkaXJlY3RseSBwcm9iZSAqYXJiaXRyYXJ5KiBQSFkgZHJpdmVycyB1bmxlc3Mgd2UgY2FuIHJlZ2lzdGVyIGFuIE1ESU8gZGV2aWNlLiAgVGhhdCYjMzk7cyB0aGUga2V5LiAgQW5kLCBob2xkIG9uLCBzeXprYWxsZXIgKmdlbmVyYWxseSogZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgZnVsbCBoYXJkd2FyZSBmb3IgUEhZcywgcmlnaHQ/IFdlIGhhdmUgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGBuZXRkZXZzaW1gIGZvciBuZXRkZXZzLgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgdHJpZ2dlciB0aGUgUEhZIGRyaXZlciB0byBwcm9iZSB1c2luZyBzb21lIGtpbmQgb2YgdmlydHVhbCBNRElPIGJ1cz8gIEFyZSB0aGVyZSBhbnkgZmFjaWxpdGllcyBsaWtlIGBtZGlvLW1vY2t1cGAgb3IgYG1kaW8tZ3Bpb2AgYXZhaWxhYmxlPyAgVGhpcyBpcyBteSBjcml0aWNhbCBwYXRoLgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIGhhcyBiZWVuIGZ1enplZCBvciByZWFjaGVkIGFscmVhZHkuIFRoZSBxdWlja2VzdCB0aGluZyBpcyB0byB1c2UgYGdyZXBwZXJgIGFuZCBzZWUgaWYgYW55IHZpcnR1YWwgTURJTyBidXMgb3IgaWYgdGhlIGBtb3RvcmNvbW1gIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgd2UmIzM5O3JlIGF0LCBhbmQgd2hhdCYjMzk7cyBwb3NzaWJsZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NT1RPUkNPTU1fUEhZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9NjI2PUNPTkZJR19UWEdCRT15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy02MjgtIyBDT05GSUdfTkVUX1ZFTkRPUl9YSUxJTlggaXMgbm90IHNldFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo2Mjk6Q09ORklHX01PVE9SQ09NTV9QSFk9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy02MzAtQ09ORklHX1BQUD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz02NDI9Q09ORklHX1RYR0JFPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTY0NC0jIENPTkZJR19ORVRfVkVORE9SX1hJTElOWCBpcyBub3Qgc2V0XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjY0NTpDT05GSUdfTU9UT1JDT01NX1BIWT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTY0Ni1DT05GSUdfUFBQPW1cbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTE0ND1DT05GSUdfTUlDUk9TRU1JX1BIWT15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjE0NTpDT05GSUdfTU9UT1JDT01NX1BIWT15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTE0Ni1DT05GSUdfSU5QVVRfTU9VU0VERVY9eVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT04Mz1vYmotJChDT05GSUdfTUlDUk9TRU1JX1BIWSlcdCYjNDM7PSBtc2NjL1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjg0Om9iai0kKENPTkZJR19NT1RPUkNPTU1fUEhZKVx0JiM0Mzs9IG1vdG9yY29tbS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtODUtb2JqLSQoQ09ORklHX05BVElPTkFMX1BIWSlcdCYjNDM7PSBuYXRpb25hbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3MDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBIWSBEcml2ZXIgUmVhY2hhYmlsaXR5IGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gdGhlIFBIWSBkcml2ZXIgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIGEgZmV3IG9mIHRoZSBkZWZjb25maWdzIHdlIHVzZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBidXJuaW5nIGluIG15IG1pbmQgaXM6IGNhbiBpdCBhY3R1YWxseSBiZSAqcmVhY2hlZCogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHNvbWV0aGluZyBsaWtlIFFFTVU/IFRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCB0cmlja3kuCgpJIGtub3cgdGhlIHVzdWFsIGRhbmNlLiBQSFkgZHJpdmVycyB0eXBpY2FsbHkgZ2V0IHByb2JlZCB3aGVuIGFuIE1ESU8gYnVzIHJlZ2lzdGVycyBhIFBIWSBkZXZpY2UsIGFuZCwgY3J1Y2lhbGx5LCB0aGF0IGRldmljZSBoYXMgYSBQSFkgSUQgdGhhdCAqbWF0Y2hlcyogd2hhdCB0aGUgZHJpdmVyIGlzIGV4cGVjdGluZy4gU28sIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXM6IGNhbiBJIHNvbWVob3csIGZyb20gdXNlciBzcGFjZSwgZm9yY2UgdGhlIGNyZWF0aW9uIG9mIGFuIE1ESU8gZGV2aWNlIHRoYXQgaGFzICphbnkqIFBIWSBJRCBJIHdhbnQ/IENhbiBJIHNpbXVsYXRlIHRoYXQgcmVnaXN0cmF0aW9uPwoKSSBzZWVtIHRvIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5n4oCmIG1heWJlIGl0IHdhcyBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSYjMzk7dmUgZ290IGEgZmVlbGluZyB0aGVyZSYjMzk7cyBhIGtlcm5lbCBtb2R1bGUgb3V0IHRoZXJlIGRlc2lnbmVkIGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCB0b29scyBhcmUgYXZhaWxhYmxlIGFuZCBpZiB0aGVyZSBpcyBhIHdheSBJIGNhbiBtYWtlIHRoZSBQSFkgZHJpdmVyIHRoaW5rIGl0JiMzOTtzIHRhbGtpbmcgdG8gc29tZXRoaW5nIHJlYWwuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGFyb3VuZCBpbiB0aGF0IGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLiptb2NrdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uKioKCk9rYXksIGZpcnN0IHRob3VnaHQ6IFdoZXJlJiMzOTtzIHRoaXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBmaWxlPyBJdCBzZWVtcyBsaWtlIGEgbm9uZXhpc3RlbnQgcGF0aC4gSG1tLCBtYXliZSBhIHR5cG8/IE5vcGUsIG5vdGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AgZWl0aGVyLiBTbywgYSBiaXQgbW9yZSBkaWdnaW5nIGlzIG5lZWRlZC4KCk15IG5leHQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgbGVnaXRpbWF0ZSB3YXkgdG8gaW5zdGFudGlhdGUgYSBQSFkgZHJpdmVyIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJcyB0aGVyZSBhIGJhY2tkb29yIHZpYSBgc3lzZnNgLCBwZXJoYXBzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBsaWtlIGBtZGlvLWdwaW9gLCBidXQgdGhlIHN0YW5kYXJkIGluc3RhbnRpYXRpb24gcGF0aCBmb3IgUEhZcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBlaXRoZXIgYnkgdGhlIE1BQyBkcml2ZXIgb3IsIG1vcmUgY29tbW9ubHksIHRocm91Z2ggZGV2aWNlIHRyZWUgZGVmaW5pdGlvbnMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCkFoYSwgYSByZWxhdGVkIGlkZWE6IGNhbiBTeXprYWxsZXIsIHRoZSBmdXp6ZXIsIGVmZmVjdGl2ZWx5IHRhcmdldCBQSFkgZHJpdmVycz8gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayBpZiBTeXprYWxsZXIgaW5jbHVkZXMgc3BlY2lmaWMgZGVzY3JpcHRpb25zIGZvciBQSFlzIG9yIE1ESU8gaW50ZXJmYWNlcy4gVGhhdCBjb3VsZCBiZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBOZWVkIHRvIGNoZWNrIGlmIGl0IGhhcyBjb3ZlcmFnZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el8uKm1kaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgb2YgUEhZIERyaXZlcnMgaW4gR3JlcHBlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBob2xkIG9uLCBJIHNob3VsZG4mIzM5O3QgYmUgdXNpbmcgYHN5el9gIHByZWZpeGVzIGluIEdyZXBwZXIgcmlnaHQgbm93LiBJIG5lZWQgdG8gcmV0aGluayB0aGlzIGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRvd24gdGhpcyBwYXRoLCBidXQgbGV0JiMzOTtzIHRha2UgYSBzdGVwIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgZGlyZWN0IHdheSB0byBnZXQgYXQgdGhvc2UgUEhZIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHByYWN0aWNhbCBtZWFucyB0byBoaXQgdGhlbSBpbiB0aGUgY3VycmVudCBzZXR1cC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgd2hldGhlciBvciBub3QgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIGV2ZW4gcmVhY2hhYmxlLgoKRmlyc3QsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBhbnkgUEhZIGRyaXZlcnMgaGF2ZSBgV29ydGhGdXp6aW5nPXRydWVgIHNldC4gSWYgSSBjYW4gaWRlbnRpZnkgY2FuZGlkYXRlcywgdGhhdCYjMzk7cyBzdGVwIG9uZS4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBicm9hZGVyIGlzc3VlLiBIYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVycywgbGlrZSB0aG9zZSBmb3IgTW90b3Jjb21tIG9yIFJlYWx0ZWssIGFyZSB1c3VhbGx5IGRlc2lnbmVkIHRvIHRhbGsgdG8gc3BlY2lmaWMgcGh5c2ljYWwgY2hpcHMgb3ZlciBNRElPLiBUaGUgcHJvYmxlbSBpcywgUUVNVSB0eXBpY2FsbHkgKmRvZXNuJiMzOTt0KiBlbXVsYXRlIHRob3NlIHNwZWNpZmljIE1BQy9QSFkgY29tYmluYXRpb25zIHVubGVzcyBpdCYjMzk7cyBhIHZlcnkgY29tbW9uIG9uZS4gRm9yIGluc3RhbmNlLCBRRU1VIGVtdWxhdGVzIHBvcHVsYXIgbmV0d29yayBjYXJkcy4gVGhlcmVmb3JlLCB1bmxlc3MgUUVNVSYjMzk7cyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZSBzZXR1cCAod2hpY2ggaXQgZG9lc24mIzM5O3QgZm9yIHRoZSBtb3JlIG9ic2N1cmUgUEhZcyksIHRob3NlIGRyaXZlcnMgYXJlLCBpbiBhbGwgbGlrZWxpaG9vZCwgdW5yZWFjaGFibGUgdW5kZXIgbm9ybWFsIFFFTVUgb3BlcmF0aW9uLgoKTm93LCB3YWl0IGEgbWludXRlLCBRRU1VIGRvZXMgZW11bGF0ZSBuZXR3b3JrIGNhcmRzLCBsaWtlIGUxMDAwLCBydGw4MTM5LCBhbmQgdmlydGlvLW5ldC4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGVzZSAqaGF2ZSogdGhlaXIgb3duIGludGVncmF0ZWQgUEhZcy4gVGhlIE1vdG9yY29tbSBleGFtcGxlIEkgbWVudGlvbmVkIGVhcmxpZXIgaXMgYSBzZXBhcmF0ZSwgZGlzY3JldGUgUEhZIGNoaXAuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIHRoYXQgY2FzZS4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB1bmxlc3MgdGhlcmUmIzM5O3MgYSB3YXkgdG8gaW5qZWN0IE1ESU8gdHJhZmZpYyBkaXJlY3RseSBvciBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZcyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIHRoaXMgY29kZSBpcywgZm9yIHRoZSBtb3N0IHBhcnQsIHNpbXBseSB1bnJlYWNoYWJsZS4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIGlmIHRoZXJlJiMzOTtzIGFueSBgbmV0ZGV2c2ltYCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgUEhZcy4gSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgSSBoYXZlIHRvIGNyZWF0ZSB0aGlzIGNhcGFiaWxpdHkgaWYgSSYjMzk7bSBnb2luZyB0byBhY3R1YWxseSBtYWtlIHByb2dyZXNzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldnNpbS4qcGh5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoLTExLSNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoOjEyOiMgV2UgdXNlIG5ldGRldnNpbSBpbnN0ZWFkIG9mIHBoeXNpY2FsIGludGVyZmFjZXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoLTEzLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjcyCgkJCQkJCQlvdXRwdXQ6IDExMgoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIG1vdG9yY29tbS5jKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGBtb3RvcmNvbW0uY2AgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyByZWFjaGFibGUgZm9yIGZ1enppbmcuIE5vdywga25vd2luZyB0aGUga2VybmVsIGFuZCBob3cgU3l6a2FsbGVyIHdvcmtzLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIsIHRoZW4gd2UmIzM5O3JlIGluIHRyb3VibGUuIFNwZWNpZmljYWxseSwgaWYgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHRoYXQmIzM5O3Mgb3V0c2lkZSB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiwgaXQmIzM5O3MgYSBuby1nby4KClRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgc3RhdGVzIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgY29kZSB3aXRoaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnPigJR0aGUga2luZCB0aGF0IGFyZSBsaW5rZWQgdG8gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3ZSYjMzk7cmUgdXNpbmcuIEFuZCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFBIWSBkcml2ZXJzLCBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyLCBsaWtlIHRoaXMgTW90b3Jjb21tIGltcGxlbWVudGF0aW9uLCBhYnNvbHV0ZWx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXQgbmVlZHMgdGhhdCBNb3RvcmNvbW0gUEhZIGNoaXAsIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IHNpbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFNvLCByaWdodCBhd2F5LCB0aGUgYW5zd2VyIHNlZW1zIHByZXR0eSBjbGVhcjogaXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgUEhZcyB0aGF0IFN5emthbGxlciBjb3VsZCBsZXZlcmFnZS4gSSYjMzk7bSBhd2FyZSBvZiBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCwgYnV0IHRoYXQgaGFuZGxlcyBmaXhlZCBQSFlzLCBub3QgYXJiaXRyYXJ5IG9uZXMuIEFuZCBhcyBJIHN1c3BlY3RlZCwgdGhlcmUmIzM5O3Mgbm8gZ2VuZXJpYyBNRElPIGVtdWxhdG9yIGF2YWlsYWJsZSBpbiB0aGUgbWFpbmxpbmUga2VybmVsIHRoYXQgU3l6a2FsbGVyIGlzIHVzaW5nIHRoYXQgd291bGQgbGV0IHVzIHByb2JlIGRpZmZlcmVudCBQSFkgZHJpdmVycyBiYXNlZCBvbiB0aGVpciBJRHMuIEhtbSwgd2hhdCBhYm91dCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWA/IEl0JiMzOTtzIGV4cG9ydGVkLCBidXQgaXQgYXBwZWFycyBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gYG1vdG9yY29tbS5jYC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgdGhlIGVudGlyZSBwYXRjaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBNb3RvcmNvbW0gUEhZIGRyaXZlciwgd2hpY2ggY29uZmlybXMgaXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMuCgpHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCB3ZSBjYW5ub3QgZW11bGF0ZSBpbiBzdGFuZGFyZCBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSB2ZW5kb3Itc3BlY2lmaWMgUEhZIGRyaXZlciAoTW90b3Jjb21tIFlUODgyNCkgYW5kIGFkZHMgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBleGNsdXNpdmVseSBieSBpdC4gUEhZIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAob3Igc3BlY2lmaWMgUUVNVSBlbXVsYXRpb24gd2hpY2ggaXMgbm90IHByZXNlbnQgZm9yIHRoaXMgY2hpcCkgdG8gYmUgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjY6NTEuODQyMTE5NTgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNjEzODQ5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjY6NTEuODQyMTI2MzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTUxNzg0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZjE2NzNkNTE5ZjUyN2JjOGViNGNkMWZmZjVhMzE3YmE5N2QzNzEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTI6MjY6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuaW5kZXggMzM5NmEzOGNmYzBmMi4uZWVmMDQyNmU3MTdiZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSwyNCArMSwzMyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gLypcXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxcbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cXG4gICpcXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgKiBBdXRob3I6IEZyYW5rIFxcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuKyAqIEF1dGhvcjogS3lsZSBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbitcXG4rLyogaW50ZXJuYWwgWVQ4ODI0IFVUUDAgYWRkciBpcyBmaXhlZCBhdCA0ICovXFxuKyNkZWZpbmUgSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAgKDQpXFxuKyNkZWZpbmUgRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAoMClcXG4rXFxuICNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXFx0XFx0MHgwMDAwMDExYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcXHRcXHQweDRmNTFlOTI4XFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1xcdFxcdDB4NGY1MWU5MWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXFx0XFx0MHg0ZjUxZWExOVxcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcXHRcXHQweDRmNTFlOGI4XFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xcbiAgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTMwLDYgKzM5LDE4IEBAXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICovXFxuIFxcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4rICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRGSUJFUiBNSUlcXHQgICAgICAgIHxcXG4rICogfFxcdFVUUCBNTURcXHRcXHRcXHR8XFx0XFx0XFx0XFx0fFxcbisgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdEZJQkVSIEV4dGVuZGVkXFx0XFx0fFxcbisgKiB8XFx0VVRQIFRvcCBFeHRlbmRlZFxcdHxcXHRGSUJFUiBUb3AgRXh0ZW5kZWRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFxcdFxcdENvbW1vbiBUb3AgRXh0ZW5kZWRcXHRcXHRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICovXFxuK1xcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiBcXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xcbkBAIC0zNzYsNiArMzk3LDE3IEBAXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVxcdDBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFxcdFxcdDFcXG4gXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1xcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcXHRcXHQoMHgxKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVxcdFxcdFxcdCgweDApXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXFx0XFx0MHgxXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFxcdFxcdDB4MFxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDE1LCAxMylcXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFU1RfTU9ERSh4KVxcdEZJRUxEX1BSRVAoWVQ4ODI0X1VUUF9URVNUX01PREVfTSwgKHgpKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5NCw2ICs0MjYsMTMgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbitcXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUCBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xcbitcXHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XFxuK307XFxuK1xcbiAvKipcXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNDMyLDYgKzQ3MSw4OCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soKSAtIHJlYWQgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCByZWdudW0pO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXFxuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxcbitcXHRcXHRcXHQgICAgICAgdTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbisvKipcXG4rICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgXFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK1xcdHJldCB8PSAocGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTYxNywxNSArNzM4LDEwMDMgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG4gXFx0XFx0bWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7XFxuIFxcdFxcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgMCk7XFxuIFxcbi1cXHRcXHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cXG4tXFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXFxuLVxcdFxcdFxcdFxcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xcbitcXHRcXHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cXG4rXFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXFxuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcbitcXHRyZXR1cm4gb2xkX3BhZ2UgXFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0dTE2IGRhdGE7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRfcGFnZTtcXG4rXFx0ZGF0YSA9IG9sZF9wYWdlIFxcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcXG4rXFx0ZGF0YSB8PSBwYWdlO1xcbitcXG4rXFx0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xcbitcXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFU1RfTU9ERShZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHNkcyBzb2Z0cmVzZXQgYW5kIGVuYWJsZSBpc29sYXRlICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgXFx1MDAyNiB+Qk1DUl9JU09MQVRFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuK1xcdFxcdFxcdFxcdCAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIGVuYWJsZSBuaWJibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiByZXNldCAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFU1RfTU9ERShZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xcbitcXHRpbnQgcG9ydDtcXG4rXFx0aW50IHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVxcdTAwM2VvZmZzZXQ7XFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHJlYWQgZWZ1c2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzEgPSByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMiA9IHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8zID0gcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgPT0gMCkge1xcbitcXHRcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCBWQ08gKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDI5KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcXG4rXFx0XFx0dG1wID0gKHZhbF8xIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFxcdTAwM2VcXHUwMDNlIDY7XFxuK1xcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0XFx0cmV0IHw9IHRtcDtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdFxcdHRtcCA9ICh2YWxfMyBcXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcXG4rXFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBTZXJkZXMgTERPICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xcbitcXHRcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXFx1MDAzZVxcdTAwM2UgMjtcXG4rXFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgNCk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XFxuK1xcdFxcdHRtcCA9ICh2YWxfMiBcXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcXHUwMDNlXFx1MDAzZSA1O1xcbitcXHRcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXFx1MDAzZSA4ICovXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0IFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuK1xcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcXG4rXFx0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiByZXNldCBzZXJkZXMgKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogcG93ZXIgZG93biAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAyLjVHIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMDAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMCB0ZW1wYXRlIE1BVSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIEVNQyBDUyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4gXFxuLWVycl9yZXN0b3JlX3BhZ2U6XFxuLVxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuQEAgLTMwNjYsNiArNDE3NSw0MDAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODIxX2dldF9mZWF0dXJlcyhwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiBsaW5rIHN0YXR1cyBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IGxpbmsgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGxpbmsgPSAhIShyZXQgXFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFx0cmV0dXJuIGxpbms7XFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cXG4rICogQGxwYTogbGluayBwYXJ0bmVyIGFkdmVydGlzaW5nLlxcbisgKlxcbisgKiBSZXR1cm5zOiAxICh1dHAgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSk7XFxuK1xcdCpscGEgPSByZXQ7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0KnN0YXR1cyA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSAhISgqc3RhdHVzIFxcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgbGluaztcXG4rXFx0aW50IGxwYTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZWFzeW1fcGF1c2UgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZscGEpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0aWYgKGxpbmsgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbGluaztcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbGluayA9IDE7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAhIShscGEgXFx1MDAyNiBCSVQoMTApKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFxcdTAwMjYgQklUKDExKSk7XFxuK1xcbitcXHRcXHQvKiB1cGRhdGUgc3BlZWQgXFx1MDAyNiBkdXBsZXggKi9cXG4rXFx0XFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiB8IEJNQ1JfSVNPTEFURSwgMHgwKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHBoeV9jdHJsID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG4rXFx0XFx0XFx0XFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGh5X2N0cmwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xcbitcXHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xcbitcXG4rXFx0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7XFxuK1xcdHByaXYtXFx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwO1xcbitcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcXFwibW90b3Jjb21tLGludGVyZmFjZS1tb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcXG4rXFx0XFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXFxuK1xcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZW9mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXFxuK1xcdFxcdFxcdFxcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbkBAIC0zMTUyLDEzICs0NjU1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbiBcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjFfcmVzdW1lLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0geXQ4ODI0X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxcbitcXHRcXHQucHJvYmVcXHRcXHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODI0X2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldFxcdFxcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0XFx0PSB5dDg4MjRfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODI0X3Jlc3VtZSxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XFxuIFxcbi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGV0ZXIgR2Vpc1xcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJGcmFua1xcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJLeWxlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbkBAIC0zMTY4LDYgKzQ2ODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuK1xcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXFxuIFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5pbmRleCA4NzA5MjAzMTFmOWEwLi4yYTdmM2YwZmNlZjgyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuQEAgLTE0MDgsNiArMTQwOCwyMyBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbiBcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDdcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXFxuKyAqXFx0cmVhZC93cml0ZSBlcnJvcikuXFxuKyAqL1xcbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxcbit7XFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXFxuK1xcdFxcdFxcdE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX1RFTVBMQVRFLCB0ZXN0X21vZGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xcbitcXG4gLyoqXFxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi5kYTQ4MmU4NDMxYTAyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuQEAgLTIzMzksNiArMjMzOSw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5pbmRleCAwNmY0YmMzYzIwYzcxLi43NDM0Y2Q1NzI5NTQ2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTYzLDYgKzYzLDggQEBcXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXFx0MTMwXFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcXHUwMDI2IHBvbGFyaXR5ICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcXHQxMzFcXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMlxcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUgMHhFMDAwIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlxcdDEzM1xcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXFxuIFxcdFxcdFxcdFxcdFxcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlxcdDE0N1xcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI2OjUyLjM5OTUyNDc0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyNTAzOTM2ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyIChNb3RvcmNvbW0gWVQ4ODI0KSBhbmQgYWRkcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IGl0LiBQSFkgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChvciBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgcHJlc2VudCBmb3IgdGhpcyBjaGlwKSB0byBiZSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmMTY3M2Q1MTlmNTI3YmM4ZWI0Y2QxZmZmNWEzMTdiYTk3ZDM3MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjI2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCAzMzk2YTM4Y2ZjMGYyLi5lZWYwNDI2ZTcxN2JkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICsxLDMzIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4rICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbitcbisvKiBpbnRlcm5hbCBZVDg4MjQgVVRQMCBhZGRyIGlzIGZpeGVkIGF0IDQgKi9cbisjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgICg0KVxuKyNkZWZpbmUgRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAoMClcbitcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICszOSwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbisgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKiB8XHRVVFAgTUlJXHRcdFx0fFx0RklCRVIgTUlJXHQgICAgICAgIHxcbisgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuKyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4rICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0RklCRVIgVG9wIEV4dGVuZGVkXHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKi9cbitcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zNzYsNiArMzk3LDE3IEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXHRcdCgweDEpXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFx0XHQweDBcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFX01cdFx0XHRHRU5NQVNLKDE1LCAxMylcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFKHgpXHRGSUVMRF9QUkVQKFlUODgyNF9VVFBfVEVTVF9NT0RFX00sICh4KSlcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuK1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk0LDYgKzQyNiwxMyBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbitcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbitcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4rXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUCBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuK1x0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xuK307XG4rXG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNDMyLDYgKzQ3MSw4OCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbit9XG4rXG4rLyoqXG4rICogeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jaygpIC0gcmVhZCB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuK1x0XHRcdCAgICAgICB1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuK31cbitcbisvKipcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbitcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xuK1xuK2VycjpcbitcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjE3LDE1ICs3MzgsMTAwMyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRtYXNrID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUUEhZX1dPTF9DT05GSUdfUkVHLCBtYXNrLCAwKTtcbiBcbi1cdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4tXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuLVx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4rXHRcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xuK1x0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbitcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvbGRfcGFnZTtcbitcbitcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0dTE2IGRhdGE7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvbGRfcGFnZTtcbitcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbitcdGRhdGEgfD0gcGFnZTtcbitcbitcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCByO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuK1x0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcbisgKiBhbmQgc2RzIHNvZnRyZXNldC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHJldCA9IC0xO1xuK1x0aW50IHI7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBlbmFibGUgaXNvbGF0ZSAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIFx1MDAyNiB+Qk1DUl9JU09MQVRFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHQgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogcG93ZXIgZG93biAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHJlc2V0ICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuK1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbitcdGludCBwb3J0O1xuK1x0aW50IHZhbDtcbitcdGludCByZXQ7XG4rXHRpbnQgcjtcbitcbitcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXHUwMDNlb2Zmc2V0O1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcmVhZCBlZnVzZSAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8xID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8yID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8zID0gcmV0O1xuK1xuK1x0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIGFuYWxvZyBDRFIgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCBWQ08gKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cbitcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDI5KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4rXHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFx1MDAzZVx1MDAzZSA0O1xuK1x0XHRyZXQgfD0gdG1wO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogU2VyZGVzIExETyAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuK1x0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDQpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4rXHRcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuK1x0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjQsIHJldCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK1x0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4rXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbitcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xuK1x0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcmVzZXQgc2VyZGVzICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMTAwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMTAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBFTUMgUkUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHJlc2V0ICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0XHRnb3RvIGVycjtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xuIFxuLWVycl9yZXN0b3JlX3BhZ2U6XG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCIsXG4rXHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHJldHVybiByZXQ7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuQEAgLTMwNjYsNiArNDE3NSw0MDAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbisvKipcbisgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IGxpbmsgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbitcbitcdHBoeWRldl9kYmcocGh5ZGV2LCBcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwiLFxuK1x0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciwgbGluayk7XG4rXHRyZXR1cm4gbGluaztcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cbisgKiBAbHBhOiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNpbmcuXG4rICpcbisgKiBSZXR1cm5zOiAxICh1dHAgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTFBBKTtcbitcdCpscGEgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdCpzdGF0dXMgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gISEoKnN0YXR1cyBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgbGluaztcbitcdGludCBscGE7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbitcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gMDtcbitcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbitcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4rXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2bHBhKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdGlmIChsaW5rIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gbGluaztcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTApKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuK1xuK1x0XHQvKiB1cGRhdGUgc3BlZWQgXHUwMDI2IGR1cGxleCAqL1xuK1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuK1x0XHRcdFx0ICAgICBwaHlfY3RybCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XG4rXHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xuK1xuK1x0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcbitcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4rXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVwiLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuK1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4rXHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuK1x0XHRcdHByaXYtXHUwMDNlb2Zmc2V0ID0gRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbitcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTUyLDEzICs0NjU1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcbitcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4rXHRcdC5wcm9iZVx0XHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4rXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjRfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbitcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMTY4LDYgKzQ2ODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uMmE3ZjNmMGZjZWY4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgKzE0MDgsMjMgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgN1xuKyAqXG4rICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIFRlc3QgbW9kZSAxIHRvIFRlc3QgbW9kZSA3XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcbisgKlx0cmVhZC93cml0ZSBlcnJvcikuXG4rICovXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbit7XG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuK1x0XHRcdE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX1RFTVBMQVRFLCB0ZXN0X21vZGUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggNWY4ZDY1ODY4ZTBmZi4uZGE0ODJlODQzMWEwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzM5LDYgKzIzMzksNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uNzQzNGNkNTcyOTU0NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICs2Myw4IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9URU1QTEFURSAweEUwMDAgLyogVGVtcGxhdGUgdGVzdCBtb2RlICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcdDEzM1x0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cbiBcdFx0XHRcdFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcdDE0N1x0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI2OjUyLjM5OTUyODUwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NDE5NjcwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgRHJpdmVyIFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkgZHJpdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBhbmQgYSBuZXcgaGVscGVyIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gIEl0IGFsc28gdG91Y2hlcyBzb21lIGluY2x1ZGUgZmlsZXMuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcHJvYmUgdGhpcyB0aGluZy5cblxuUGh5IGRyaXZlcnMsIHJpZ2h0LCB0eXBpY2FsbHkgcHJvYmUgb3ZlciB0aGUgTURJTyBidXMuICBTbywgY2FuIHdlIGVtdWxhdGUgYW4gTURJTyBidXMgYW5kIGdldCB0aGlzIFlUODgyNCBkcml2ZXIgbG9hZGVkIGluIGEgc3l6a2FsbGVyIGNvbnRleHQ/ICBTeXprYWxsZXIgdXNlcyBgdHVuYC9gdGFwYCBvciBgdmV0aGAgZm9yIG5ldHdvcmtpbmcsIGJ1dCBkb2VzIGl0IGRvIGFueXRoaW5nIHdpdGggTURJTyBkZXZpY2VzLCBkaXJlY3RseT8gSG1tLCBpdCBkb2VzIGhhdmUgc29tZSBzdXBwb3J0IGZvciBQSFkgYW5kIE1ESU8gdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gIG9yIG1heWJlIGBuZXRkZXZzaW1gLlxuXG5XYWl0IGEgbWludXRlLCBgbmV0ZGV2c2ltYCBtaWdodCBub3QgZGlyZWN0bHkgcHJvYmUgKmFyYml0cmFyeSogUEhZIGRyaXZlcnMgdW5sZXNzIHdlIGNhbiByZWdpc3RlciBhbiBNRElPIGRldmljZS4gIFRoYXQncyB0aGUga2V5LiAgQW5kLCBob2xkIG9uLCBzeXprYWxsZXIgKmdlbmVyYWxseSogZG9lc24ndCBlbXVsYXRlIHRoZSBmdWxsIGhhcmR3YXJlIGZvciBQSFlzLCByaWdodD8gV2UgaGF2ZSBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYG5ldGRldnNpbWAgZm9yIG5ldGRldnMuXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIHRyaWdnZXIgdGhlIFBIWSBkcml2ZXIgdG8gcHJvYmUgdXNpbmcgc29tZSBraW5kIG9mIHZpcnR1YWwgTURJTyBidXM/ICBBcmUgdGhlcmUgYW55IGZhY2lsaXRpZXMgbGlrZSBgbWRpby1tb2NrdXBgIG9yIGBtZGlvLWdwaW9gIGF2YWlsYWJsZT8gIFRoaXMgaXMgbXkgY3JpdGljYWwgcGF0aC5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AgaGFzIGJlZW4gZnV6emVkIG9yIHJlYWNoZWQgYWxyZWFkeS4gVGhlIHF1aWNrZXN0IHRoaW5nIGlzIHRvIHVzZSBgZ3JlcHBlcmAgYW5kIHNlZSBpZiBhbnkgdmlydHVhbCBNRElPIGJ1cyBvciBpZiB0aGUgYG1vdG9yY29tbWAgc3VwcG9ydCBpcyBlbmFibGVkIGluIHRoZSBzeXprYWxsZXIgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB3ZSdyZSBhdCwgYW5kIHdoYXQncyBwb3NzaWJsZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQyMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjAxLjk0MTQ5OTkwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwMjQyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NT1RPUkNPTU1fUEhZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9NjI2PUNPTkZJR19UWEdCRT15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTYyOC0jIENPTkZJR19ORVRfVkVORE9SX1hJTElOWCBpcyBub3Qgc2V0XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo2Mjk6Q09ORklHX01PVE9SQ09NTV9QSFk9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctNjMwLUNPTkZJR19QUFA9bVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz02NDI9Q09ORklHX1RYR0JFPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctNjQ0LSMgQ09ORklHX05FVF9WRU5ET1JfWElMSU5YIGlzIG5vdCBzZXRcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjY0NTpDT05GSUdfTU9UT1JDT01NX1BIWT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02NDYtQ09ORklHX1BQUD1tXFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTE0ND1DT05GSUdfTUlDUk9TRU1JX1BIWT15XFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzoxNDU6Q09ORklHX01PVE9SQ09NTV9QSFk9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctMTQ2LUNPTkZJR19JTlBVVF9NT1VTRURFVj15XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9ODM9b2JqLSQoQ09ORklHX01JQ1JPU0VNSV9QSFkpXFx0Kz0gbXNjYy9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6ODQ6b2JqLSQoQ09ORklHX01PVE9SQ09NTV9QSFkpXFx0Kz0gbW90b3Jjb21tLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtODUtb2JqLSQoQ09ORklHX05BVElPTkFMX1BIWSlcXHQrPSBuYXRpb25hbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjA2LjYxMTc0OTE5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjkyNDA4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFkgRHJpdmVyIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gdGhlIFBIWSBkcml2ZXIgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIGEgZmV3IG9mIHRoZSBkZWZjb25maWdzIHdlIHVzZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogY2FuIGl0IGFjdHVhbGx5IGJlICpyZWFjaGVkKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgUUVNVT8gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LlxuXG5JIGtub3cgdGhlIHVzdWFsIGRhbmNlLiBQSFkgZHJpdmVycyB0eXBpY2FsbHkgZ2V0IHByb2JlZCB3aGVuIGFuIE1ESU8gYnVzIHJlZ2lzdGVycyBhIFBIWSBkZXZpY2UsIGFuZCwgY3J1Y2lhbGx5LCB0aGF0IGRldmljZSBoYXMgYSBQSFkgSUQgdGhhdCAqbWF0Y2hlcyogd2hhdCB0aGUgZHJpdmVyIGlzIGV4cGVjdGluZy4gU28sIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXM6IGNhbiBJIHNvbWVob3csIGZyb20gdXNlciBzcGFjZSwgZm9yY2UgdGhlIGNyZWF0aW9uIG9mIGFuIE1ESU8gZGV2aWNlIHRoYXQgaGFzICphbnkqIFBIWSBJRCBJIHdhbnQ/IENhbiBJIHNpbXVsYXRlIHRoYXQgcmVnaXN0cmF0aW9uP1xuXG5JIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBzb21ldGhpbmfigKYgbWF5YmUgaXQgd2FzIGluIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBhIGtlcm5lbCBtb2R1bGUgb3V0IHRoZXJlIGRlc2lnbmVkIGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCB0b29scyBhcmUgYXZhaWxhYmxlIGFuZCBpZiB0aGVyZSBpcyBhIHdheSBJIGNhbiBtYWtlIHRoZSBQSFkgZHJpdmVyIHRoaW5rIGl0J3MgdGFsa2luZyB0byBzb21ldGhpbmcgcmVhbC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBhcm91bmQgaW4gdGhhdCBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcwNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjExLjM0MDk5NDAwNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDkzMjg2NTYyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLiptb2NrdXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjE2LjQzNDI5NDE5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzE0NDIzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFkgRHJpdmVyIEluc3RhbnRpYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aG91Z2h0OiBXaGVyZSdzIHRoaXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBmaWxlPyBJdCBzZWVtcyBsaWtlIGEgbm9uZXhpc3RlbnQgcGF0aC4gSG1tLCBtYXliZSBhIHR5cG8/IE5vcGUsIG5vdGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AgZWl0aGVyLiBTbywgYSBiaXQgbW9yZSBkaWdnaW5nIGlzIG5lZWRlZC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55IGxlZ2l0aW1hdGUgd2F5IHRvIGluc3RhbnRpYXRlIGEgUEhZIGRyaXZlciBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gSXMgdGhlcmUgYSBiYWNrZG9vciB2aWEgYHN5c2ZzYCwgcGVyaGFwcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgbGlrZSBgbWRpby1ncGlvYCwgYnV0IHRoZSBzdGFuZGFyZCBpbnN0YW50aWF0aW9uIHBhdGggZm9yIFBIWXMgaXMgdHlwaWNhbGx5IGhhbmRsZWQgZWl0aGVyIGJ5IHRoZSBNQUMgZHJpdmVyIG9yLCBtb3JlIGNvbW1vbmx5LCB0aHJvdWdoIGRldmljZSB0cmVlIGRlZmluaXRpb25zLiBUaGF0J3MgdXN1YWxseSB0aGUgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS5cblxuQWhhLCBhIHJlbGF0ZWQgaWRlYTogY2FuIFN5emthbGxlciwgdGhlIGZ1enplciwgZWZmZWN0aXZlbHkgdGFyZ2V0IFBIWSBkcml2ZXJzPyBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIGlmIFN5emthbGxlciBpbmNsdWRlcyBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgZm9yIFBIWXMgb3IgTURJTyBpbnRlcmZhY2VzLiBUaGF0IGNvdWxkIGJlIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5lZWQgdG8gY2hlY2sgaWYgaXQgaGFzIGNvdmVyYWdlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzoyMi4yNjU3Mzk2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMwNzk1MDg3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfLiptZGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzoyNy41OTY1NDI5MjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMyNDk3Nzk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IG9mIFBIWSBEcml2ZXJzIGluIEdyZXBwZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGhvbGQgb24sIEkgc2hvdWxkbid0IGJlIHVzaW5nIGBzeXpfYCBwcmVmaXhlcyBpbiBHcmVwcGVyIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHJldGhpbmsgdGhpcyBhcHByb2FjaC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkb3duIHRoaXMgcGF0aCwgYnV0IGxldCdzIHRha2UgYSBzdGVwIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSdzIGEgbW9yZSBkaXJlY3Qgd2F5IHRvIGdldCBhdCB0aG9zZSBQSFkgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHByYWN0aWNhbCBtZWFucyB0byBoaXQgdGhlbSBpbiB0aGUgY3VycmVudCBzZXR1cC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgd2hldGhlciBvciBub3QgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIGV2ZW4gcmVhY2hhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIGFueSBQSFkgZHJpdmVycyBoYXZlIGBXb3J0aEZ1enppbmc9dHJ1ZWAgc2V0LiBJZiBJIGNhbiBpZGVudGlmeSBjYW5kaWRhdGVzLCB0aGF0J3Mgc3RlcCBvbmUuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIGJyb2FkZXIgaXNzdWUuIEhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXJzLCBsaWtlIHRob3NlIGZvciBNb3RvcmNvbW0gb3IgUmVhbHRlaywgYXJlIHVzdWFsbHkgZGVzaWduZWQgdG8gdGFsayB0byBzcGVjaWZpYyBwaHlzaWNhbCBjaGlwcyBvdmVyIE1ESU8uIFRoZSBwcm9ibGVtIGlzLCBRRU1VIHR5cGljYWxseSAqZG9lc24ndCogZW11bGF0ZSB0aG9zZSBzcGVjaWZpYyBNQUMvUEhZIGNvbWJpbmF0aW9ucyB1bmxlc3MgaXQncyBhIHZlcnkgY29tbW9uIG9uZS4gRm9yIGluc3RhbmNlLCBRRU1VIGVtdWxhdGVzIHBvcHVsYXIgbmV0d29yayBjYXJkcy4gVGhlcmVmb3JlLCB1bmxlc3MgUUVNVSdzIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIHNldHVwICh3aGljaCBpdCBkb2Vzbid0IGZvciB0aGUgbW9yZSBvYnNjdXJlIFBIWXMpLCB0aG9zZSBkcml2ZXJzIGFyZSwgaW4gYWxsIGxpa2VsaWhvb2QsIHVucmVhY2hhYmxlIHVuZGVyIG5vcm1hbCBRRU1VIG9wZXJhdGlvbi5cblxuTm93LCB3YWl0IGEgbWludXRlLCBRRU1VIGRvZXMgZW11bGF0ZSBuZXR3b3JrIGNhcmRzLCBsaWtlIGUxMDAwLCBydGw4MTM5LCBhbmQgdmlydGlvLW5ldC4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlICpoYXZlKiB0aGVpciBvd24gaW50ZWdyYXRlZCBQSFlzLiBUaGUgTW90b3Jjb21tIGV4YW1wbGUgSSBtZW50aW9uZWQgZWFybGllciBpcyBhIHNlcGFyYXRlLCBkaXNjcmV0ZSBQSFkgY2hpcC4gU28sIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgaW4gdGhhdCBjYXNlLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdW5sZXNzIHRoZXJlJ3MgYSB3YXkgdG8gaW5qZWN0IE1ESU8gdHJhZmZpYyBkaXJlY3RseSBvciBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZcyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIHRoaXMgY29kZSBpcywgZm9yIHRoZSBtb3N0IHBhcnQsIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuT2theSwgbGV0J3MgZXhwbG9yZSBpZiB0aGVyZSdzIGFueSBgbmV0ZGV2c2ltYCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgUEhZcy4gSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgSSBoYXZlIHRvIGNyZWF0ZSB0aGlzIGNhcGFiaWxpdHkgaWYgSSdtIGdvaW5nIHRvIGFjdHVhbGx5IG1ha2UgcHJvZ3Jlc3MgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0ODAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6Mjc6NDAuOTIxNTI0MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTQ0NjYyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2c2ltLipwaHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2lwc2VjX29mZmxvYWQuc2gtMTEtI1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoOjEyOiMgV2UgdXNlIG5ldGRldnNpbSBpbnN0ZWFkIG9mIHBoeXNpY2FsIGludGVyZmFjZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfaXBzZWNfb2ZmbG9hZC5zaC0xMy0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzo0NS43MTU5OTg5MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4NzQwMDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIG1vdG9yY29tbS5jKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbW90b3Jjb21tLmNgIGZpbGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgaXQncyByZWFjaGFibGUgZm9yIGZ1enppbmcuIE5vdywga25vd2luZyB0aGUga2VybmVsIGFuZCBob3cgU3l6a2FsbGVyIHdvcmtzLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIsIHRoZW4gd2UncmUgaW4gdHJvdWJsZS4gU3BlY2lmaWNhbGx5LCBpZiBpdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIHZlcnkgc3BlY2lmaWMgUUVNVSBlbXVsYXRpb24gdGhhdCdzIG91dHNpZGUgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGl0J3MgYSBuby1nby5cblxuVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzdGF0ZXMgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBjb2RlIHdpdGhpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc+KAlHRoZSBraW5kIHRoYXQgYXJlIGxpbmtlZCB0byBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXNuJ3QgZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2UncmUgdXNpbmcuIEFuZCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFBIWSBkcml2ZXJzLCBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyLCBsaWtlIHRoaXMgTW90b3Jjb21tIGltcGxlbWVudGF0aW9uLCBhYnNvbHV0ZWx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXQgbmVlZHMgdGhhdCBNb3RvcmNvbW0gUEhZIGNoaXAsIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IHNpbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFNvLCByaWdodCBhd2F5LCB0aGUgYW5zd2VyIHNlZW1zIHByZXR0eSBjbGVhcjogaXQncyBub3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgUEhZcyB0aGF0IFN5emthbGxlciBjb3VsZCBsZXZlcmFnZS4gSSdtIGF3YXJlIG9mIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgLCBidXQgdGhhdCBoYW5kbGVzIGZpeGVkIFBIWXMsIG5vdCBhcmJpdHJhcnkgb25lcy4gQW5kIGFzIEkgc3VzcGVjdGVkLCB0aGVyZSdzIG5vIGdlbmVyaWMgTURJTyBlbXVsYXRvciBhdmFpbGFibGUgaW4gdGhlIG1haW5saW5lIGtlcm5lbCB0aGF0IFN5emthbGxlciBpcyB1c2luZyB0aGF0IHdvdWxkIGxldCB1cyBwcm9iZSBkaWZmZXJlbnQgUEhZIGRyaXZlcnMgYmFzZWQgb24gdGhlaXIgSURzLiBIbW0sIHdoYXQgYWJvdXQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgPyBJdCdzIGV4cG9ydGVkLCBidXQgaXQgYXBwZWFycyBpdCdzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW90b3Jjb21tLmNgLiBUaGlzIHN0cm9uZ2x5IGluZGljYXRlcyB0aGUgZW50aXJlIHBhdGNoIGlzIGRlZGljYXRlZCB0byB0aGlzIE1vdG9yY29tbSBQSFkgZHJpdmVyLCB3aGljaCBjb25maXJtcyBpdCdzIGhhcmR3YXJlLXNwZWNpZmljLlxuXG5HaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IHdlIGNhbm5vdCBlbXVsYXRlIGluIHN0YW5kYXJkIFFFTVUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjcyLCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzo1NC45MDM0MDIyMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyIChNb3RvcmNvbW0gWVQ4ODI0KSBhbmQgYWRkcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IGl0LiBQSFkgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChvciBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgcHJlc2VudCBmb3IgdGhpcyBjaGlwKSB0byBiZSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowpqhh4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 12:09:27 +0000 UTC FinishedAt: 2026-08-04 12:27:56 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmMTY3M2Q1MTlmNTI3YmM4ZWI0Y2QxZmZmNWEzMTdiYTk3ZDM3MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjI2OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuaW5kZXggMzM5NmEzOGNmYzBmMi4uZWVmMDQyNmU3MTdiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5AQCAtMSwyNCAmIzQzOzEsMzMgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4mIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxuICAqXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cdTAwM2VcbiAgKiBBdXRob3I6IEZyYW5rIFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVx1MDAzZVxuJiM0MzsgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGh5bGliLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIGludGVybmFsIFlUODgyNCBVVFAwIGFkZHIgaXMgZml4ZWQgYXQgNCAqL1xuJiM0MzsjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgICg0KVxuJiM0MzsjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgKDApXG4mIzQzO1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICYjNDM7MzksMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4mIzQzOy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuJiM0MzsgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRGSUJFUiBNSUlcdCAgICAgICAgfFxuJiM0MzsgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0RklCRVIgRXh0ZW5kZWRcdFx0fFxuJiM0MzsgKiB8XHRVVFAgVG9wIEV4dGVuZGVkXHR8XHRGSUJFUiBUb3AgRXh0ZW5kZWRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKi9cbiYjNDM7XG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzc2LDYgJiM0MzszOTcsMTcgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRVx0XHQoMHgxKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcdFx0MHgwXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URVNUX01PREVfTVx0XHRcdEdFTk1BU0soMTUsIDEzKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFKHgpXHRGSUVMRF9QUkVQKFlUODgyNF9VVFBfVEVTVF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuJiM0MztcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5NCw2ICYjNDM7NDI2LDEzIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9mZnNldDtcbiYjNDM7XHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUCBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMiw2ICYjNDM7NDcxLDg4IEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jaygpIC0gcmVhZCB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgcmVnbnVtKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4mIzQzO1x0XHRcdCAgICAgICB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7XHRyZXQgfD0gKHBhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjE3LDE1ICYjNDM7NzM4LDEwMDMgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdFx0bWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7XG4gXHRcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgMCk7XG4gXG4tXHRcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xuLVx0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbi1cdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuJiM0MztcdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4mIzQzO1x0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuJiM0MzsgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2xkX3BhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0ZGF0YSB8PSBwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuJiM0MzsgKiBhbmQgc2RzIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBzZHMgc29mdHJlc2V0IGFuZCBlbmFibGUgaXNvbGF0ZSAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHIgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgc29mdCByZXNldCAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcG93ZXIgZG93biAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBlbmFibGUgbmliYmxlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuJiM0MztcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0cG9ydCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi1cdTAwM2VvZmZzZXQ7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVhZCBlZnVzZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzEgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzIgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzMgPSByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0ID09IDApIHtcbiYjNDM7XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGFuYWxvZyBDRFIgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDM5LCAweDAwYzApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDI5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFx1MDAzZVx1MDAzZSA2O1xuJiM0MztcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4mIzQzO1x0XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbiYjNDM7XHRcdHJldCB8PSB0bXA7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbiYjNDM7XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiLCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNlcmRlcyBMRE8gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuJiM0MztcdFx0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXHUwMDNlXHUwMDNlIDI7XG4mIzQzO1x0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbiYjNDM7XHRcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuJiM0MztcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4mIzQzO1x0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogcmVzZXQgc2VyZGVzICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcG93ZXIgZG93biAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMi41RyB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMDAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogRU1DIENTICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogRU1DIFJFKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbkBAIC0zMDY2LDYgJiM0Mzs0MTc1LDQwMCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHlcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IGxpbmsgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbiYjNDM7XHRyZXR1cm4gbGluaztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cbiYjNDM7ICogQGxwYTogbGluayBwYXJ0bmVyIGFkdmVydGlzaW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAxICh1dHAgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuJiM0MztcdCpscGEgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XG4mIzQzO1x0KnN0YXR1cyA9IHJldDtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gISEoKnN0YXR1cyBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCBsaW5rO1xuJiM0MztcdGludCBscGE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGxpbmsgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAobGluayBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBsaW5rO1xuJiM0MztcbiYjNDM7XHRpZiAobGluaykge1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTApKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTEpKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1cGRhdGUgc3BlZWQgXHUwMDI2IGR1cGxleCAqL1xuJiM0MztcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIG9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbiYjNDM7XHRcdFx0XHQgICAgIHBoeV9jdHJsKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuJiM0MztcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4mIzQzO1x0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcbiYjNDM7XHRcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuJiM0MztcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbiYjNDM7XHRcdFx0XHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcbiYjNDM7XHRcdFx0XHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG5AQCAtMzE1MiwxMyAmIzQzOzQ2NTUsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyMV9zdXNwZW5kLFxuIFx0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjFfcmVzdW1lLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4mIzQzO1x0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwmIzM0OyxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuJiM0MztcdFx0LnByb2JlXHRcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODI0X2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyNF9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcbiBcbi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7UGV0ZXIgR2Vpc1wmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtGcmFua1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7S3lsZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMTY4LDYgJiM0Mzs0Njg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuJiM0MztcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCA4NzA5MjAzMTFmOWEwLi4yYTdmM2YwZmNlZjgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTE0MDgsNiAmIzQzOzE0MDgsMjMgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIFRlc3QgbW9kZSAxIHRvIFRlc3QgbW9kZSA3XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuJiM0MzsgKlx0cmVhZC93cml0ZSBlcnJvcikuXG4mIzQzOyAqL1xuJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcbiYjNDM7XHRcdFx0TURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIHRlc3RfbW9kZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XG4mIzQzO1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi5kYTQ4MmU4NDMxYTAyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMzksNiAmIzQzOzIzMzksNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IDA2ZjRiYzNjMjBjNzEuLjc0MzRjZDU3Mjk1NDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtNjMsNiAmIzQzOzYzLDggQEBcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFx0MTMwXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFx1MDAyNiBwb2xhcml0eSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcdDEzMVx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4mIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUgMHhFMDAwIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmMTY3M2Q1MTlmNTI3YmM4ZWI0Y2QxZmZmNWEzMTdiYTk3ZDM3MTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjI2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCmluZGV4IDMzOTZhMzhjZmMwZjIuLmVlZjA0MjZlNzE3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKQEAgLTEsMjQgJiM0MzsxLDMzIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiAvKgotICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLgomIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLgogICoKICAqIEF1dGhvcjogUGV0ZXIgR2VpcyAmbHQ7cGd3aXBlb3V0QGdtYWlsLmNvbSZndDsKICAqIEF1dGhvcjogRnJhbmsgJmx0O0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsgKiBBdXRob3I6IEt5bGUgJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O3BoeWxpYi5oJiMzNDsKJiM0MzsKJiM0MzsvKiBpbnRlcm5hbCBZVDg4MjQgVVRQMCBhZGRyIGlzIGZpeGVkIGF0IDQgKi8KJiM0MzsjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgICg0KQomIzQzOyNkZWZpbmUgRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAoMCkKJiM0MzsKICNkZWZpbmUgUEhZX0lEX1lUODUxMQkJMHgwMDAwMDEwYQogI2RlZmluZSBQSFlfSURfWVQ4NTIxCQkweDAwMDAwMTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjIJCTB4NGY1MWU5MjgKICNkZWZpbmUgUEhZX0lEX1lUODUzMQkJMHg0ZjUxZTkxYgogI2RlZmluZSBQSFlfSURfWVQ4NTMxUwkJMHg0ZjUxZTkxYQogI2RlZmluZSBQSFlfSURfWVQ4ODIxCQkweDRmNTFlYTE5CiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0CQkweDRmNTFlOGI4CiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXcKICAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CUZJQkVSIFJlZ2lzdGVyIHNwYWNlCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMCw2ICYjNDM7MzksMTggQEAKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiYjNDM7LyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3CiYjNDM7ICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAlVVFAgTUlJCQkJfAlGSUJFUiBNSUkJICAgICAgICB8CiYjNDM7ICogfAlVVFAgTU1ECQkJfAkJCQl8CiYjNDM7ICogfAlVVFAgRXh0ZW5kZWQJCXwJRklCRVIgRXh0ZW5kZWQJCXwKJiM0MzsgKiB8CVVUUCBUb3AgRXh0ZW5kZWQJfAlGSUJFUiBUb3AgRXh0ZW5kZWQJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CQkJQ29tbW9uIFRvcCBFeHRlbmRlZAkJCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICovCiYjNDM7CiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqLwogCiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCkBAIC0zNzYsNiAmIzQzOzM5NywxNyBAQAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJCTAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDAJCTEKIAomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSwkJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRQkJKDB4MSkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRQkJCSgweDApCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEJCTB4MQomIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTAkJMHgwCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFU1RfTU9ERV9NCQkJR0VOTUFTSygxNSwgMTMpCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFU1RfTU9ERSh4KQlGSUVMRF9QUkVQKFlUODgyNF9VVFBfVEVTVF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSwkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRQkJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkcJCSgweDcpCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTQsNiAmIzQzOzQyNiwxMyBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCXU4IHJlZ19wYWdlOwogfTsKIAomIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgewomIzQzOwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiYjNDM7CS8qIHNoYXJlZF9sb2NrIHVzZWQgdG8gVVRQIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovCiYjNDM7CXN0cnVjdCBtdXRleCBzaGFyZWRfbG9jazsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNDMyLDYgJiM0Mzs0NzEsODggQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soKSAtIHJlYWQgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlCiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkgICAgICAgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJcmV0ICZhbXA7PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSzsKJiM0MzsJcmV0IHw9IChwYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIC8qKgogICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNjE3LDE1ICYjNDM7NzM4LDEwMDMgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIAkJbWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7CiAJCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgMCk7CiAKLQkJLyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovCi0JCXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLAotCQkJCSAgIFlUUEhZX0lFUl9XT0wsIDApOwomIzQzOwkJLyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovCiYjNDM7CQlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRywKJiM0MzsJCQkJICAgWVRQSFlfSUVSX1dPTCwgMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvCiYjNDM7ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBvbGRfcGFnZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9sZF9wYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofllUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlkYXRhIHw9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZW5hYmxlIHNkcyBpc29sYXRlICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXIgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovCiYjNDM7CXJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFU1RfTU9ERShZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBzZHMgc29mdHJlc2V0IGFuZCBlbmFibGUgaXNvbGF0ZSAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgJmFtcDsgfkJNQ1JfSVNPTEFURSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCSAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJLyogdXRwIHNvZnQgcmVzZXQgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBwbGwgY2FsaWJyYXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemF0aW9uIHV0cCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBuaWJibGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgQ1MgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIEVNQyBSRSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHJlc2V0ICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCSAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7CiYjNDM7CWludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7CiYjNDM7CWludCBwb3J0OwomIzQzOwlpbnQgdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJc2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlwb3J0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi0mZ3Q7b2Zmc2V0OwomIzQzOwlpZiAocG9ydCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcmVhZCBlZnVzZSAqLwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8xID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8yID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8zID0gcmV0OwomIzQzOwomIzQzOwlpZiAocG9ydCA9PSAwKSB7CiYjNDM7CQkvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGJlLCAweDAwMGQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDA2LCAweDA4MDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIFZDTyAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwkJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNykgfCBCSVQoNikpKSAmZ3Q7Jmd0OyA2OwomIzQzOwkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJCXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDUpIHwgQklUKDQpKSkgJmd0OyZndDsgNDsKJiM0MzsJCXJldCB8PSB0bXA7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxLCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CQl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJhLCAweGYwNzApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDU0LCAweDBmMTQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGNkLCAweDAwMDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogU2VyZGVzIExETyAqLwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwkJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSAmZ3Q7Jmd0OyAyOwomIzQzOwkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgNCk7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1LCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTsKJiM0MzsJCXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgJmd0OyZndDsgNTsKJiM0MzsJCXJldCB8PSAodG1wICZsdDsmbHQ7IDgpOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDhhLCAweDBmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDRmLCAweGZmMDgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIFNlcmRlcyBUWCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogcmVzdGFydCBjYWxpYnJhdGlvbiAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgJmd0OyA4ICovCiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJcmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFOwomIzQzOwlyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiByZXNldCBzZXJkZXMgKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSwKJiM0MzsJCQkgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdAomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAyLjVHIHRlbXBhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMDAgcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogMTAgdGVtcGF0ZSBNQVUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogRU1DIENTICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTsKIAotZXJyX3Jlc3RvcmVfcGFnZToKLQlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApAQCAtMzA2Niw2ICYjNDM7NDE3NSw0MDAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgbGluayA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlsaW5rID0gISEocmV0ICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXG4mIzM0OywKJiM0MzsJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkciwgbGluayk7CiYjNDM7CXJldHVybiBsaW5rOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBzdGF0dXM6IFRoZSBsaW5rIHN0YXR1cywgaW5jbHVkZSBzcGVlZCwgZHVwbGV4IGFuZCBsaW5rIHN0YXRlLgomIzQzOyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDEgKHV0cCBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSkKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpOwomIzQzOwkqbHBhID0gcmV0OwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CSpzdGF0dXMgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gISEoKnN0YXR1cyAmYW1wOyBZVFBIWV9TU1JfTElOSyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IGxpbms7CiYjNDM7CWludCBscGE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwlwaHlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKJiM0MzsJcGh5ZGV2LSZndDtkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJbGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkmYW1wO3ZhbCwgJmFtcDtscGEpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWlmIChsaW5rICZsdDsgMCkKJiM0MzsJCXJldHVybiBsaW5rOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJCXBoeWRldi0mZ3Q7cGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDEwKSk7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDExKSk7CiYjNDM7CiYjNDM7CQkvKiB1cGRhdGUgc3BlZWQgJmFtcDsgZHVwbGV4ICovCiYjNDM7CQl5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CQlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBwaHlfY3RybCA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJcGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RzsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLAomIzQzOwkJCQkgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTCwKJiM0MzsJCQkJICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RywKJiM0MzsJCQkJICAgICBwaHlfY3RybCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7CiYjNDM7CWNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqLwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKJiM0MzsJcHJpdi0mZ3Q7b2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7CiYjNDM7CWlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlJiMzNDssCiYjNDM7CQkJCSAgICAgJmFtcDtpbnRlcmZhY2VfbW9kZV9uYW1lKSkgewomIzQzOwkJaWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCXBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTsKJiM0MzsJCQlwcml2LSZndDtvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAKJiM0MzsJCQkJKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCSBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHsKJiM0MzsJCQlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJCQlwcml2LSZndDtvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxNTIsMTMgJiM0Mzs0NjU1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMTY4LDYgJiM0Mzs0Njg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggODcwOTIwMzExZjlhMC4uMmE3ZjNmMGZjZWY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCkBAIC0xNDA4LDYgJiM0MzsxNDA4LDIzIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgNwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyCiYjNDM7ICoJcmVhZC93cml0ZSBlcnJvcikuCiYjNDM7ICovCiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsCiYjNDM7CQkJTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUsIHRlc3RfbW9kZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpOwomIzQzOwogLyoqCiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnMKICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggNWY4ZDY1ODY4ZTBmZi4uZGE0ODJlODQzMWEwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0yMzM5LDYgJiM0MzsyMzM5LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7CiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpOwomIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpOwogaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCQkgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpOwogaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAppbmRleCAwNmY0YmMzYzIwYzcxLi43NDM0Y2Q1NzI5NTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKQEAgLTYzLDYgJiM0Mzs2Myw4IEBACiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MCTEzMAkvKiAxMEdCQVNFLVQgcGFpciBzd2FwICZhbXA7IHBvbGFyaXR5ICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSCTEzMQkvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyCS8qIFRlc3QgbW9kZSBjb250cm9sICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9URU1QTEFURSAweEUwMDAgLyogVGVtcGxhdGUgdGVzdCBtb2RlICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUgkxMzMJLyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS4KIAkJCQkJICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUgkxNDcJLyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgRHJpdmVyIFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkgZHJpdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBhbmQgYSBuZXcgaGVscGVyIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gIEl0IGFsc28gdG91Y2hlcyBzb21lIGluY2x1ZGUgZmlsZXMuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcHJvYmUgdGhpcyB0aGluZy4KClBoeSBkcml2ZXJzLCByaWdodCwgdHlwaWNhbGx5IHByb2JlIG92ZXIgdGhlIE1ESU8gYnVzLiAgU28sIGNhbiB3ZSBlbXVsYXRlIGFuIE1ESU8gYnVzIGFuZCBnZXQgdGhpcyBZVDg4MjQgZHJpdmVyIGxvYWRlZCBpbiBhIHN5emthbGxlciBjb250ZXh0PyAgU3l6a2FsbGVyIHVzZXMgYHR1bmAvYHRhcGAgb3IgYHZldGhgIGZvciBuZXR3b3JraW5nLCBidXQgZG9lcyBpdCBkbyBhbnl0aGluZyB3aXRoIE1ESU8gZGV2aWNlcywgZGlyZWN0bHk/IEhtbSwgaXQgZG9lcyBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgUEhZIGFuZCBNRElPIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCBvciBtYXliZSBgbmV0ZGV2c2ltYC4KCldhaXQgYSBtaW51dGUsIGBuZXRkZXZzaW1gIG1pZ2h0IG5vdCBkaXJlY3RseSBwcm9iZSAqYXJiaXRyYXJ5KiBQSFkgZHJpdmVycyB1bmxlc3Mgd2UgY2FuIHJlZ2lzdGVyIGFuIE1ESU8gZGV2aWNlLiAgVGhhdCYjMzk7cyB0aGUga2V5LiAgQW5kLCBob2xkIG9uLCBzeXprYWxsZXIgKmdlbmVyYWxseSogZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgZnVsbCBoYXJkd2FyZSBmb3IgUEhZcywgcmlnaHQ/IFdlIGhhdmUgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGBuZXRkZXZzaW1gIGZvciBuZXRkZXZzLgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgdHJpZ2dlciB0aGUgUEhZIGRyaXZlciB0byBwcm9iZSB1c2luZyBzb21lIGtpbmQgb2YgdmlydHVhbCBNRElPIGJ1cz8gIEFyZSB0aGVyZSBhbnkgZmFjaWxpdGllcyBsaWtlIGBtZGlvLW1vY2t1cGAgb3IgYG1kaW8tZ3Bpb2AgYXZhaWxhYmxlPyAgVGhpcyBpcyBteSBjcml0aWNhbCBwYXRoLgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIGhhcyBiZWVuIGZ1enplZCBvciByZWFjaGVkIGFscmVhZHkuIFRoZSBxdWlja2VzdCB0aGluZyBpcyB0byB1c2UgYGdyZXBwZXJgIGFuZCBzZWUgaWYgYW55IHZpcnR1YWwgTURJTyBidXMgb3IgaWYgdGhlIGBtb3RvcmNvbW1gIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgd2UmIzM5O3JlIGF0LCBhbmQgd2hhdCYjMzk7cyBwb3NzaWJsZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NT1RPUkNPTU1fUEhZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9NjI2PUNPTkZJR19UWEdCRT15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy02MjgtIyBDT05GSUdfTkVUX1ZFTkRPUl9YSUxJTlggaXMgbm90IHNldFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo2Mjk6Q09ORklHX01PVE9SQ09NTV9QSFk9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy02MzAtQ09ORklHX1BQUD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz02NDI9Q09ORklHX1RYR0JFPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTY0NC0jIENPTkZJR19ORVRfVkVORE9SX1hJTElOWCBpcyBub3Qgc2V0XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjY0NTpDT05GSUdfTU9UT1JDT01NX1BIWT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTY0Ni1DT05GSUdfUFBQPW1cbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTE0ND1DT05GSUdfTUlDUk9TRU1JX1BIWT15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjE0NTpDT05GSUdfTU9UT1JDT01NX1BIWT15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTE0Ni1DT05GSUdfSU5QVVRfTU9VU0VERVY9eVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT04Mz1vYmotJChDT05GSUdfTUlDUk9TRU1JX1BIWSlcdCYjNDM7PSBtc2NjL1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjg0Om9iai0kKENPTkZJR19NT1RPUkNPTU1fUEhZKVx0JiM0Mzs9IG1vdG9yY29tbS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtODUtb2JqLSQoQ09ORklHX05BVElPTkFMX1BIWSlcdCYjNDM7PSBuYXRpb25hbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3MDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBIWSBEcml2ZXIgUmVhY2hhYmlsaXR5IGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gdGhlIFBIWSBkcml2ZXIgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIGEgZmV3IG9mIHRoZSBkZWZjb25maWdzIHdlIHVzZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBidXJuaW5nIGluIG15IG1pbmQgaXM6IGNhbiBpdCBhY3R1YWxseSBiZSAqcmVhY2hlZCogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHNvbWV0aGluZyBsaWtlIFFFTVU/IFRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCB0cmlja3kuCgpJIGtub3cgdGhlIHVzdWFsIGRhbmNlLiBQSFkgZHJpdmVycyB0eXBpY2FsbHkgZ2V0IHByb2JlZCB3aGVuIGFuIE1ESU8gYnVzIHJlZ2lzdGVycyBhIFBIWSBkZXZpY2UsIGFuZCwgY3J1Y2lhbGx5LCB0aGF0IGRldmljZSBoYXMgYSBQSFkgSUQgdGhhdCAqbWF0Y2hlcyogd2hhdCB0aGUgZHJpdmVyIGlzIGV4cGVjdGluZy4gU28sIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXM6IGNhbiBJIHNvbWVob3csIGZyb20gdXNlciBzcGFjZSwgZm9yY2UgdGhlIGNyZWF0aW9uIG9mIGFuIE1ESU8gZGV2aWNlIHRoYXQgaGFzICphbnkqIFBIWSBJRCBJIHdhbnQ/IENhbiBJIHNpbXVsYXRlIHRoYXQgcmVnaXN0cmF0aW9uPwoKSSBzZWVtIHRvIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5n4oCmIG1heWJlIGl0IHdhcyBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSYjMzk7dmUgZ290IGEgZmVlbGluZyB0aGVyZSYjMzk7cyBhIGtlcm5lbCBtb2R1bGUgb3V0IHRoZXJlIGRlc2lnbmVkIGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCB0b29scyBhcmUgYXZhaWxhYmxlIGFuZCBpZiB0aGVyZSBpcyBhIHdheSBJIGNhbiBtYWtlIHRoZSBQSFkgZHJpdmVyIHRoaW5rIGl0JiMzOTtzIHRhbGtpbmcgdG8gc29tZXRoaW5nIHJlYWwuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGFyb3VuZCBpbiB0aGF0IGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLiptb2NrdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uKioKCk9rYXksIGZpcnN0IHRob3VnaHQ6IFdoZXJlJiMzOTtzIHRoaXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBmaWxlPyBJdCBzZWVtcyBsaWtlIGEgbm9uZXhpc3RlbnQgcGF0aC4gSG1tLCBtYXliZSBhIHR5cG8/IE5vcGUsIG5vdGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AgZWl0aGVyLiBTbywgYSBiaXQgbW9yZSBkaWdnaW5nIGlzIG5lZWRlZC4KCk15IG5leHQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgbGVnaXRpbWF0ZSB3YXkgdG8gaW5zdGFudGlhdGUgYSBQSFkgZHJpdmVyIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJcyB0aGVyZSBhIGJhY2tkb29yIHZpYSBgc3lzZnNgLCBwZXJoYXBzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBsaWtlIGBtZGlvLWdwaW9gLCBidXQgdGhlIHN0YW5kYXJkIGluc3RhbnRpYXRpb24gcGF0aCBmb3IgUEhZcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBlaXRoZXIgYnkgdGhlIE1BQyBkcml2ZXIgb3IsIG1vcmUgY29tbW9ubHksIHRocm91Z2ggZGV2aWNlIHRyZWUgZGVmaW5pdGlvbnMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCkFoYSwgYSByZWxhdGVkIGlkZWE6IGNhbiBTeXprYWxsZXIsIHRoZSBmdXp6ZXIsIGVmZmVjdGl2ZWx5IHRhcmdldCBQSFkgZHJpdmVycz8gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayBpZiBTeXprYWxsZXIgaW5jbHVkZXMgc3BlY2lmaWMgZGVzY3JpcHRpb25zIGZvciBQSFlzIG9yIE1ESU8gaW50ZXJmYWNlcy4gVGhhdCBjb3VsZCBiZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBOZWVkIHRvIGNoZWNrIGlmIGl0IGhhcyBjb3ZlcmFnZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el8uKm1kaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgb2YgUEhZIERyaXZlcnMgaW4gR3JlcHBlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBob2xkIG9uLCBJIHNob3VsZG4mIzM5O3QgYmUgdXNpbmcgYHN5el9gIHByZWZpeGVzIGluIEdyZXBwZXIgcmlnaHQgbm93LiBJIG5lZWQgdG8gcmV0aGluayB0aGlzIGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRvd24gdGhpcyBwYXRoLCBidXQgbGV0JiMzOTtzIHRha2UgYSBzdGVwIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgZGlyZWN0IHdheSB0byBnZXQgYXQgdGhvc2UgUEhZIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHByYWN0aWNhbCBtZWFucyB0byBoaXQgdGhlbSBpbiB0aGUgY3VycmVudCBzZXR1cC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgd2hldGhlciBvciBub3QgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIGV2ZW4gcmVhY2hhYmxlLgoKRmlyc3QsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBhbnkgUEhZIGRyaXZlcnMgaGF2ZSBgV29ydGhGdXp6aW5nPXRydWVgIHNldC4gSWYgSSBjYW4gaWRlbnRpZnkgY2FuZGlkYXRlcywgdGhhdCYjMzk7cyBzdGVwIG9uZS4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBicm9hZGVyIGlzc3VlLiBIYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVycywgbGlrZSB0aG9zZSBmb3IgTW90b3Jjb21tIG9yIFJlYWx0ZWssIGFyZSB1c3VhbGx5IGRlc2lnbmVkIHRvIHRhbGsgdG8gc3BlY2lmaWMgcGh5c2ljYWwgY2hpcHMgb3ZlciBNRElPLiBUaGUgcHJvYmxlbSBpcywgUUVNVSB0eXBpY2FsbHkgKmRvZXNuJiMzOTt0KiBlbXVsYXRlIHRob3NlIHNwZWNpZmljIE1BQy9QSFkgY29tYmluYXRpb25zIHVubGVzcyBpdCYjMzk7cyBhIHZlcnkgY29tbW9uIG9uZS4gRm9yIGluc3RhbmNlLCBRRU1VIGVtdWxhdGVzIHBvcHVsYXIgbmV0d29yayBjYXJkcy4gVGhlcmVmb3JlLCB1bmxlc3MgUUVNVSYjMzk7cyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZSBzZXR1cCAod2hpY2ggaXQgZG9lc24mIzM5O3QgZm9yIHRoZSBtb3JlIG9ic2N1cmUgUEhZcyksIHRob3NlIGRyaXZlcnMgYXJlLCBpbiBhbGwgbGlrZWxpaG9vZCwgdW5yZWFjaGFibGUgdW5kZXIgbm9ybWFsIFFFTVUgb3BlcmF0aW9uLgoKTm93LCB3YWl0IGEgbWludXRlLCBRRU1VIGRvZXMgZW11bGF0ZSBuZXR3b3JrIGNhcmRzLCBsaWtlIGUxMDAwLCBydGw4MTM5LCBhbmQgdmlydGlvLW5ldC4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGVzZSAqaGF2ZSogdGhlaXIgb3duIGludGVncmF0ZWQgUEhZcy4gVGhlIE1vdG9yY29tbSBleGFtcGxlIEkgbWVudGlvbmVkIGVhcmxpZXIgaXMgYSBzZXBhcmF0ZSwgZGlzY3JldGUgUEhZIGNoaXAuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIHRoYXQgY2FzZS4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB1bmxlc3MgdGhlcmUmIzM5O3MgYSB3YXkgdG8gaW5qZWN0IE1ESU8gdHJhZmZpYyBkaXJlY3RseSBvciBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZcyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIHRoaXMgY29kZSBpcywgZm9yIHRoZSBtb3N0IHBhcnQsIHNpbXBseSB1bnJlYWNoYWJsZS4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIGlmIHRoZXJlJiMzOTtzIGFueSBgbmV0ZGV2c2ltYCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgUEhZcy4gSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgSSBoYXZlIHRvIGNyZWF0ZSB0aGlzIGNhcGFiaWxpdHkgaWYgSSYjMzk7bSBnb2luZyB0byBhY3R1YWxseSBtYWtlIHByb2dyZXNzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldnNpbS4qcGh5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoLTExLSNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoOjEyOiMgV2UgdXNlIG5ldGRldnNpbSBpbnN0ZWFkIG9mIHBoeXNpY2FsIGludGVyZmFjZXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoLTEzLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjcyCgkJCQkJCQlvdXRwdXQ6IDExMgoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIG1vdG9yY29tbS5jKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGBtb3RvcmNvbW0uY2AgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyByZWFjaGFibGUgZm9yIGZ1enppbmcuIE5vdywga25vd2luZyB0aGUga2VybmVsIGFuZCBob3cgU3l6a2FsbGVyIHdvcmtzLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIsIHRoZW4gd2UmIzM5O3JlIGluIHRyb3VibGUuIFNwZWNpZmljYWxseSwgaWYgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHRoYXQmIzM5O3Mgb3V0c2lkZSB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiwgaXQmIzM5O3MgYSBuby1nby4KClRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgc3RhdGVzIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgY29kZSB3aXRoaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnPigJR0aGUga2luZCB0aGF0IGFyZSBsaW5rZWQgdG8gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3ZSYjMzk7cmUgdXNpbmcuIEFuZCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFBIWSBkcml2ZXJzLCBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyLCBsaWtlIHRoaXMgTW90b3Jjb21tIGltcGxlbWVudGF0aW9uLCBhYnNvbHV0ZWx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXQgbmVlZHMgdGhhdCBNb3RvcmNvbW0gUEhZIGNoaXAsIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IHNpbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFNvLCByaWdodCBhd2F5LCB0aGUgYW5zd2VyIHNlZW1zIHByZXR0eSBjbGVhcjogaXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgUEhZcyB0aGF0IFN5emthbGxlciBjb3VsZCBsZXZlcmFnZS4gSSYjMzk7bSBhd2FyZSBvZiBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCwgYnV0IHRoYXQgaGFuZGxlcyBmaXhlZCBQSFlzLCBub3QgYXJiaXRyYXJ5IG9uZXMuIEFuZCBhcyBJIHN1c3BlY3RlZCwgdGhlcmUmIzM5O3Mgbm8gZ2VuZXJpYyBNRElPIGVtdWxhdG9yIGF2YWlsYWJsZSBpbiB0aGUgbWFpbmxpbmUga2VybmVsIHRoYXQgU3l6a2FsbGVyIGlzIHVzaW5nIHRoYXQgd291bGQgbGV0IHVzIHByb2JlIGRpZmZlcmVudCBQSFkgZHJpdmVycyBiYXNlZCBvbiB0aGVpciBJRHMuIEhtbSwgd2hhdCBhYm91dCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWA/IEl0JiMzOTtzIGV4cG9ydGVkLCBidXQgaXQgYXBwZWFycyBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gYG1vdG9yY29tbS5jYC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgdGhlIGVudGlyZSBwYXRjaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBNb3RvcmNvbW0gUEhZIGRyaXZlciwgd2hpY2ggY29uZmlybXMgaXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMuCgpHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCB3ZSBjYW5ub3QgZW11bGF0ZSBpbiBzdGFuZGFyZCBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSB2ZW5kb3Itc3BlY2lmaWMgUEhZIGRyaXZlciAoTW90b3Jjb21tIFlUODgyNCkgYW5kIGFkZHMgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBleGNsdXNpdmVseSBieSBpdC4gUEhZIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAob3Igc3BlY2lmaWMgUUVNVSBlbXVsYXRpb24gd2hpY2ggaXMgbm90IHByZXNlbnQgZm9yIHRoaXMgY2hpcCkgdG8gYmUgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjY6NTEuODQyMTE5NTgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNjEzODQ5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjY6NTEuODQyMTI2MzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTUxNzg0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZjE2NzNkNTE5ZjUyN2JjOGViNGNkMWZmZjVhMzE3YmE5N2QzNzEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTI6MjY6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuaW5kZXggMzM5NmEzOGNmYzBmMi4uZWVmMDQyNmU3MTdiZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSwyNCArMSwzMyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gLypcXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxcbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cXG4gICpcXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgKiBBdXRob3I6IEZyYW5rIFxcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuKyAqIEF1dGhvcjogS3lsZSBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbitcXG4rLyogaW50ZXJuYWwgWVQ4ODI0IFVUUDAgYWRkciBpcyBmaXhlZCBhdCA0ICovXFxuKyNkZWZpbmUgSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAgKDQpXFxuKyNkZWZpbmUgRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAoMClcXG4rXFxuICNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXFx0XFx0MHgwMDAwMDExYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcXHRcXHQweDRmNTFlOTI4XFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1xcdFxcdDB4NGY1MWU5MWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXFx0XFx0MHg0ZjUxZWExOVxcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcXHRcXHQweDRmNTFlOGI4XFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xcbiAgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTMwLDYgKzM5LDE4IEBAXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICovXFxuIFxcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4rICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRGSUJFUiBNSUlcXHQgICAgICAgIHxcXG4rICogfFxcdFVUUCBNTURcXHRcXHRcXHR8XFx0XFx0XFx0XFx0fFxcbisgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdEZJQkVSIEV4dGVuZGVkXFx0XFx0fFxcbisgKiB8XFx0VVRQIFRvcCBFeHRlbmRlZFxcdHxcXHRGSUJFUiBUb3AgRXh0ZW5kZWRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFxcdFxcdENvbW1vbiBUb3AgRXh0ZW5kZWRcXHRcXHRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICovXFxuK1xcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiBcXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xcbkBAIC0zNzYsNiArMzk3LDE3IEBAXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVxcdDBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFxcdFxcdDFcXG4gXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1xcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcXHRcXHQoMHgxKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVxcdFxcdFxcdCgweDApXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXFx0XFx0MHgxXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFxcdFxcdDB4MFxcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDE1LCAxMylcXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFU1RfTU9ERSh4KVxcdEZJRUxEX1BSRVAoWVQ4ODI0X1VUUF9URVNUX01PREVfTSwgKHgpKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5NCw2ICs0MjYsMTMgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbitcXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUCBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xcbitcXHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XFxuK307XFxuK1xcbiAvKipcXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNDMyLDYgKzQ3MSw4OCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soKSAtIHJlYWQgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCByZWdudW0pO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXFxuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxcbitcXHRcXHRcXHQgICAgICAgdTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbisvKipcXG4rICogcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jaygpIC0gd3JpdGUgcGFnZSBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgXFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK1xcdHJldCB8PSAocGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTYxNywxNSArNzM4LDEwMDMgQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG4gXFx0XFx0bWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7XFxuIFxcdFxcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgMCk7XFxuIFxcbi1cXHRcXHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cXG4tXFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXFxuLVxcdFxcdFxcdFxcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xcbitcXHRcXHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cXG4rXFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXFxuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcbitcXHRyZXR1cm4gb2xkX3BhZ2UgXFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0dTE2IGRhdGE7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRfcGFnZTtcXG4rXFx0ZGF0YSA9IG9sZF9wYWdlIFxcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcXG4rXFx0ZGF0YSB8PSBwYWdlO1xcbitcXG4rXFx0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xcbitcXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFU1RfTU9ERShZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHNkcyBzb2Z0cmVzZXQgYW5kIGVuYWJsZSBpc29sYXRlICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgXFx1MDAyNiB+Qk1DUl9JU09MQVRFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuK1xcdFxcdFxcdFxcdCAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIGVuYWJsZSBuaWJibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiByZXNldCAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFU1RfTU9ERShZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xcbitcXHRpbnQgcG9ydDtcXG4rXFx0aW50IHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVxcdTAwM2VvZmZzZXQ7XFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHJlYWQgZWZ1c2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzEgPSByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMiA9IHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8zID0gcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgPT0gMCkge1xcbitcXHRcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCBWQ08gKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDI5KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcXG4rXFx0XFx0dG1wID0gKHZhbF8xIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFxcdTAwM2VcXHUwMDNlIDY7XFxuK1xcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0XFx0cmV0IHw9IHRtcDtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdFxcdHRtcCA9ICh2YWxfMyBcXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcXG4rXFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBTZXJkZXMgTERPICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xcbitcXHRcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXFx1MDAzZVxcdTAwM2UgMjtcXG4rXFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgNCk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XFxuK1xcdFxcdHRtcCA9ICh2YWxfMiBcXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcXHUwMDNlXFx1MDAzZSA1O1xcbitcXHRcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiNCwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXFx1MDAzZSA4ICovXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0IFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuK1xcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcXG4rXFx0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiByZXNldCBzZXJkZXMgKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogcG93ZXIgZG93biAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAyLjVHIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMDAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMCB0ZW1wYXRlIE1BVSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIEVNQyBDUyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4gXFxuLWVycl9yZXN0b3JlX3BhZ2U6XFxuLVxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuQEAgLTMwNjYsNiArNDE3NSw0MDAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODIxX2dldF9mZWF0dXJlcyhwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiBsaW5rIHN0YXR1cyBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IGxpbmsgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGxpbmsgPSAhIShyZXQgXFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFx0cmV0dXJuIGxpbms7XFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cXG4rICogQGxwYTogbGluayBwYXJ0bmVyIGFkdmVydGlzaW5nLlxcbisgKlxcbisgKiBSZXR1cm5zOiAxICh1dHAgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSk7XFxuK1xcdCpscGEgPSByZXQ7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0KnN0YXR1cyA9IHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSAhISgqc3RhdHVzIFxcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgbGluaztcXG4rXFx0aW50IGxwYTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZWFzeW1fcGF1c2UgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2YWwsIFxcdTAwMjZscGEpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0aWYgKGxpbmsgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbGluaztcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbGluayA9IDE7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAhIShscGEgXFx1MDAyNiBCSVQoMTApKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFxcdTAwMjYgQklUKDExKSk7XFxuK1xcbitcXHRcXHQvKiB1cGRhdGUgc3BlZWQgXFx1MDAyNiBkdXBsZXggKi9cXG4rXFx0XFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiB8IEJNQ1JfSVNPTEFURSwgMHgwKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHBoeV9jdHJsID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG4rXFx0XFx0XFx0XFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGh5X2N0cmwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xcbitcXHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xcbitcXG4rXFx0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7XFxuK1xcdHByaXYtXFx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwO1xcbitcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcXFwibW90b3Jjb21tLGludGVyZmFjZS1tb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcXG4rXFx0XFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXFxuK1xcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZW9mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXFxuK1xcdFxcdFxcdFxcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxcbitcXHRcXHRcXHRcXHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbkBAIC0zMTUyLDEzICs0NjU1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbiBcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjFfcmVzdW1lLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0geXQ4ODI0X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxcbitcXHRcXHQucHJvYmVcXHRcXHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODI0X2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldFxcdFxcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0XFx0PSB5dDg4MjRfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODI0X3Jlc3VtZSxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XFxuIFxcbi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGV0ZXIgR2Vpc1xcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJGcmFua1xcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJLeWxlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbkBAIC0zMTY4LDYgKzQ2ODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuK1xcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sXFxuIFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5pbmRleCA4NzA5MjAzMTFmOWEwLi4yYTdmM2YwZmNlZjgyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuQEAgLTE0MDgsNiArMTQwOCwyMyBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbiBcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDdcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXFxuKyAqXFx0cmVhZC93cml0ZSBlcnJvcikuXFxuKyAqL1xcbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxcbit7XFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXFxuK1xcdFxcdFxcdE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX1RFTVBMQVRFLCB0ZXN0X21vZGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xcbitcXG4gLyoqXFxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi5kYTQ4MmU4NDMxYTAyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuQEAgLTIzMzksNiArMjMzOSw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5pbmRleCAwNmY0YmMzYzIwYzcxLi43NDM0Y2Q1NzI5NTQ2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTYzLDYgKzYzLDggQEBcXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXFx0MTMwXFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcXHUwMDI2IHBvbGFyaXR5ICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcXHQxMzFcXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMlxcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfVEVNUExBVEUgMHhFMDAwIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlxcdDEzM1xcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXFxuIFxcdFxcdFxcdFxcdFxcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlxcdDE0N1xcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI2OjUyLjM5OTUyNDc0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyNTAzOTM2ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyIChNb3RvcmNvbW0gWVQ4ODI0KSBhbmQgYWRkcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IGl0LiBQSFkgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChvciBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgcHJlc2VudCBmb3IgdGhpcyBjaGlwKSB0byBiZSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmMTY3M2Q1MTlmNTI3YmM4ZWI0Y2QxZmZmNWEzMTdiYTk3ZDM3MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEyOjI2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCAzMzk2YTM4Y2ZjMGYyLi5lZWYwNDI2ZTcxN2JkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICsxLDMzIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4rICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbitcbisvKiBpbnRlcm5hbCBZVDg4MjQgVVRQMCBhZGRyIGlzIGZpeGVkIGF0IDQgKi9cbisjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfQUREUl9VVFAwICAgICg0KVxuKyNkZWZpbmUgRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDAgICAoMClcbitcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0zMCw2ICszOSwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbisgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKiB8XHRVVFAgTUlJXHRcdFx0fFx0RklCRVIgTUlJXHQgICAgICAgIHxcbisgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuKyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4rICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0RklCRVIgVG9wIEV4dGVuZGVkXHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKi9cbitcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zNzYsNiArMzk3LDE3IEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXHRcdCgweDEpXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXHRcdDB4MVxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFx0XHQweDBcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFX01cdFx0XHRHRU5NQVNLKDE1LCAxMylcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVTVF9NT0RFKHgpXHRGSUVMRF9QUkVQKFlUODgyNF9VVFBfVEVTVF9NT0RFX00sICh4KSlcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXHRcdFx0QklUKDEzKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1x0XHQoMHg3KVxuK1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk0LDYgKzQyNiwxMyBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0dTggcmVnX3BhZ2U7XG4gfTtcbiBcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcbitcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbitcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4rXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUCBvcGVyYXRpb24gaXNvbGF0aW9uIGR1cmluZyBzd2FwIHJlZyBzcGFjZSAqL1xuK1x0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xuK307XG4rXG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNDMyLDYgKzQ3MSw4OCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbit9XG4rXG4rLyoqXG4rICogeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jaygpIC0gcmVhZCB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuK1x0XHRcdCAgICAgICB1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuK31cbitcbisvKipcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbitcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xuK1xuK2VycjpcbitcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjE3LDE1ICs3MzgsMTAwMyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRtYXNrID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUUEhZX1dPTF9DT05GSUdfUkVHLCBtYXNrLCAwKTtcbiBcbi1cdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4tXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuLVx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4rXHRcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xuK1x0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbitcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvbGRfcGFnZTtcbitcbitcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0dTE2IGRhdGE7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvbGRfcGFnZTtcbitcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbitcdGRhdGEgfD0gcGFnZTtcbitcbitcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCByO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuK1x0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcbisgKiBhbmQgc2RzIHNvZnRyZXNldC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHJldCA9IC0xO1xuK1x0aW50IHI7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBlbmFibGUgaXNvbGF0ZSAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIFx1MDAyNiB+Qk1DUl9JU09MQVRFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHQgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogcG93ZXIgZG93biAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHJlc2V0ICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuK1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbitcdGludCBwb3J0O1xuK1x0aW50IHZhbDtcbitcdGludCByZXQ7XG4rXHRpbnQgcjtcbitcbitcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtXHUwMDNlb2Zmc2V0O1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcmVhZCBlZnVzZSAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8xID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8yID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8zID0gcmV0O1xuK1xuK1x0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIGFuYWxvZyBDRFIgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCBWQ08gKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cbitcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDI5KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ0MSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4rXHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFx1MDAzZVx1MDAzZSA0O1xuK1x0XHRyZXQgfD0gdG1wO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJiKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogU2VyZGVzIExETyAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuK1x0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDQpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGI0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4rXHRcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuK1x0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjQsIHJldCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK1x0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4rXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbitcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xuK1x0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcmVzZXQgc2VyZGVzICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0ciA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMTAwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMTAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBFTUMgUkUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVTVF9NT0RFKFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHJlc2V0ICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URVNUX01PREUoWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCkpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0XHRnb3RvIGVycjtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnI7XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xuIFxuLWVycl9yZXN0b3JlX3BhZ2U6XG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCIsXG4rXHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHJldHVybiByZXQ7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuQEAgLTMwNjYsNiArNDE3NSw0MDAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbisvKipcbisgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IGxpbmsgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbitcbitcdHBoeWRldl9kYmcocGh5ZGV2LCBcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwiLFxuK1x0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciwgbGluayk7XG4rXHRyZXR1cm4gbGluaztcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cbisgKiBAbHBhOiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNpbmcuXG4rICpcbisgKiBSZXR1cm5zOiAxICh1dHAgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTFBBKTtcbitcdCpscGEgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdCpzdGF0dXMgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gISEoKnN0YXR1cyBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgbGluaztcbitcdGludCBscGE7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbitcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gMDtcbitcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbitcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4rXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2bHBhKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdGlmIChsaW5rIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gbGluaztcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTApKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuK1xuK1x0XHQvKiB1cGRhdGUgc3BlZWQgXHUwMDI2IGR1cGxleCAqL1xuK1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuK1x0XHRcdFx0ICAgICBwaHlfY3RybCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XG4rXHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xuK1xuK1x0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcbitcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4rXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVwiLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuK1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4rXHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuK1x0XHRcdHByaXYtXHUwMDNlb2Zmc2V0ID0gRVhURVJOQUxfUEhZODgyNF9BRERSX1VUUDA7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcbitcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xuK1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X0FERFJfVVRQMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTUyLDEzICs0NjU1LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcbitcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4rXHRcdC5wcm9iZVx0XHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4rXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjRfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbitcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMTY4LDYgKzQ2ODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uMmE3ZjNmMGZjZWY4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgKzE0MDgsMjMgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgN1xuKyAqXG4rICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIFRlc3QgbW9kZSAxIHRvIFRlc3QgbW9kZSA3XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcbisgKlx0cmVhZC93cml0ZSBlcnJvcikuXG4rICovXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbit7XG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuK1x0XHRcdE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX1RFTVBMQVRFLCB0ZXN0X21vZGUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggNWY4ZDY1ODY4ZTBmZi4uZGE0ODJlODQzMWEwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzM5LDYgKzIzMzksNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uNzQzNGNkNTcyOTU0NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICs2Myw4IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9URU1QTEFURSAweEUwMDAgLyogVGVtcGxhdGUgdGVzdCBtb2RlICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcdDEzM1x0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cbiBcdFx0XHRcdFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcdDE0N1x0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI2OjUyLjM5OTUyODUwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NDE5NjcwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgRHJpdmVyIFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkgZHJpdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBhbmQgYSBuZXcgaGVscGVyIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gIEl0IGFsc28gdG91Y2hlcyBzb21lIGluY2x1ZGUgZmlsZXMuICBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBzeXprYWxsZXI/ICBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcHJvYmUgdGhpcyB0aGluZy5cblxuUGh5IGRyaXZlcnMsIHJpZ2h0LCB0eXBpY2FsbHkgcHJvYmUgb3ZlciB0aGUgTURJTyBidXMuICBTbywgY2FuIHdlIGVtdWxhdGUgYW4gTURJTyBidXMgYW5kIGdldCB0aGlzIFlUODgyNCBkcml2ZXIgbG9hZGVkIGluIGEgc3l6a2FsbGVyIGNvbnRleHQ/ICBTeXprYWxsZXIgdXNlcyBgdHVuYC9gdGFwYCBvciBgdmV0aGAgZm9yIG5ldHdvcmtpbmcsIGJ1dCBkb2VzIGl0IGRvIGFueXRoaW5nIHdpdGggTURJTyBkZXZpY2VzLCBkaXJlY3RseT8gSG1tLCBpdCBkb2VzIGhhdmUgc29tZSBzdXBwb3J0IGZvciBQSFkgYW5kIE1ESU8gdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gIG9yIG1heWJlIGBuZXRkZXZzaW1gLlxuXG5XYWl0IGEgbWludXRlLCBgbmV0ZGV2c2ltYCBtaWdodCBub3QgZGlyZWN0bHkgcHJvYmUgKmFyYml0cmFyeSogUEhZIGRyaXZlcnMgdW5sZXNzIHdlIGNhbiByZWdpc3RlciBhbiBNRElPIGRldmljZS4gIFRoYXQncyB0aGUga2V5LiAgQW5kLCBob2xkIG9uLCBzeXprYWxsZXIgKmdlbmVyYWxseSogZG9lc24ndCBlbXVsYXRlIHRoZSBmdWxsIGhhcmR3YXJlIGZvciBQSFlzLCByaWdodD8gV2UgaGF2ZSBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYG5ldGRldnNpbWAgZm9yIG5ldGRldnMuXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIHRyaWdnZXIgdGhlIFBIWSBkcml2ZXIgdG8gcHJvYmUgdXNpbmcgc29tZSBraW5kIG9mIHZpcnR1YWwgTURJTyBidXM/ICBBcmUgdGhlcmUgYW55IGZhY2lsaXRpZXMgbGlrZSBgbWRpby1tb2NrdXBgIG9yIGBtZGlvLWdwaW9gIGF2YWlsYWJsZT8gIFRoaXMgaXMgbXkgY3JpdGljYWwgcGF0aC5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AgaGFzIGJlZW4gZnV6emVkIG9yIHJlYWNoZWQgYWxyZWFkeS4gVGhlIHF1aWNrZXN0IHRoaW5nIGlzIHRvIHVzZSBgZ3JlcHBlcmAgYW5kIHNlZSBpZiBhbnkgdmlydHVhbCBNRElPIGJ1cyBvciBpZiB0aGUgYG1vdG9yY29tbWAgc3VwcG9ydCBpcyBlbmFibGVkIGluIHRoZSBzeXprYWxsZXIgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB3ZSdyZSBhdCwgYW5kIHdoYXQncyBwb3NzaWJsZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQyMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjAxLjk0MTQ5OTkwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwMjQyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NT1RPUkNPTU1fUEhZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9NjI2PUNPTkZJR19UWEdCRT15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTYyOC0jIENPTkZJR19ORVRfVkVORE9SX1hJTElOWCBpcyBub3Qgc2V0XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo2Mjk6Q09ORklHX01PVE9SQ09NTV9QSFk9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctNjMwLUNPTkZJR19QUFA9bVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz02NDI9Q09ORklHX1RYR0JFPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctNjQ0LSMgQ09ORklHX05FVF9WRU5ET1JfWElMSU5YIGlzIG5vdCBzZXRcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjY0NTpDT05GSUdfTU9UT1JDT01NX1BIWT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02NDYtQ09ORklHX1BQUD1tXFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTE0ND1DT05GSUdfTUlDUk9TRU1JX1BIWT15XFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzoxNDU6Q09ORklHX01PVE9SQ09NTV9QSFk9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctMTQ2LUNPTkZJR19JTlBVVF9NT1VTRURFVj15XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9ODM9b2JqLSQoQ09ORklHX01JQ1JPU0VNSV9QSFkpXFx0Kz0gbXNjYy9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6ODQ6b2JqLSQoQ09ORklHX01PVE9SQ09NTV9QSFkpXFx0Kz0gbW90b3Jjb21tLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtODUtb2JqLSQoQ09ORklHX05BVElPTkFMX1BIWSlcXHQrPSBuYXRpb25hbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjA2LjYxMTc0OTE5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjkyNDA4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFkgRHJpdmVyIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gdGhlIFBIWSBkcml2ZXIgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIGEgZmV3IG9mIHRoZSBkZWZjb25maWdzIHdlIHVzZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogY2FuIGl0IGFjdHVhbGx5IGJlICpyZWFjaGVkKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgUUVNVT8gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LlxuXG5JIGtub3cgdGhlIHVzdWFsIGRhbmNlLiBQSFkgZHJpdmVycyB0eXBpY2FsbHkgZ2V0IHByb2JlZCB3aGVuIGFuIE1ESU8gYnVzIHJlZ2lzdGVycyBhIFBIWSBkZXZpY2UsIGFuZCwgY3J1Y2lhbGx5LCB0aGF0IGRldmljZSBoYXMgYSBQSFkgSUQgdGhhdCAqbWF0Y2hlcyogd2hhdCB0aGUgZHJpdmVyIGlzIGV4cGVjdGluZy4gU28sIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXM6IGNhbiBJIHNvbWVob3csIGZyb20gdXNlciBzcGFjZSwgZm9yY2UgdGhlIGNyZWF0aW9uIG9mIGFuIE1ESU8gZGV2aWNlIHRoYXQgaGFzICphbnkqIFBIWSBJRCBJIHdhbnQ/IENhbiBJIHNpbXVsYXRlIHRoYXQgcmVnaXN0cmF0aW9uP1xuXG5JIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBzb21ldGhpbmfigKYgbWF5YmUgaXQgd2FzIGluIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBhIGtlcm5lbCBtb2R1bGUgb3V0IHRoZXJlIGRlc2lnbmVkIGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCB0b29scyBhcmUgYXZhaWxhYmxlIGFuZCBpZiB0aGVyZSBpcyBhIHdheSBJIGNhbiBtYWtlIHRoZSBQSFkgZHJpdmVyIHRoaW5rIGl0J3MgdGFsa2luZyB0byBzb21ldGhpbmcgcmVhbC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBhcm91bmQgaW4gdGhhdCBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcwNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjExLjM0MDk5NDAwNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDkzMjg2NTYyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLiptb2NrdXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjI3OjE2LjQzNDI5NDE5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzE0NDIzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFkgRHJpdmVyIEluc3RhbnRpYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aG91Z2h0OiBXaGVyZSdzIHRoaXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBmaWxlPyBJdCBzZWVtcyBsaWtlIGEgbm9uZXhpc3RlbnQgcGF0aC4gSG1tLCBtYXliZSBhIHR5cG8/IE5vcGUsIG5vdGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AgZWl0aGVyLiBTbywgYSBiaXQgbW9yZSBkaWdnaW5nIGlzIG5lZWRlZC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55IGxlZ2l0aW1hdGUgd2F5IHRvIGluc3RhbnRpYXRlIGEgUEhZIGRyaXZlciBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gSXMgdGhlcmUgYSBiYWNrZG9vciB2aWEgYHN5c2ZzYCwgcGVyaGFwcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgbGlrZSBgbWRpby1ncGlvYCwgYnV0IHRoZSBzdGFuZGFyZCBpbnN0YW50aWF0aW9uIHBhdGggZm9yIFBIWXMgaXMgdHlwaWNhbGx5IGhhbmRsZWQgZWl0aGVyIGJ5IHRoZSBNQUMgZHJpdmVyIG9yLCBtb3JlIGNvbW1vbmx5LCB0aHJvdWdoIGRldmljZSB0cmVlIGRlZmluaXRpb25zLiBUaGF0J3MgdXN1YWxseSB0aGUgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS5cblxuQWhhLCBhIHJlbGF0ZWQgaWRlYTogY2FuIFN5emthbGxlciwgdGhlIGZ1enplciwgZWZmZWN0aXZlbHkgdGFyZ2V0IFBIWSBkcml2ZXJzPyBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIGlmIFN5emthbGxlciBpbmNsdWRlcyBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgZm9yIFBIWXMgb3IgTURJTyBpbnRlcmZhY2VzLiBUaGF0IGNvdWxkIGJlIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5lZWQgdG8gY2hlY2sgaWYgaXQgaGFzIGNvdmVyYWdlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzoyMi4yNjU3Mzk2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMwNzk1MDg3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfLiptZGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzoyNy41OTY1NDI5MjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMyNDk3Nzk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IG9mIFBIWSBEcml2ZXJzIGluIEdyZXBwZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGhvbGQgb24sIEkgc2hvdWxkbid0IGJlIHVzaW5nIGBzeXpfYCBwcmVmaXhlcyBpbiBHcmVwcGVyIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHJldGhpbmsgdGhpcyBhcHByb2FjaC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkb3duIHRoaXMgcGF0aCwgYnV0IGxldCdzIHRha2UgYSBzdGVwIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSdzIGEgbW9yZSBkaXJlY3Qgd2F5IHRvIGdldCBhdCB0aG9zZSBQSFkgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHByYWN0aWNhbCBtZWFucyB0byBoaXQgdGhlbSBpbiB0aGUgY3VycmVudCBzZXR1cC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgd2hldGhlciBvciBub3QgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIGV2ZW4gcmVhY2hhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIGFueSBQSFkgZHJpdmVycyBoYXZlIGBXb3J0aEZ1enppbmc9dHJ1ZWAgc2V0LiBJZiBJIGNhbiBpZGVudGlmeSBjYW5kaWRhdGVzLCB0aGF0J3Mgc3RlcCBvbmUuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIGJyb2FkZXIgaXNzdWUuIEhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXJzLCBsaWtlIHRob3NlIGZvciBNb3RvcmNvbW0gb3IgUmVhbHRlaywgYXJlIHVzdWFsbHkgZGVzaWduZWQgdG8gdGFsayB0byBzcGVjaWZpYyBwaHlzaWNhbCBjaGlwcyBvdmVyIE1ESU8uIFRoZSBwcm9ibGVtIGlzLCBRRU1VIHR5cGljYWxseSAqZG9lc24ndCogZW11bGF0ZSB0aG9zZSBzcGVjaWZpYyBNQUMvUEhZIGNvbWJpbmF0aW9ucyB1bmxlc3MgaXQncyBhIHZlcnkgY29tbW9uIG9uZS4gRm9yIGluc3RhbmNlLCBRRU1VIGVtdWxhdGVzIHBvcHVsYXIgbmV0d29yayBjYXJkcy4gVGhlcmVmb3JlLCB1bmxlc3MgUUVNVSdzIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIHNldHVwICh3aGljaCBpdCBkb2Vzbid0IGZvciB0aGUgbW9yZSBvYnNjdXJlIFBIWXMpLCB0aG9zZSBkcml2ZXJzIGFyZSwgaW4gYWxsIGxpa2VsaWhvb2QsIHVucmVhY2hhYmxlIHVuZGVyIG5vcm1hbCBRRU1VIG9wZXJhdGlvbi5cblxuTm93LCB3YWl0IGEgbWludXRlLCBRRU1VIGRvZXMgZW11bGF0ZSBuZXR3b3JrIGNhcmRzLCBsaWtlIGUxMDAwLCBydGw4MTM5LCBhbmQgdmlydGlvLW5ldC4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlICpoYXZlKiB0aGVpciBvd24gaW50ZWdyYXRlZCBQSFlzLiBUaGUgTW90b3Jjb21tIGV4YW1wbGUgSSBtZW50aW9uZWQgZWFybGllciBpcyBhIHNlcGFyYXRlLCBkaXNjcmV0ZSBQSFkgY2hpcC4gU28sIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgaW4gdGhhdCBjYXNlLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdW5sZXNzIHRoZXJlJ3MgYSB3YXkgdG8gaW5qZWN0IE1ESU8gdHJhZmZpYyBkaXJlY3RseSBvciBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZcyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIHRoaXMgY29kZSBpcywgZm9yIHRoZSBtb3N0IHBhcnQsIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuT2theSwgbGV0J3MgZXhwbG9yZSBpZiB0aGVyZSdzIGFueSBgbmV0ZGV2c2ltYCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgUEhZcy4gSSBuZWVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgSSBoYXZlIHRvIGNyZWF0ZSB0aGlzIGNhcGFiaWxpdHkgaWYgSSdtIGdvaW5nIHRvIGFjdHVhbGx5IG1ha2UgcHJvZ3Jlc3MgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0ODAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6Mjc6NDAuOTIxNTI0MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTQ0NjYyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2c2ltLipwaHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2lwc2VjX29mZmxvYWQuc2gtMTEtI1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHNlY19vZmZsb2FkLnNoOjEyOiMgV2UgdXNlIG5ldGRldnNpbSBpbnN0ZWFkIG9mIHBoeXNpY2FsIGludGVyZmFjZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfaXBzZWNfb2ZmbG9hZC5zaC0xMy0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzo0NS43MTU5OTg5MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4NzQwMDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIG1vdG9yY29tbS5jKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbW90b3Jjb21tLmNgIGZpbGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgaXQncyByZWFjaGFibGUgZm9yIGZ1enppbmcuIE5vdywga25vd2luZyB0aGUga2VybmVsIGFuZCBob3cgU3l6a2FsbGVyIHdvcmtzLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBIWSBkcml2ZXIsIHRoZW4gd2UncmUgaW4gdHJvdWJsZS4gU3BlY2lmaWNhbGx5LCBpZiBpdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIHZlcnkgc3BlY2lmaWMgUUVNVSBlbXVsYXRpb24gdGhhdCdzIG91dHNpZGUgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGl0J3MgYSBuby1nby5cblxuVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzdGF0ZXMgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBjb2RlIHdpdGhpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc+KAlHRoZSBraW5kIHRoYXQgYXJlIGxpbmtlZCB0byBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXNuJ3QgZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2UncmUgdXNpbmcuIEFuZCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFBIWSBkcml2ZXJzLCBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyLCBsaWtlIHRoaXMgTW90b3Jjb21tIGltcGxlbWVudGF0aW9uLCBhYnNvbHV0ZWx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXQgbmVlZHMgdGhhdCBNb3RvcmNvbW0gUEhZIGNoaXAsIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXMgbm90IHNpbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFNvLCByaWdodCBhd2F5LCB0aGUgYW5zd2VyIHNlZW1zIHByZXR0eSBjbGVhcjogaXQncyBub3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgUEhZcyB0aGF0IFN5emthbGxlciBjb3VsZCBsZXZlcmFnZS4gSSdtIGF3YXJlIG9mIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgLCBidXQgdGhhdCBoYW5kbGVzIGZpeGVkIFBIWXMsIG5vdCBhcmJpdHJhcnkgb25lcy4gQW5kIGFzIEkgc3VzcGVjdGVkLCB0aGVyZSdzIG5vIGdlbmVyaWMgTURJTyBlbXVsYXRvciBhdmFpbGFibGUgaW4gdGhlIG1haW5saW5lIGtlcm5lbCB0aGF0IFN5emthbGxlciBpcyB1c2luZyB0aGF0IHdvdWxkIGxldCB1cyBwcm9iZSBkaWZmZXJlbnQgUEhZIGRyaXZlcnMgYmFzZWQgb24gdGhlaXIgSURzLiBIbW0sIHdoYXQgYWJvdXQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgPyBJdCdzIGV4cG9ydGVkLCBidXQgaXQgYXBwZWFycyBpdCdzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW90b3Jjb21tLmNgLiBUaGlzIHN0cm9uZ2x5IGluZGljYXRlcyB0aGUgZW50aXJlIHBhdGNoIGlzIGRlZGljYXRlZCB0byB0aGlzIE1vdG9yY29tbSBQSFkgZHJpdmVyLCB3aGljaCBjb25maXJtcyBpdCdzIGhhcmR3YXJlLXNwZWNpZmljLlxuXG5HaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IHdlIGNhbm5vdCBlbXVsYXRlIGluIHN0YW5kYXJkIFFFTVUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjcyLCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyNzo1NC45MDM0MDIyMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBQSFkgZHJpdmVyIChNb3RvcmNvbW0gWVQ4ODI0KSBhbmQgYWRkcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IGl0LiBQSFkgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChvciBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgcHJlc2VudCBmb3IgdGhpcyBjaGlwKSB0byBiZSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgKE1vdG9yY29tbSBZVDg4MjQpIGFuZCBhZGRzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZXhjbHVzaXZlbHkgYnkgaXQuIFBIWSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKG9yIHNwZWNpZmljIFFFTVUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZvciB0aGlzIGNoaXApIHRvIGJlIHByb2JlZCB2aWEgdGhlIE1ESU8gYnVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowpqhh4[1] Phase: Running StartedAt: 2026-08-04 12:28:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqhh4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 12:28:07 +0000 UTC FinishedAt: 2026-08-04 12:28:13 +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,}