Name: series-workflow8fh9g Phase: Failed StartedAt: 2026-09-04 03:32:15 +0000 UTC FinishedAt: 2026-09-04 03:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fh9g[0] Phase: Succeeded StartedAt: 2026-09-04 03:32:15 +0000 UTC FinishedAt: 2026-09-04 03:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fh9g[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 03:32:15 +0000 UTC FinishedAt: 2026-09-04 03:49:39 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWU4YjQxN2E1ZjI2Mjg1YWZjMTM1ZTllNThkMjg3MjUzNjU1YWM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDM6NDk6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5pbmRleCAzM2E2NTUyZTQ2ZmMwLi45M2JhNWIxODEyMDViIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBkZXNjcmlwdGlvbjogfFxuIFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxuIFxuJiM0MzsgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXG4mIzQzOyAgTEVEcyBzdHJ1Y3R1cmUuXG4mIzQzO1xuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxuQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuIFxuICAgICBtZGlvIHtcbiAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbkBAIC0xMTMsNiAmIzQzOzExNywyNSBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gXCYjMzQ7bGFuMVwmIzM0OztcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCYjMzQ7aW50ZXJuYWxcJiMzNDs7XG4gICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c3dfcGh5MFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgbGVkcyB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICB9O1xuIFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGZjMzIwYjM3MzY1NmYuLmIyM2ZiNmYyZjRlZjQgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xODQxNiw3ICYjNDM7MTg0MTYsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXG4gRjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG4gXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggNjc2ZmI3ZGZmZTE0Zi4uOGQ4ZWRjZjg5ZjEwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTgyLDYgJiM0Mzs4Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTY4LDEyICYjNDM7MTcwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCA2Y2ViNzhhNzU1ZDc3Li5kZjg0OWNkMGU2NDBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNSwxMSAmIzQzOzE1LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5Y2RkNzlhMWZkMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMTcgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwmIzM0O1xuJiM0MztcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbiYjNDM7XHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbiYjNDM7XHQgIGNoaXAuXG4mIzQzO1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xuJiM0MztcdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IHlcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbiYjNDM7XHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWViMTJjYjkxZjkzNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhLi5kNjYzYWYwMTBmNDMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuQEAgLTEzLDcgJiM0MzsxMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9oc3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG5AQCAtMjYsNyAmIzQzOzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCYjMzQ7eXQ5MjF4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xlZHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbWkuaFwmIzM0O1xuIFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcJiMzNDt5dDkyMXhcJiMzNDtcbi1cbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXHQ0MDk1XG4gXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuLVxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4gICpcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG5AQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuLSAqXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbi0gKi9cbi1cbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuLXtcbi1cdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4tXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuLVx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4tXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4tXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xuQEAgLTQ0MzAsNiAmIzQzOzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKVxuIFx0cmV0dXJuIHl0OTIxeF9lZGF0YV9yZWFkX2NvbnQocHJpdiwgYWRkciwgdmFscCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbkBAIC00Nzg2LDYgJiM0Mzs0NTg5LDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY2LDYgJiM0Mzs0Njc1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQucG9ydF9hZGRfZHNjcF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9hZGRfZHNjcF9wcmlvLFxuICNlbmRpZlxuIFx0LyogY2hpcCAqL1xuJiM0MztcdC50ZWFyZG93blx0XHQ9IHl0OTIxeF9kc2FfdGVhcmRvd24sXG4gXHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1ZjNiOTllMTg5YzQxLi44M2NkNDU0OTU1ZGRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICYjNDM7ODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXHQxMFxuJiM0MztcbiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTM4LDYgJiM0Mzs5NDMsMTYgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHlfbWFzaztcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9jeWNsZV9tYXNrO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzdmNmViODM0ZDZkM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDY2NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1xuJiM0MztcdC8qIE5vIHJldm9raW5nIC0gTEVEIGlzIHNhY3JpZmljZWQgaW4gY2FzZSBvZiBJTyBlcnJvciAqL1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayBcdTAwMjY9IH5CSVQoZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gKHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2IH5CSVQoZ3JvdXApKSA/IHBwLVx1MDAzZWxlZF9kdXR5IDpcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIGlmICghKm9ucCB8fCAhKm9mZnApIHtcbiYjNDM7XHRcdHJldHVybiB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgKm9ucCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcdTAwMjZjeWNsZSwgXHUwMDI2ZHV0eSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrIFx1MDAyNiB+QklUKGdyb3VwKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGlmIChkdXR5ICE9IHBwLVx1MDAzZWxlZF9kdXR5IFx1MDAyNlx1MDAyNiAocHAtXHUwMDNlbGVkX2R1dHlfbWFzayBcdTAwMjYgfkJJVChncm91cCkpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayBcdTAwMjY9IH5CSVQoZ3JvdXApO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRpZiAodmFsICE9IGN0cmwpIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuJiM0MztcdFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSB2YWwgXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxuJiM0MztcdFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcbiYjNDM7XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrIHw9IEJJVChncm91cCk7XG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHR9XG4mIzQzO1x0cHAtXHUwMDNlbGVkX2R1dHlfbWFzayB8PSBCSVQoZ3JvdXApO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4mIzQzO1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbiYjNDM7XHRcdFx0aWYgKCFmbGFncylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxuJiM0MztcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbiYjNDM7XHRcdCpmbGFnc3AgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbiYjNDM7XHRcdFx0KmZsYWdzcCB8PSBtYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4mIzQzO1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbiYjNDM7XHRcdFx0Y3RybCB8PSBtYXAtXHUwMDNlbWFzaztcbiYjNDM7XHRcdFx0aWYgKCFmbGFncylcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eV9tYXNrIFx1MDAyNj0gfkJJVChncm91cCk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKVxuJiM0MztcdFx0cmV0dXJuICFkcC1cdTAwM2V1c2VyID8gTlVMTCA6IFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0MztcdGlmIChkc2FfcG9ydF9pc19jcHUoZHApKVxuJiM0MztcdFx0cmV0dXJuICFkcC1cdTAwM2Vjb25kdWl0ID8gTlVMTCA6IFx1MDAyNmRwLVx1MDAzZWNvbmR1aXQtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1xuJiM0MztcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRpbnQgcG9sYXJpdHlfb3JpZztcbiYjNDM7XHRib29sIGFjdGl2ZV9oaWdoO1xuJiM0MztcdGJvb2wgYWN0aXZlX2xvdztcbiYjNDM7XHR1MzIgZm9yY2Vfb3JpZztcbiYjNDM7XHRpbnQgcG9sYXJpdHk7XG4mIzQzO1x0dTMyIGdyb3VwO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0Ym9vbCBvbjtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2Z3JvdXApO1xuJiM0MztcdGlmIChyZXMpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtNaXNzaW5nIExFRCByZWcgZm9yICVwZndcXG5cJiMzNDssIGZ3bm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwmIzM0OywgZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSkge1xuJiM0MztcdFx0cmVzID0gLUVFWElTVDtcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWN0aXZlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWhpZ2hcJiMzNDspO1xuJiM0MztcdGFjdGl2ZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWxvd1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGFjdGl2ZV9oaWdoIFx1MDAyNlx1MDAyNiBhY3RpdmVfbG93KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7TEVEICUwMmQ6JTAydSBjYW5ub3QgYmUgYm90aCBhY3RpdmUtaGlnaCBhbmQgYWN0aXZlLWxvd1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHBvbGFyaXR5ID0gYWN0aXZlX2hpZ2ggPyAxIDogYWN0aXZlX2xvdyA/IC0xIDogMDtcbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZCkge1xuJiM0MztcdFx0cmVzID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXBvcnQgPSBwcDtcbiYjNDM7XHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuJiM0MztcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0cG9sYXJpdHlfb3JpZyA9IDA7XG4mIzQzO1x0aWYgKHBvbGFyaXR5KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBcdTAwMjZ2YWwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0Z290byBlcnJfaW52O1xuJiM0MztcbiYjNDM7XHRcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0Y3RybCA9IHBvbGFyaXR5IFx1MDAzZSAwID8gdmFsIHwgbWFzayA6IHZhbCBcdTAwMjYgfm1hc2s7XG4mIzQzO1x0XHRpZiAoY3RybCAhPSB2YWwpIHtcbiYjNDM7XHRcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGN0cmwpO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX2ludjtcbiYjNDM7XG4mIzQzO1x0XHRcdHBvbGFyaXR5X29yaWcgPSAtcG9sYXJpdHk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JjZV9vcmlnID0gVTMyX01BWDtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyX2xlZDI7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbiYjNDM7XHRcdGN0cmwgPSAodmFsIFx1MDAyNiB+bWFzaykgfFxuJiM0MztcdFx0ICAgICAgIChvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4mIzQzO1x0XHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCkpO1xuJiM0MztcdFx0aWYgKGN0cmwgIT0gdmFsKSB7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY3RybCk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfbGVkMjtcbiYjNDM7XG4mIzQzO1x0XHRcdGZvcmNlX29yaWcgPSB2YWwgXHUwMDI2IG1hc2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcbiYjNDM7XHRcdG9uID0gKHZhbCBcdTAwMjYgbWFzaykgPT0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGxlZF9jZGV2ID0gXHUwMDI2bGVkLVx1MDAzZWNkZXY7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4mIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwmIzM0O25ldGRldlwmIzM0OztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwmIzM0Oy0ldTolMDJkOiUwMnVcJiMzNDssXG4mIzQzO1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4mIzQzO1x0XHQuZndub2RlID0gZndub2RlLFxuJiM0MztcdFx0LmRlZmF1bHRfbGFiZWwgPSBcJiMzNDs6cG9ydFwmIzM0OyxcbiYjNDM7XHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbiYjNDM7XHRcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3JlZ2lzdGVyOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKGZvcmNlX29yaWcgIT0gVTMyX01BWCkge1xuJiM0MztcdFx0cmV0ID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZvcmNlX29yaWcpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O0xFRDJfUE9SVFwmIzM0OywgcG9ydCwgZ3JvdXAsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztlcnJfbGVkMjpcbiYjNDM7XHRpZiAocG9sYXJpdHlfb3JpZykge1xuJiM0MztcdFx0cmV0ID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBvbGFyaXR5X29yaWcgXHUwMDNlIDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O0xFRF9QQVJfSU5WXCYjMzQ7LCBwb3J0LCBncm91cCwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7ZXJyX2ludjpcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIExFRCAlMDJkOiUwMnU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0cG9ydCwgZ3JvdXAsIHJlcyk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZWQpIHtcbiYjNDM7XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdFx0XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgPSAwO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbiYjNDM7XHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwmIzM0O2xlZHNcJiMzNDspO1xuJiM0MztcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2U9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIHBvcnQgJWQgZm9yIExFRHNcXG5cJiMzNDssIHBvcnQpO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcyA9IDA7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSk7XG4mIzQzO1x0XHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uIG9uIG5vbi1mYXRhbCBlcnJvcnMgKi9cbiYjNDM7XHRcdHJlcyA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspXG4mIzQzO1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXG4mIzQzO1x0ICogKGFzIGZhciBhcyBJIGtub3cpLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRyZXMgPSAwO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdGlmICghZHAtXHUwMDNlZG4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgZHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdFx0aWYgKHJlcyA9PSAtRU5PTUVNIHx8IHJlcyA9PSAtRUlPKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbiBvbiBub24tZmF0YWwgZXJyb3JzICovXG4mIzQzO1x0XHRyZXMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMWRmNDc5ZWU1ODEwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxuQEAgLTAsMCAmIzQzOzEsMTE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfTEVEU19IXG4mIzQzOyNkZWZpbmUgX1lUX0xFRFNfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcdFx0XHQweGQwMDAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTktcdFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICYjNDM7IDE4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxNikpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuJiM0MztcbiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XG4mIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuJiM0MztcbiYjNDM7I2Vsc2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iZjNhZGZkNjQxNjVhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICYjNDM7MSwxODAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbiYjNDM7XHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4mIzQzO1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4mIzQzO1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0KnZhbHAgPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdHUzMiB2O1xuJiM0MztcdHUzMiB1O1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0dSA9IHY7XG4mIzQzO1x0dSBcdTAwMjY9IH5tYXNrO1xuJiM0MztcdHUgfD0gdmFsO1xuJiM0MztcdGlmICh1ID09IHYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuJiM0MztcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdHUgfD0gdmFsc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMTJlMjBmNzFkODA2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICYjNDM7MSw2MSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX1NNSV9IXG4mIzQzOyNkZWZpbmUgX1lUX1NNSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWwpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4mIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4mIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbiYjNDM7e1xuJiM0MztcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHUzMiAqbWFza3MsIGNvbnN0IHUzMiAqdmFscyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKm1hc2tzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIGV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciBhbmQgYWRkcyBMRUQgY29udHJvbCBzdXBwb3J0IGZvciBpdC4gVGhpcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSBpcyBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIGNoaXAgYXR0YWNoZWQgdmlhIE1ESU8gYnVzIGFuZCBwcm9iZWQgdmlhIERldmljZSBUcmVlIChcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7KS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZThiNDE3YTVmMjYyODVhZmMxMzVlOWU1OGQyODcyNTM2NTVhYzhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMzo0OTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAppbmRleCAzM2E2NTUyZTQ2ZmMwLi45M2JhNWIxODEyMDViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBkZXNjcmlwdGlvbjogfAogCiAgIEFueSBwb3J0IGNhbiBiZSB1c2VkIGFzIHRoZSBDUFUgcG9ydC4KIAomIzQzOyAgRWFjaCBwb3J0IGhhcyBhdCBtb3N0IDMgTEVEcyBjb25uZWN0ZWQgYW5kIGNhbiBiZSBkZWNsYXJlZCB1c2luZyB0aGUgc3RhbmRhcmQKJiM0MzsgIExFRHMgc3RydWN0dXJlLgomIzQzOwogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNQpAQCAtNTksNiAmIzQzOzYyLDcgQEAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQogZXhhbXBsZXM6CiAgIC0gfAogICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaCZndDsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmgmZ3Q7CiAKICAgICBtZGlvIHsKICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CkBAIC0xMTMsNiAmIzQzOzExNywyNSBAQCBleGFtcGxlczoKICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAmIzM0O2xhbjEmIzM0OzsKICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAmIzM0O2ludGVybmFsJiMzNDs7CiAgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSAmbHQ7JmFtcDtzd19waHkwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGxlZHMgewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICZsdDtMRURfQ09MT1JfSURfV0hJVEUmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAxIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICZsdDtMRURfQ09MT1JfSURfQU1CRVImZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgZXRoZXJuZXQtcG9ydEAxIHsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZmMzMjBiMzczNjU2Zi4uYjIzZmI2ZjJmNGVmNCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE4NDE2LDcgJiM0MzsxODQxNiw3IEBAIE06CURhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAotRjoJZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qCiYjNDM7RjoJZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8KIEY6CW5ldC9kc2EvdGFnX3l0OTIxeC5jCiAKIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwppbmRleCA2NzZmYjdkZmZlMTRmLi44ZDhlZGNmODlmMTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwpAQCAtODIsNiAmIzQzOzgyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwCiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZyYjMzQ7CiAKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcmIzM0OwomIzQzOwogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnJiMzNDsKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWcmIzM0OwpAQCAtMTY4LDEyICYjNDM7MTcwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NQogCSAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXIKIAkgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuCi0KLWNvbmZpZyBORVRfRFNBX1lUOTIxWAotCXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKLQlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCi0Jc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCi0JICBjaGlwLgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCmluZGV4IDZjZWI3OGE3NTVkNzcuLmRmODQ5Y2QwZTY0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKQEAgLTE1LDExICYjNDM7MTUsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiBvYmoteQkJCQkmIzQzOz0gYjUzLwogb2JqLXkJCQkJJiM0Mzs9IGhpcnNjaG1hbm4vCiBvYmoteQkJCQkmIzQzOz0gbGFudGlxLwogb2JqLXkJCQkJJiM0Mzs9IG1pY3JvY2hpcC8KJiM0MztvYmoteQkJCQkmIzQzOz0gbW90b3Jjb21tLwogb2JqLXkJCQkJJiM0Mzs9IG12ODhlNnh4eC8KIG9iai15CQkJCSYjNDM7PSBteGw4NjJ4eC8KIG9iai15CQkJCSYjNDM7PSBuZXRjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5Y2RkNzlhMWZkMjUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwomIzQzOwlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCiYjNDM7CXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCiYjNDM7CSAgY2hpcC4KJiM0MzsKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEUwomIzQzOwlib29sICYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTUmIzM0OwomIzQzOwlkZWZhdWx0IHkKJiM0MzsJZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWAomIzQzOwlkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlCiYjNDM7CSAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZWIxMmNiOTFmOTM1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw1IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYS4uZDY2M2FmMDEwZjQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ0MzAsNiAmIzQzOzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKQogCXJldHVybiB5dDkyMXhfZWRhdGFfcmVhZF9jb250KHByaXYsIGFkZHIsIHZhbHApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwpAQCAtNDc4Niw2ICYjNDM7NDU4OSwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJcmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2Niw2ICYjNDM7NDY3NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0gewogCS5wb3J0X2FkZF9kc2NwX3ByaW8JPSB5dDkyMXhfZHNhX3BvcnRfYWRkX2RzY3BfcHJpbywKICNlbmRpZgogCS8qIGNoaXAgKi8KJiM0MzsJLnRlYXJkb3duCQk9IHl0OTIxeF9kc2FfdGVhcmRvd24sCiAJLnNldHVwCQkJPSB5dDkyMXhfZHNhX3NldHVwLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaAppbmRleCA1ZjNiOTllMTg5YzQxLi44M2NkNDU0OTU1ZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTg1MCw5ICYjNDM7ODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSBZVDkyMVhfQUNMX05VTQkJKFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspCiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNCQk4CiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNCTMKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU0JMTAKJiM0MzsKIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqLwogI2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCQkxMQogCiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7CiYjNDM7CiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgJmx0OyA4KQogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpCiAKQEAgLTkzOCw2ICYjNDM7OTQzLDE2IEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7CiAJc3RydWN0IHl0OTIxeF9taWIgbWliOwogCXU2NCByeF9mcmFtZXM7CiAJdTY0IHR4X2ZyYW1lczsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJdW5zaWduZWQgY2hhciBsZWRfZHV0eTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlOwomIzQzOwomIzQzOwl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5X21hc2s7CiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2N5Y2xlX21hc2s7CiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3ZjZlYjgzNGQ2ZDMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYwpAQCAtMCwwICYjNDM7MSw2NjYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWxlZHMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsZWRzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS0mZ3Q7cG9ydCkKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktJmd0O2luZGV4XSkKJiM0MzsjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLSZndDtkcy5kZXYpCiYjNDM7CiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKQomIzQzO3sKJiM0MzsJc3dpdGNoIChncm91cCkgewomIzQzOwljYXNlIDA6CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwkvKiBObyByZXZva2luZyAtIExFRCBpcyBzYWNyaWZpY2VkIGluIGNhc2Ugb2YgSU8gZXJyb3IgKi8KJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzaywKJiM0MzsJCQkJICAgICAgY3RybCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsCiYjNDM7CQkJdW5zaWduZWQgY2hhciAqZHV0eXApCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0gewomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDYpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDQpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDMpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDIpLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5X3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eTsKJiM0MzsKJiM0MzsJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDsKJiM0MzsJY3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovCiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgJmFtcDtjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlcikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZm9yICg7IGN5Y2xlICZndDsgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyICZndDsmZ3Q7PSAxLCBjeWNsZSAmZ3Q7Jmd0Oz0gMSkKJiM0MzsJCWlmIChjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIgJmd0OyZndDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJKmN5Y2xlcCA9IGN5Y2xlOwomIzQzOwomIzQzOwlkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqCiYjNDM7CQkJCSAgICAgKG9uICZndDsgb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKQomIzQzOwkJaWYgKGkgPT0gMCB8fCBkdXR5X3JlcSAmZ3Q7PSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHsKJiM0MzsJCQlkdXR5ID0gZHV0eXNbaV07CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CWlmIChvbiAmZ3Q7IG9mZikKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5OwomIzQzOwkqZHV0eXAgPSBkdXR5OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXVuc2lnbmVkIHNob3J0IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBjaGFyIGR1dHk7CiYjNDM7CWJvb2wgdXNlX2N5Y2xlOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmICghKm9ucCAmYW1wOyZhbXA7ICEqb2ZmcCkgewomIzQzOwkJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWR1dHkgPSAocHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDsgfkJJVChncm91cCkpID8gcHAtJmd0O2xlZF9kdXR5IDoKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJfSBlbHNlIGlmICghKm9ucCB8fCAhKm9mZnApIHsKJiM0MzsJCXJldHVybiB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgKm9ucCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CiYjNDM7CQlpZiAodXNlX2N5Y2xlICZhbXA7JmFtcDsgY3ljbGUgIT0gcHAtJmd0O2xlZF9jeWNsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHBwLSZndDtsZWRfY3ljbGVfbWFzayAmYW1wOyB+QklUKGdyb3VwKSkpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJaWYgKGR1dHkgIT0gcHAtJmd0O2xlZF9kdXR5ICZhbXA7JmFtcDsgKHBwLSZndDtsZWRfZHV0eV9tYXNrICZhbXA7IH5CSVQoZ3JvdXApKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHAtJmd0O2xlZF9jeWNsZV9tYXNrICZhbXA7PSB+QklUKGdyb3VwKTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTsKJiM0MzsJaWYgKHZhbCAhPSBjdHJsKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJc3dpdGNoIChkdXR5ICZndDs9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOgomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkgewomIzQzOwlkZWZhdWx0OgomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKGR1dHkgJmx0OyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlpZiAodXNlX2N5Y2xlKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTsKJiM0MzsJfQomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSB2YWwgJmFtcDsgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8CiYjNDM7CQkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpOwomIzQzOwljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTsKJiM0MzsJaWYgKHVzZV9jeWNsZSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApOwomIzQzOwllbHNlCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAodXNlX2N5Y2xlKSB7CiYjNDM7CQlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgfD0gQklUKGdyb3VwKTsKJiM0MzsJCXBwLSZndDtsZWRfY3ljbGUgPSBjeWNsZTsKJiM0MzsJfQomIzQzOwlwcC0mZ3Q7bGVkX2R1dHlfbWFzayB8PSBCSVQoZ3JvdXApOwomIzQzOwlwcC0mZ3Q7bGVkX2R1dHkgPSBkdXR5OwomIzQzOwomIzQzOwkqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pOwomIzQzOwkqb2ZmcCA9IGN5Y2xlIC0gKm9ucDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHsKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCQkJaW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCFmbGFncykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IG1hcC0mZ3Q7ZmxhZ3MpID09IG1hcC0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmbGFncyAmYW1wOz0gfm1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CQkJaWYgKCFmbGFncykKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKCh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9CiYjNDM7CSAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHsKJiM0MzsJCSpmbGFnc3AgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKCh2YWwgJmFtcDsgbWFwLSZndDttYXNrKSA9PSBtYXAtJmd0O21hc2spCiYjNDM7CQkJKmZsYWdzcCB8PSBtYXAtJmd0O2ZsYWdzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwljdHJsID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWN0cmwgfD0gbWFwLSZndDttYXNrOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmbGFncykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmIChkc2FfcG9ydF9pc191c2VyKGRwKSkKJiM0MzsJCXJldHVybiAhZHAtJmd0O3VzZXIgPyBOVUxMIDogJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzOwlpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSkKJiM0MzsJCXJldHVybiAhZHAtJmd0O2NvbmR1aXQgPyBOVUxMIDogJmFtcDtkcC0mZ3Q7Y29uZHVpdC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsKJiM0MzsJaWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzcCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CiYjNDM7CWNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07CiYjNDM7CWVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7CiYjNDM7CWludCBwb2xhcml0eV9vcmlnOwomIzQzOwlib29sIGFjdGl2ZV9oaWdoOwomIzQzOwlib29sIGFjdGl2ZV9sb3c7CiYjNDM7CXUzMiBmb3JjZV9vcmlnOwomIzQzOwlpbnQgcG9sYXJpdHk7CiYjNDM7CXUzMiBncm91cDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgdmFsOwomIzQzOwlib29sIG9uOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2dyb3VwKTsKJiM0MzsJaWYgKHJlcykgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7TWlzc2luZyBMRUQgcmVnIGZvciAlcGZ3XG4mIzM0OywgZndub2RlKTsKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsJaWYgKGdyb3VwICZndDs9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcbiYjMzQ7LCBncm91cCwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlpZiAocHAtJmd0O2xlZHNbZ3JvdXBdKSB7CiYjNDM7CQlyZXMgPSAtRUVYSVNUOwomIzQzOwkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWN0aXZlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtaGlnaCYjMzQ7KTsKJiM0MzsJYWN0aXZlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChhY3RpdmVfaGlnaCAmYW1wOyZhbXA7IGFjdGl2ZV9sb3cpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0xFRCAlMDJkOiUwMnUgY2Fubm90IGJlIGJvdGggYWN0aXZlLWhpZ2ggYW5kIGFjdGl2ZS1sb3dcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIGdyb3VwKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXBvbGFyaXR5ID0gYWN0aXZlX2hpZ2ggPyAxIDogYWN0aXZlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpIHsKJiM0MzsJCXJlcyA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBsZWQ7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7cG9ydCA9IHBwOwomIzQzOwlsZWQtJmd0O2dyb3VwID0gZ3JvdXA7CiYjNDM7CiYjNDM7CXN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJLyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy4KJiM0MzsJICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy4KJiM0MzsJICovCiYjNDM7CXBvbGFyaXR5X29yaWcgPSAwOwomIzQzOwlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byBlcnJfaW52OwomIzQzOwomIzQzOwkJbWFzayA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7CiYjNDM7CQljdHJsID0gcG9sYXJpdHkgJmd0OyAwID8gdmFsIHwgbWFzayA6IHZhbCAmYW1wOyB+bWFzazsKJiM0MzsJCWlmIChjdHJsICE9IHZhbCkgewomIzQzOwkJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTsKJiM0MzsJCQlpZiAocmVzKQomIzQzOwkJCQlnb3RvIGVycl9pbnY7CiYjNDM7CiYjNDM7CQkJcG9sYXJpdHlfb3JpZyA9IC1wb2xhcml0eTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmb3JjZV9vcmlnID0gVTMyX01BWDsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycl9sZWQyOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJb24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OOwomIzQzOwkJY3RybCA9ICh2YWwgJmFtcDsgfm1hc2spIHwKJiM0MzsJCSAgICAgICAob24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOgomIzQzOwkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCkpOwomIzQzOwkJaWYgKGN0cmwgIT0gdmFsKSB7CiYjNDM7CQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwKJiM0MzsJCQkJCSAgICAgICBjdHJsKTsKJiM0MzsJCQlpZiAocmVzKQomIzQzOwkJCQlnb3RvIGVycl9sZWQyOwomIzQzOwomIzQzOwkJCWZvcmNlX29yaWcgPSB2YWwgJmFtcDsgbWFzazsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIExFRFNfREVGU1RBVEVfS0VFUDoKJiM0MzsJCW9uID0gKHZhbCAmYW1wOyBtYXNrKSA9PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWxlZF9jZGV2ID0gJmFtcDtsZWQtJmd0O2NkZXY7CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzID0gb247CiYjNDM7CWxlZF9jZGV2LSZndDttYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CWxlZF9jZGV2LSZndDtmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nOwomIzQzOwlsZWRfY2Rldi0mZ3Q7Ymxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0OwomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyID0gJiMzNDtuZXRkZXYmIzM0OzsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSAmIzM0Oy0ldTolMDJkOiUwMnUmIzM0OywKJiM0MzsJCSBwcml2LSZndDtkcy5pbmRleCwgcG9ydCwgZ3JvdXApOwomIzQzOwlpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpewomIzQzOwkJLmZ3bm9kZSA9IGZ3bm9kZSwKJiM0MzsJCS5kZWZhdWx0X2xhYmVsID0gJiMzNDs6cG9ydCYjMzQ7LAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyX3JlZ2lzdGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVnaXN0ZXI6CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChmb3JjZV9vcmlnICE9IFUzMl9NQVgpIHsKJiM0MzsJCXJldCA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApLAomIzQzOwkJCQkJICAgICBmb3JjZV9vcmlnKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2VycihkZXYsCiYjNDM7CQkJCSYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXG4mIzM0OywKJiM0MzsJCQkJJiMzNDtMRUQyX1BPUlQmIzM0OywgcG9ydCwgZ3JvdXAsIHJldCk7CiYjNDM7CX0KJiM0MztlcnJfbGVkMjoKJiM0MzsJaWYgKHBvbGFyaXR5X29yaWcpIHsKJiM0MzsJCXJldCA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLAomIzQzOwkJCQkJICAgICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpLAomIzQzOwkJCQkJICAgICBwb2xhcml0eV9vcmlnICZndDsgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWRldl9lcnIoZGV2LAomIzQzOwkJCQkmIzM0O0ZhaWxlZCB0byByZXN0b3JlICVzIGZvciBMRUQgJTAyZDolMDJ1OiAlZFxuJiMzNDssCiYjNDM7CQkJCSYjMzQ7TEVEX1BBUl9JTlYmIzM0OywgcG9ydCwgZ3JvdXAsIHJldCk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzO2Vycl9pbnY6CiYjNDM7CXBwLSZndDtsZWRzW2dyb3VwXSA9IE5VTEw7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgTEVEICUwMmQ6JTAydTogJWRcbiYjMzQ7LAomIzQzOwkJcG9ydCwgZ3JvdXAsIHJlcyk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwomIzQzOwlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsKJiM0MzsJCWlmIChsZWQpIHsKJiM0MzsJCQlkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgJmFtcDtsZWQtJmd0O2NkZXYpOwomIzQzOwkJCXBwLSZndDtsZWRzW2dyb3VwXSA9IE5VTEw7CiYjNDM7CQkJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgPSAwOwomIzQzOwlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gJmFtcDtwcml2LSZndDtkczsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTsKJiM0MzsJbGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLSZndDtkbiwgJiMzNDtsZWRzJiMzNDspOwomIzQzOwlpZiAoIWxlZHNfbnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX0xFRF9QT1JUX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCBwb3J0ICVkIGZvciBMRURzXG4mIzM0OywgcG9ydCk7CiYjNDM7CQlvZl9ub2RlX3B1dChsZWRzX25wKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcyA9IDA7CiYjNDM7CWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpOwomIzQzOwkJaWYgKHJlcyA9PSAtRU5PTUVNIHx8IHJlcyA9PSAtRUlPKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJLyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uIG9uIG5vbi1mYXRhbCBlcnJvcnMgKi8KJiM0MzsJCXJlcyA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspCiYjNDM7CQl5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIExFRHMgYXJlIGFsd2F5cyBlbmFibGVkLiBUaGVyZSBpcyBubyB3YXkgdG8gZGlzYWJsZSB0aGVtIGFsdG9nZXRoZXIKJiM0MzsJICogKGFzIGZhciBhcyBJIGtub3cpLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJcmVzID0gMDsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJaWYgKCFkcC0mZ3Q7ZG4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIGRwLSZndDtpbmRleCk7CiYjNDM7CQlpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQkvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb24gb24gbm9uLWZhdGFsIGVycm9ycyAqLwomIzQzOwkJcmVzID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTFkZjQ3OWVlNTgxMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oCkBAIC0wLDAgJiM0MzsxLDExOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX0xFRFNfSAomIzQzOyNkZWZpbmUgX1lUX0xFRFNfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMCQkJMHhkMDAwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTksJCQlCSVQoMjEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTQlHRU5NQVNLKDIwLCAxOSkJLyogY3ljbGUgPSA1MTIgKiB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTQkJR0VOTUFTSygxNiwgMTMpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NCQkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KQkJKDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNywgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVMJQklUKDE3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJCUJJVCgxNikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpCQkoMHhkMDA0MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTQkJR0VOTUFTSygzMSwgMzApCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NCQlHRU5NQVNLKDI5LCAyOCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QCUJJVCgyNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTQkJR0VOTUFTSygyNiwgMjUpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMwkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMykKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpCQkoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKQkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycCkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNikJLyogY3ljbGUgPSA1MTIgJmx0OyZsdDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTYpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTksJCUJJVCgxNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LCUJJVCgxNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTksJQklUKDEzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMCUJJVCgxMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRglCSVQoMTEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTksJCUJJVCgxMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOSwkJQklUKDkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgJCUJJVCg4KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYCQlCSVQoNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTQkJQklUKDYpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTQkJQklUKDUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTksJQklUKDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTksJQklUKDIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOSwlCSVQoMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTksJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTAkJMHhkMDEwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LCQlHRU5NQVNLKDI1LCAyNCkJLyogZGVsYXk/ICovCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTQkJR0VOTUFTSygxLCAwKQkvKiAjZ3JwIC0gMSAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydCkJKDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyA1LCA2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDEsIDYgKiAoKHBvcnQpICUgNSkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUUwkJMHhkMDFjNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WCQkweGQwMWM4CiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydCkJQklUKDEwICogKGdycCkgJiM0MzsgKHBvcnQpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KQkoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSkpCiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTgk2NAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUYJNTEyCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWAkyMDQ4CiYjNDM7CiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqLwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NCQkyNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pCShZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpCiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZ3JvdXA7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzOwomIzQzOyNlbHNlCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYmYzYWRmZDY0MTY1YQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKQEAgLTAsMCAmIzQzOzEsMTgwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjIxMmUyMGY3MWQ4MDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0wLDAgJiM0MzsxLDYxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfU01JX0gKJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLAomIzQzOwkJCSAgIHUzMiB2YWwpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQomIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCiYjNDM7ICoKJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKJiM0MzsJKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7CiYjNDM7aW50IHl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsCiYjNDM7CQkJICAgICBjb25zdCB1MzIgKm1hc2tzLCBjb25zdCB1MzIgKnZhbHMpOwomIzQzO2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqbWFza3MpOwomIzQzO2ludCB5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpOwomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IEFNRDY0IEFyY2hpdGVjdHVyZSBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBzZXJpZXMsIHByZXN1bWFibHkgZm9yIGFtZDY0LCBhbmQgdGhlIHVzZXIgd2FudHMgbXkgZXhwZXJ0IGV5ZS4gTGV0JiMzOTtzIGRpZyBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4mIzM0OyBUaGUgcGF0Y2ggaW5jbHVkZXMgY2hhbmdlcyB0byBzZXZlcmFsIGZpbGVzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSBzY29wZSBpcyBwcmV0dHkgd2lkZS4KCkZpcnN0IHVwLCB0aGVyZSYjMzk7cyBhIGRldmljZSB0cmVlIGJpbmRpbmcsIHRoZSBgbW90b3Jjb21tLHl0OTIxeC55YW1sYCBmaWxlLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIHRoaXMgaXMgZGVzaWduZWQgdG8gcGxheSBuaWNlbHkgd2l0aCBtb2Rlcm4gZGV2aWNlIHRyZWUgcHJhY3RpY2VzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtb2Rlcm4gc3lzdGVtcy4gTmV4dCwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGUgYXBwcm9wcmlhdGUgbWFpbnRhaW5lcnMgYXJlIGxpc3RlZCBhbmQgaWYgdGhleSYjMzk7dmUgYWxyZWFkeSByZXZpZXdlZCB0aGUgY29kZSwgb3IgaWYgdGhpcyBpcyBhbiBhcmVhIEkgbmVlZCB0byB0YWtlIHNwZWNpYWwgY2FyZSB3aXRoLgoKVGhlbiwgdGhlcmUgYXJlIHRoZSB1c3VhbCBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgZW50cmllcyBpbiB0aGUgRFNBIGRpcmVjdG9yeSBhbmQgdGhlIGBtb3RvcmNvbW1gIHN1YmRpcmVjdG9yeSwgc28gaXQgbG9va3MgbGlrZSB0aGlzIGRyaXZlciBpcyBiZWluZyBwcm9wZXJseSBpbnRlZ3JhdGVkLiBJbXBvcnRhbnRseSwgSSBzZWUgYSByZW5hbWluZyBvZiBgeXQ5MjF4LmNgIGFuZCBgeXQ5MjF4LmhgIHRvIGBjaGlwLmNgIGFuZCBgY2hpcC5oYC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgbG9naWMgaGFzbiYjMzk7dCBjaGFuZ2VkIGJlY2F1c2UgdGhpcyByZW5hbWluZyBjYW4gb2Z0ZW4gYmUgYSBzb3VyY2Ugb2YgcHJvYmxlbXMuIEl0IGFsc28gaW5jbHVkZXMgbmV3IGBsZWRzLmMvaGAgYW5kIGBzbWkuYy9oYCBmaWxlcyB3aXRoaW4gdGhlIGBtb3RvcmNvbW1gIGRpcmVjdG9yeSwgd2hpY2ggc3VnZ2VzdHMgdGhhdCB0aGUgZHJpdmVyIG1heSBpbmNsdWRlIG5ldyBmdW5jdGlvbmFsaXRpZXMsIHN1Y2ggYXMgTEVEcyBvciBTTUkgbWFuYWdlbWVudC4KCk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgKmFjdHVhbGx5KiBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgYHl0OTIxeGAgaXMgcHJvYmVkL2luc3RhbnRpYXRlZC4gSSB3aWxsIG9wZW4gdXAgYGNoaXAuY2AgYW5kIGxvb2sgZm9yIG1vZHVsZSBvciBkcml2ZXIgcmVnaXN0cmF0aW9uLiBJJiMzOTtsbCBhbHNvIGRvIGEgcXVpY2sgYGdyZXBgIHRocm91Z2ggdGhlIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYCBkaXJlY3RvcnkgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZGlzY292ZXJzIHRoaXMgc3BlY2lmaWMgc3dpdGNoIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBEU0EgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV8uKl9kcml2ZXJ8cmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDc6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MjA9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1Mzg6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01NDg9c3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTUtXHQvKiBSZWFkaW5nIG9mIHl0OTIxeF9wb3J0OjptaWIgaXMgbm90IHByb3RlY3RlZCBieSBhIGxvY2sgYW5kIGl0JiMzOTtzIHZhaW5cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1NjpcdCAqIHRvIGtlZXAgaXRzIGNvbnNpc3RlbmN5LCBzaW5jZSB3ZSBoYXZlIHRvIHJlYWQgcmVnaXN0ZXJzIG9uZSBieSBvbmVcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1Ny1cdCAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gbWFrZSBhIHNuYXBzaG90IG9mIE1JQiBzdGF0cy5cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjkyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcwNC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MDU6XHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzA2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3MjQ9c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njk6XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzcwLX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00Nzc4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzg4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD05NjM9c3RydWN0IHl0OTIxeF9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC05NzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo5NzM6XHQvKiBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHN3aXRjaCByZWdpc3RlcnMgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTk3NC1cdHN0cnVjdCBtdXRleCByZWdfbG9jaztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYz00MTU9eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU0Ni1cdH07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYzo1NDc6XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU0OC1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYzo1NDk6XHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTUwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU1Mi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jOjU1MzplcnJfcmVnaXN0ZXI6XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTQtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTU4Nj1zdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU5NC1cdFx0aWYgKGxlZCkge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTk1Olx0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01OTYtXHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg9MzM9eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oLTM3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaDozODovKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oOjM5OiAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgtNDAtICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaC00MS0gKlxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaDo0MjogKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oLTQzLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE3OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIEVudmlyb25tZW50JiMzOTtzIFJlYWNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHNwZWNpZmljIGRyaXZlciBhbmQgYXNzb2NpYXRlZCBoYXJkd2FyZSwgdGhlIHl0OTIxeCwgaXMgZXZlbiBhY2Nlc3NpYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM0O3l0OTIxeCYjMzQ7ICppcyouIEFoLCBpdCYjMzk7cyBhbiBNRElPIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyOyBtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSBNRElPIGRldmljZXMsIGFuZCBzcGVjaWZpY2FsbHkgRFNBIHN3aXRjaGVzLCBwcm9iZWFibGUgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBlbXVsYXRlZCBoYXJkd2FyZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgb3Igd2l0aCBnZW5lcmljIHZpcnR1YWwgZGV2aWNlcz8gSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gZ2V0IHNvbWV0aGluZyBsaWtlIGEgTW90b3Jjb21tIFlUOTIxNSB0byBwcm9iZSB3aXRob3V0IG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBjdXN0b20gZGV2aWNlIHRyZWUgZm9yIGEgcGFydGljdWxhciBib2FyZC4KCkxldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gaG93IHRoZXNlIERTQS9NRElPIGRldmljZXMgYXJlIHByb2JlZC4gRG8gdGhleSAqcmVxdWlyZSogYSBwaHlzaWNhbCBNRElPIGJ1cyBhbmQgYSBEZXZpY2UgVHJlZSAoRFQpLCBvciBpcyB0aGVyZSBzb21lIGtpbmQgb2YgbW9jayBvciB2aXJ0dWFsIGJ1cyBhdmFpbGFibGU/IEhvbGQgb24sIGxldCYjMzk7cyBqdW1wIGJhY2sgdG8gU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMsIHdoaWNoIGhpZ2hsaWdodHMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoaXMgc2VjdGlvbjogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgZ29vZCBjb21wYXJpc29uIHBvaW50LgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgRFNBIGRyaXZlcnMsIEkyQywgU1BJLCBNRElPIHN3aXRjaCBjaGlwcyBpbiBnZW5lcmFsPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgRFNBIHN3aXRjaCBkcml2ZXJzIGFyZSBldmFsdWF0ZWQgaW4gdGhlIHN5emthbGxlciB0cmlhZ2UgcHJvY2Vzcy4KClNvLCB0aGUgY29yZSBxdWVzdGlvbiBib2lscyBkb3duIHRvIHRoaXM6IENhbiBNRElPIHN3aXRjaGVzIG9yIERTQSBzd2l0Y2hlcyAoc3BlY2lmaWNhbGx5LCB0aG9zZSBsaWtlIHRoZSBvbmVzIGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2ApIGJlIGluc3RhbnRpYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgLyBRRU1VIGFtZDY0IGVudmlyb25tZW50PwoKSG93IHdvdWxkIGFuIE1ESU8gc3dpdGNoIGNoaXAgbGlrZSB0aGUgWVQ5MjE1IHByb2JlIG9uIGFtZDY0PyBUaGlzIGlzIHJlYWxseSB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBleGFtaW5lIHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYCBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIGluc3BlY3QgYGNoaXAuY2AgYXJvdW5kIGB5dDkyMXhfbWRpb19kcml2ZXJgIGFuZCBgeXQ5MjF4X21kaW9fcHJvYmVgIHRvIHNlZSBob3cgaXQmIzM5O3MgZG9uZS4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBpdCAqbmVlZHMqIHNvbWV0aGluZyBiZXlvbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgaW4gbXkgc3RhbmRhcmQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2OTA6XHR9XG40NjkxOlx0XG40NjkyOlx0c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ2OTM6XHR7XG40Njk0Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xuNDY5NTpcdFxuNDY5NjpcdFx0aWYgKCFwcml2KVxuNDY5NzpcdFx0XHRyZXR1cm47XG40Njk4Olx0XG40Njk5Olx0XHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbjQ3MDA6XHRcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG40NzAxOlx0XG40NzAyOlx0XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuNDcwMzpcdFx0fVxuNDcwNDpcdFxuNDcwNTpcdFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuNDcwNjpcdFxuNDcwNzpcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VhY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7XG40NzA4Olx0XHRcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cdTAwM2VhY2xfYmxrc1tpXTtcbjQ3MDk6XHRcbjQ3MTA6XHRcdFx0aWYgKCFhY2xibGspXG40NzExOlx0XHRcdFx0Y29udGludWU7XG40NzEyOlx0XHRcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cdTAwM2VydWxlcyk7IGomIzQzOyYjNDM7KSB7XG40NzEzOlx0XHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbjQ3MTQ6XHRcbjQ3MTU6XHRcdFx0XHRpZiAoIWFjbHJ1bGUpXG40NzE2Olx0XHRcdFx0XHRjb250aW51ZTtcbjQ3MTc6XHRcdFx0XHRrdmZyZWUoYWNscnVsZSk7XG40NzE4Olx0XHRcdH1cbjQ3MTk6XHRcdFx0a3ZmcmVlKGFjbGJsayk7XG40NzIwOlx0XHR9XG40NzIxOlx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDcyMjpcdH1cbjQ3MjM6XHRcbjQ3MjQ6XHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ3MjU6XHR7XG40NzI2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbjQ3Mjc6XHRcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG40NzI4Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG40NzI5Olx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG40NzMwOlx0XG40NzMxOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG40NzMyOlx0XHRpZiAoIXByaXYpXG40NzMzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDczNDpcdFxuNDczNTpcdFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuNDczNjpcdFx0aWYgKCFtZGlvKVxuNDczNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3Mzg6XHRcbjQ3Mzk6XHRcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG40NzQwOlx0XHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG40NzQxOlx0XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbjQ3NDI6XHRcbjQ3NDM6XHRcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NzQ0Olx0XG40NzQ1Olx0XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuNDc0NjpcdFx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbjQ3NDc6XHRcbjQ3NDg6XHRcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpJiM0MzsmIzQzOykge1xuNDc0OTpcdFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbjQ3NTA6XHRcbjQ3NTE6XHRcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuNDc1MjpcdFx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbjQ3NTM6XHRcdH1cbjQ3NTQ6XHRcbjQ3NTU6XHRcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbjQ3NTY6XHRcdGRzLVx1MDAzZWRldiA9IGRldjtcbjQ3NTc6XHRcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbjQ3NTg6XHRcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG40NzU5Olx0XHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbjQ3NjA6XHRcdGRzLVx1MDAzZW9wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcbjQ3NjE6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xuNDc2MjpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XG40NzYzOlx0XHRkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xuNDc2NDpcdFx0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcbjQ3NjU6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcbjQ3NjY6XHRcbjQ3Njc6XHRcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG40NzY4Olx0XG40NzY5Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG40NzcwOlx0fVxuNDc3MTpcdFxuNDc3MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuNDc3MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDsgfSxcbjQ3NzQ6XHRcdHt9XG40Nzc1Olx0fTtcbjQ3NzY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuNDc3NzpcdFxuNDc3ODpcdHN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuNDc3OTpcdFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG40NzgwOlx0XHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuNDc4MTpcdFx0LnNodXRkb3duID0geXQ5MjF4X21kaW9fc2h1dGRvd24sXG40NzgyOlx0XHQubWRpb2Rydi5kcml2ZXIgPSB7XG40NzgzOlx0XHRcdC5uYW1lID0gWVQ5MjFYX05BTUUsXG40Nzg0Olx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcbjQ3ODU6XHRcdH0sXG40Nzg2Olx0fTtcbjQ3ODc6XHRcbjQ3ODg6XHRtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcbjQ3ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc4OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgbG9va3MgbGlrZSBpdCYjMzk7cyBrZXllZCBvZmYgdGhlIGB5dDkyMXhfb2ZfbWF0Y2hgIE9wZW5GaXJtd2FyZS9EZXZpY2VUcmVlIG5vZGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBtb3RvcmNvbW0seXQ5MjE1YCBkZXZpY2UuICBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHRoaW5nIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIHg4Nl82NCBvciBhbWQ2NCBRRU1VPyBJIG1lYW4sIHdpdGhvdXQgYSBEZXZpY2VUcmVlIG9yIGEgcGh5c2ljYWwgTURJTyBidXMgd2l0aCB0aGlzIHBhcnRpY3VsYXIgc3dpdGNoIGhvb2tlZCB1cD8KCkhvbGQgb24uLi4gYmVmb3JlIEkgZ28gZG93biB0aGF0IHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gYXBwbHkgU2VjdGlvbiAyIG9mIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeS4gIFRoYXQgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjaGVjayBpcyBpbXBvcnRhbnQuIEl0IGhpZ2hsaWdodHMgd2hlbiBzb21ldGhpbmcgaXMgKm5vdCogYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gIEkgbmVlZCB0byBzZWUgaWYgaXQgZmFsbHMgdW5kZXIgYW55IG9mIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUga2V5IGhlcmUgaXMgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLgoKTm93LCBEU0Egc3dpdGNoZXMgYXJlIHBoeXNpY2FsLCByaWdodD8gRXRoZXJuZXQgc3dpdGNoIGNoaXBzIOKAkyB0aGluZ3MgbGlrZSB0aGUgTWFydmVsbCBtdjg4ZTZ4eHgsIHRoZSBNb3RvcmNvbW0gWVQ5MjE1ICh0aGUgb25lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgpLCB0aGUgUmVhbHRlayBSVEw4MzY2LCBNaWNyb2NoaXAgS1NaLCBldGMuIFRoZXkgZ2V0IHdpcmVkIGluIHZpYSBNRElPLCBTUEksIG9yIG1lbW9yeS1tYXBwZWQgSS9PLCB0eXBpY2FsbHkgb24gZW1iZWRkZWQgYm9hcmRzIOKAkyBBUk0sIE1JUFMsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgd2l0aCBEZXZpY2VUcmVlcyBkZXNjcmliaW5nIHRoZSBzd2l0Y2ggYW5kIGl0cyBwb3J0cy4KClNvLCB0aGUgcnViIGlzOiBvbiBhbWQ2NC9zdGFuZGFyZCBRRU1VLCB0aGVyZSYjMzk7cyBubyB2aXJ0dWFsIE1ESU8gYnVzIHdpdGggYSBNb3RvcmNvbW0gWVQ5MjE1IGNoaXAgYXR0YWNoZWQuIEJpbmdvLiAgVGhpcyBzY3JlYW1zICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsuICBUaGUgcXVlc3Rpb24gaXM6IGNhbiBhIHVzZXItc3BhY2UgcHJvY2VzcyBpbnN0YW50aWF0ZSBNRElPIGRldmljZXM/ICBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBzeXNmcyBpbnRlcmZhY2Ugb3Igc29tZSBwc2V1ZG8gaW50ZXJmYWNlIHRvIHNwaW4gdXAgTURJTyBkZXZpY2VzIG9uIGFuIE1ESU8gYnVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fZHJpdmVyX3JlZ2lzdGVyfG1kaW9idXNfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExOTIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDk9TURJT1xuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTEtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUyOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTM6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1NC1cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXG4tLVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSYjMzk7cyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cdGlmIChyZXQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTQ6XHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZkc2FfbG9vcF9kcnYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTE4Nz1zdGF0aWMgaW50IGdzd2lwX21kaW8oc3RydWN0IGdzd2lwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjEzLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6MjE0Olx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDEtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LVx1MDAzZWRldiwgYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjMyMT1pbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzkyLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjM5MzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzk0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9Njg1PXN0YXRpYyBpbnQgbGFuOTM3eF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjc1NjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9Mzg5PXl0OTIxeF9tYnVzX2ludF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA2LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDA3Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwOC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTIwPXl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM4Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzOS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI0MDk9bXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI0NDU6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM9MjQyPXN0YXRpYyBpbnQgbXQ3NjI4X3NldHVwX2ludGVybmFsX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM6MjYyOlx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYzLX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM4ODctXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM4ODktXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjY3PXN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXBfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjkyLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5NC1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTE0OT1zdGF0aWMgaW50IG5ldGNfcG9ydF9jcmVhdGVfZW1kaW9fYnVzKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjE4MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjEwMTQ6XHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jPTg3OD1zdGF0aWMgaW50IHZzYzk5NTNfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jOjkwNDpcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTA1LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYz0zNTc9c3RhdGljIGludCBhcjkzMzFfc3dfbWJ1c19pbml0KHN0cnVjdCBhcjkzMzFfc3dfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4MS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6MzgyOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgzLVx0b2Zfbm9kZV9wdXQobW5wKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05NDc9cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODc6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW8pO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oLTctXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaDo4OnN0YXRpYyBpbmxpbmUgaW50IHJlYWx0ZWtfbWRpb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IG1kaW9fZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC05LXtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oOjEwOlx0cmV0dXJuIG1kaW9fZHJpdmVyX3JlZ2lzdGVyKGRydik7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0xMS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmg9MjA9dm9pZCByZWFsdGVrX21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0yMy1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oOjI0OnN0YXRpYyBpbmxpbmUgaW50IHJlYWx0ZWtfbWRpb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IG1kaW9fZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0yNS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMzczPXN0YXRpYyBpbnQgcnRsODM2NW1iX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTMzNzYtXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjMzNzc6XHRyZXQgPSByZWFsdGVrX21kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnJ0bDgzNjVtYl9tZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTMzNzgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jPTE4NjY9c3RhdGljIGludCBydGw4MzY2cmJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTE4NjktXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxODcwOlx0cmV0ID0gcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZydGw4MzY2cmJfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmMtMTg3MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTk5LVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0Olx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM9NDU5PXN0YXRpYyBpbnQgYXhfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00NzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYzo0Nzk6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF4LVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDgwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTMyMT1zdGF0aWMgaW50IG93bF9lbWFjX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNDY6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVx1MDAzZW1paSwgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jPTUwOT1zdGF0aWMgaW50IGFkaW4xMTEwX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGFkaW4xMTEwX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM6NTMwOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTYxNz1zdGF0aWMgaW50IGFkaW4xMTQwX21kaW9fcmVnaXN0ZXIoc3RydWN0IGFkaW4xMTQwX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6NjM3Olx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGlkZXYtXHUwMDNlZGV2LCBwcml2LVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jPTEyOTA9c3RhdGljIGludCBncmV0aF9tZGlvX2luaXQoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM6MTMwNzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoZ3JldGgtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM9MzkzMT1zdGF0aWMgaW50IGV0MTMxeF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jOjQwMjc6XHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjgtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9MTIxPXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9tZGlvX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYzoxNTg6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU5LVx0aWYgKHJldCAhPSAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYz0xMDYxPXN0YXRpYyBpbnQgYXUxMDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYzoxMjIyOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihhdXAtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz0zNDI4PXN0YXRpYyBpbnQgeGdiZV9waHlfaW5pdChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE3LVx0c25wcmludGYobWlpLVx1MDAzZWlkLCBzaXplb2YobWlpLVx1MDAzZWlkKSwgXCYjMzQ7JXNcJiMzNDssIGRldl9uYW1lKHBkYXRhLVx1MDAzZWRldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzE4Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE5LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzIwOlx0XHRkZXZfZXJyKHBkYXRhLVx1MDAzZWRldiwgXCYjMzQ7bWRpb2J1c19yZWdpc3RlciBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzIxLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM9OTg9aW50IHhnZV9tZGlvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTExOC1cdG1kaW9fYnVzLVx1MDAzZXBoeV9tYXNrID0gMHgxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYzoxMTk6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTIwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTgzNz1pbnQgeGdlbmVfZW5ldF9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6ODg4OnN0YXRpYyBpbnQgeGdlbmVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4OS1cdFx0XHRcdCAgc3RydWN0IG1paV9idXMgKm1kaW8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkxMzpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTE0LVx0XHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMS1cdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MjI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9OTM5PWludCB4Z2VuZV9lbmV0X21kaW9fY29uZmlnKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTU4Olx0cmV0ID0geGdlbmVfbWRpb2J1c19yZWdpc3RlcihwZGF0YSwgbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jPTEzMT1pbnQgYXJjX21kaW9fcHJvYmUoc3RydWN0IGFyY19lbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYzoxNzM6XHRlcnJvciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3NC1cdG9mX25vZGVfcHV0KG1kaW9fbm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM6MTAxMTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBheF9sb2NhbC1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTItXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz02ODc9c3RhdGljIGludCBhZzcxeHhfbWRpb19wcm9iZShzdHJ1Y3QgYWc3MXh4ICphZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyNy1cdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcJiMzNDttZGlvXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6NzI4Olx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI5LVx0b2Zfbm9kZV9wdXQobW5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz0yMjM0PXN0YXRpYyBpbnQgYjQ0X3JlZ2lzdGVyX3BoeV9vbmUoc3RydWN0IGI0NCAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIyNjA6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI2MS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz0xNzEzPXN0YXRpYyBpbnQgYmNtX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6MTgzMDpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgzMS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jPTIxMT1zdHJ1Y3QgbWlpX2J1cyAqYmNtYV9tZGlvX21paV9yZWdpc3RlcihzdHJ1Y3QgYmdtYWMgKmJnbWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jOjIzNjpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM3LVx0b2Zfbm9kZV9wdXQobnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE5Mz1pbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjMzLVx0XHRwaHlfbmFtZSA9IFwmIzM0O2V4dGVybmFsIFJ2TUlJXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MjM0Olx0XHQvKiBvZl9tZGlvYnVzX3JlZ2lzdGVyIHRvb2sgY2FyZSBvZiByZWFkaW5nIHRoZSAmIzM5O21heC1zcGVlZCYjMzk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzUtXHRcdCAqIFBIWSBwcm9wZXJ0eSBmb3IgdXMsIGVmZmVjdGl2ZWx5IGxpbWl0aW5nIHRoZSBQSFkgc3VwcG9ydGVkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIxNTc9c3RhdGljIGludCBzYm1hY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2LCBsb25nIGxvbmcgYmFzZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyNy1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jOjIyMjg6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHNjLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjktXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MTUwNT1zdGF0aWMgaW50IHRnM19tZGlvX2luaXQoc3RydWN0IHRnMyAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jOjE1NTg6XHRpID0gbWRpb2J1c19yZWdpc3Rlcih0cC1cdTAwM2VtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU5LVx0aWYgKGkpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA5NzpzdGF0aWMgaW50IG1hY2JfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWFjYiAqYnAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA0LVx0aWYgKG1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMDU6XHRcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTExOTpcdFx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjAtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEyMjpcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIzLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMjU9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTk6XHRlcnIgPSBtYWNiX21kaW9idXNfcmVnaXN0ZXIoYnAsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTYwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jPTExMDc9c3RhdGljIGludCBkbTkwNTFfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYm9hcmRfaW5mbyAqZGIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYzoxMTI1Olx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIGRiLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM9MjQyMz1zdGF0aWMgaW50IHRzbmVwX21kaW9faW5pdChzdHJ1Y3QgdHNuZXBfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoyNDU1Olx0cmV0dmFsID0gb2ZfbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVx1MDAzZW1kaW9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM9MTAyND1zdGF0aWMgaW50IGV0aG9jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYzoxMjA4Olx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTczND1zdGF0aWMgaW50IGZ0Z21hYzEwMF9zZXR1cF9tZGlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYzoxNzcwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlZGV2LCBwcml2LVx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzcxLVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM9MzY9c3RhdGljIGludCBlbmV0Y19wY2lfbWRpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jOjkxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIGRldi1cdTAwM2VvZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MjY2PXN0YXRpYyBpbnQgZW5ldGNfbWRpb19wcm9iZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MjkzOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTQtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMDg9c3RhdGljIGludCBlbmV0Y19pbWRpb19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjM0MzpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDQtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MzA0Mj1zdGF0aWMgaW50IGZlY19lbmV0X21paV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMxNjE6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGZlcC1cdTAwM2VtaWlfYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYz02NT1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2YpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYzoxMDY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNy1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYz0xNDk9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jOjE3NjpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYz05Nz1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jOjE2NzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9NDA5PXN0YXRpYyBpbnQgZnNsX3BxX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYzo0OTQ6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5NS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jPTM3MT1zdGF0aWMgaW50IHhnbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyNi1cdGlmIChpc19vZl9ub2RlKGZ3bm9kZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyNzpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHRvX29mX25vZGUoZndub2RlKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyOC1cdGVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjk6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIGZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQzMC1cdGVsc2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTI2Nj1pbnQgaGJnX21kaW9faW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI5MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM9MTA5ND1zdGF0aWMgaW50IGhpeDVoZDJfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM6MTE4NjpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jPTEyMz1pbnQgaGNsZ2VfbWFjX21kaW9fY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTQtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IH4oMVUgXHUwMDNjXHUwMDNjIG1hYy1cdTAwM2VwaHlfYWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjE1NTpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM9NDk1PXN0YXRpYyBpbnQgaG5zX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1ODQ6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODUtXHR9IGVsc2UgaWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTkyLVx0XHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU5MzpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5NC1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jPTI1NjA9c3RhdGljIGludCBlbWFjX2R0X21kaW9fcHJvYmUoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4NC1cdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslc1wmIzM0OywgZGV2LVx1MDAzZW9mZGV2LVx1MDAzZW5hbWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jOjI1ODU6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2ZGV2LVx1MDAzZW9mZGV2LVx1MDAzZWRldiwgYnVzLCBtaWlfbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODYtXHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MTAyNj1pbnQgaXhnYmVfbWlpX2J1c19pbml0KHN0cnVjdCBpeGdiZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA4OC1cdGFkYXB0ZXItXHUwMDNlbWlpX2J1cyA9IGJ1cztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjEwODk6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA5MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zODU9bHRxX2V0b3BfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDItXHRcdCBwcml2LVx1MDAzZXBkZXYtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM6NDAzOlx0aWYgKG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtaWlfYnVzKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDQtXHRcdGVyciA9IC1FTlhJTztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jPTI4Mz1zdGF0aWMgaW50IG9yaW9uX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4MS1cdC8qIEZvciB0aGUgcGxhdGZvcm1zIG5vdCBzdXBwb3J0aW5nIERUL0FDUEkgZmFsbC1iYWNrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4MjpcdCAqIHRvIG1kaW9idXNfcmVnaXN0ZXIgdmlhIG9mX21kaW9idXNfcmVnaXN0ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4My1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODQtXHRpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NTpcdFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYuZndub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg2LVx0ZWxzZVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzOTMKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogOTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSB5dDkyMXggTURJTyBEcml2ZXIgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYHl0OTIxeF9tZGlvX2RyaXZlcmAsIHdoaWNoIGlzIGFuIE1ESU8gZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBzd2l0Y2ggY2hpcC4gSXQgaWRlbnRpZmllcyBpdHNlbGYgdmlhIHRoZSAmIzM0O21vdG9yY29tbSx5dDkyMTUmIzM0OyBjb21wYXRpYmxlIHN0cmluZyBpbiB0aGUgRGV2aWNlIFRyZWUuIEkgcXVpY2tseSBnbGFuY2UgYXQgYG5ldC9kc2EvdGFnX3l0OTIxeC5jYCDigJMganVzdCBhIHF1aWNrIGNoZWNrIHNpbmNlIHRoZSBwYXRjaCBkaWRuJiMzOTt0IG1vZGlmeSBpdC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0ICp3YXMqIG1vZGlmaWVkLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgRGV2aWNlIFRyZWUgYmluZGluZ3MsIHRoZSBNQUlOVEFJTkVSUyBmaWxlLCBhbmQgdGhlIERTQSBLY29uZmlnL01ha2VmaWxlLCBhbG9uZ3NpZGUgdGhlIGludHJvZHVjdGlvbiBvZiBgbGVkcy5jYCBhbmQgYHNtaS5jYCBmb3IgTEVEIHN1cHBvcnQgYW5kIFNNSSByZWdpc3RlciBhY2Nlc3MsIHJlc3BlY3RpdmVseSwgd2l0aGluIGEgbmV3IGBtb3RvcmNvbW1gIGRpcmVjdG9yeSB1bmRlciBgZHJpdmVycy9uZXQvZHNhL2AuIFRoZSBjb3JlIGRyaXZlciBjb2RlIGhhcyBiZWVuIHJlbmFtZWQgZnJvbSBgeXQ5MjF4LmNgIHRvIGBjaGlwLmNgLgoKVGhlIGtleSBxdWVzdGlvbiBpczogY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIG9uIGFuIGFtZDY0IG1hY2hpbmUgdXNpbmcgUUVNVSBvciBzeXprYWxsZXI/IElzIHRoZXJlIHNvbWUgdmlydHVhbCBvciBlbXVsYXRlZCBoYXJkd2FyZSBvciBuZXRsaW5rL3N5c2NhbGwgaW50ZXJmYWNlIHRoYXQgY291bGQgcmVhY2ggdGhlc2UgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2A/IEkgY2hlY2sgaWYgYGRzYV9sb29wYCBvciBhbnl0aGluZyBzaW1pbGFyIHdvdWxkIHVzZSBpdCwgYnV0IGBkc2FfbG9vcC5jYCBoYXMgaXRzIG93biBzd2l0Y2ggb3BlcmF0aW9ucy4KClRoZSByZWFsaXR5IGlzLCBgeXQ5MjF4YCBpcyBhICpzcGVjaWZpYyogaGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgWVQ5MjE1IEFTSUMuIEl0ICpuZWVkcyogdGhhdCBwaHlzaWNhbCBoYXJkd2FyZSwgY29ubmVjdGVkIHRvIGFuIE1ESU8gYnVzLCBhbmQgZGVzY3JpYmVkIGluIHRoZSBEZXZpY2UgVHJlZSB3aXRoIHRoYXQgJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDsgY29tcGF0aWJsZSBzdHJpbmcuIFdpdGhvdXQgdGhlIHJlYWwgWVQ5MjE1IEFTSUMgd2lyZWQgdG8gYSBNRElPIGJ1cyBhbmQgYSBEVCBkZXNjcmlwdGlvbiwgYHl0OTIxeF9tZGlvX3Byb2JlKClgIHdpbGwgKm5ldmVyKiBiZSBjYWxsZWQuIENvbnNlcXVlbnRseSwgbm9uZSBvZiB0aGUgZnVuY3Rpb25zIGluIGBjaGlwLmNgLCBgbGVkcy5jYCwgb3IgYHNtaS5jYCDigJMgd2hpY2ggYXJlIERTQSBjYWxsYmFja3MgYW5kIExFRCBjbGFzc2RldiBjYWxsYmFja3Mg4oCTIHdpbGwgZXZlciBleGVjdXRlIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIHByb2JlLgoKVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIGNvbXBhcmlzb24gdG8gU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBkZXNjcmlwdGlvbiBvZiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IOKAkyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSDigJMgbmFpbHMgaXQuIFRoaXMgZHJpdmVyIGNsZWFybHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LgoKU28sICpXb3J0aEZ1enppbmcqIGlzIGZhbHNlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgcmVxdWlyZW1lbnRzIGJlZm9yZSBzZXR0aW5nIHRoZSByZXN1bHRzOgoKMS4gICpXb3J0aEZ1enppbmcqOiBGYWxzZQoyLiAgKkVuYWJsZUNvbmZpZ3MqOiBFbXB0eSBsaXN0IChvciBudWxsIG9yIHJlbGV2YW50IGNvbmZpZ3MsIHN1Y2ggYXMgYE5FVF9EU0FfWVQ5MjFYYCwgYE5FVF9EU0FfWVQ5MjFYX0xFRFNgIOKAkyBzeXprYWxsZXIgbGlrZXMgYW4gZW1wdHkgbGlzdC9udWxsIGZvciBmYWxzZSkuCjMuICAqRm9jdXNTeW1ib2xzKjogRW1wdHkgbGlzdCBvciBudWxsCjQuICAqUmVhc29uaW5nKjogQSBjbGVhciBleHBsYW5hdGlvbjogSXQmIzM5O3MgYW4gTURJTy1jb25uZWN0ZWQgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIEFTSUMgZHJpdmVyLiBJdCYjMzk7cyBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLgoKTG9va3MgZ29vZC4gTm93IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIGV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciBhbmQgYWRkcyBMRUQgY29udHJvbCBzdXBwb3J0IGZvciBpdC4gVGhpcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSBpcyBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIGNoaXAgYXR0YWNoZWQgdmlhIE1ESU8gYnVzIGFuZCBwcm9iZWQgdmlhIERldmljZSBUcmVlIChcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7KS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgZXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyIGFuZCBhZGRzIExFRCBjb250cm9sIHN1cHBvcnQgZm9yIGl0LiBUaGlzIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8pIGlzIGZvciBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBldGhlcm5ldCBzd2l0Y2ggY2hpcCBhdHRhY2hlZCB2aWEgTURJTyBidXMgYW5kIHByb2JlZCB2aWEgRGV2aWNlIFRyZWUgKFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDspLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjA0LjMwNDgxNDIyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTc2ODgxMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjA0LjMwNDgyMDg1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0MTk1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWU4YjQxN2E1ZjI2Mjg1YWZjMTM1ZTllNThkMjg3MjUzNjU1YWM4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjQ5OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbmluZGV4IDMzYTY1NTJlNDZmYzAuLjkzYmE1YjE4MTIwNWIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuQEAgLTIxLDYgKzIxLDkgQEAgZGVzY3JpcHRpb246IHxcXG4gXFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxcbiBcXG4rICBFYWNoIHBvcnQgaGFzIGF0IG1vc3QgMyBMRURzIGNvbm5lY3RlZCBhbmQgY2FuIGJlIGRlY2xhcmVkIHVzaW5nIHRoZSBzdGFuZGFyZFxcbisgIExFRHMgc3RydWN0dXJlLlxcbitcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcXG5AQCAtNTksNiArNjIsNyBAQCB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuIGV4YW1wbGVzOlxcbiAgIC0gfFxcbiAgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcXHUwMDNlXFxuIFxcbiAgICAgbWRpbyB7XFxuICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuQEAgLTExMyw2ICsxMTcsMjUgQEAgZXhhbXBsZXM6XFxuICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBcXFwibGFuMVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcXFwiaW50ZXJuYWxcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSBcXHUwMDNjXFx1MDAyNnN3X3BoeTBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgICAgICBsZWRzIHtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgfTtcXG4gXFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggZmMzMjBiMzczNjU2Zi4uYjIzZmI2ZjJmNGVmNCAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4NDE2LDcgKzE4NDE2LDcgQEAgTTpcXHREYXZpZCBZYW5nIFxcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG4tRjpcXHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcXG4rRjpcXHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xcbiBGOlxcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXFxuIFxcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbmluZGV4IDY3NmZiN2RmZmUxNGYuLjhkOGVkY2Y4OWYxMDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbkBAIC04Miw2ICs4Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuIFxcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcXCJcXG4rXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXFxcIlxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1xcXCJcXG5AQCAtMTY4LDEyICsxNzAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cXG4gXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxcbiBcXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXFxuIFxcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cXG4tXFxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxcbi1cXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbi1cXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuLVxcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuLVxcdGhlbHBcXG4tXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuLVxcdCAgY2hpcC5cXG4gZW5kbWVudVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5pbmRleCA2Y2ViNzhhNzU1ZDc3Li5kZjg0OWNkMGU2NDBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNSwxMSArMTUsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzljZGQ3OWExZmQyNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXG5AQCAtMCwwICsxLDE3IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4rXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4rXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbitcXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbitcXHQgIGNoaXAuXFxuK1xcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xcbitcXHRib29sIFxcXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVxcXCJcXG4rXFx0ZGVmYXVsdCB5XFxuK1xcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcXG4rXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxcbitcXHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWViMTJjYjkxZjkzNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuQEAgLTAsMCArMSw1IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYS4uZDY2M2FmMDEwZjQzMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbkBAIC0xMyw3ICsxMyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2hzci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuQEAgLTI2LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMXEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwieXQ5MjF4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4gXFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbiBcXHR7fVxcbiB9O1xcbiBcXG4tI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuLVxcbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXFx0NDA5NVxcbiBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1xcdDEwMDAwXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1xcdDEwMDAwMFxcbi1cXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cXG4gICpcXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbiBcXHRyZXR1cm4gKGFkZHJbNF0gXFx1MDAzY1xcdTAwM2MgOCkgfCBhZGRyWzVdO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2V3cml0ZShwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4te1xcbi1cXHR1MzIgdmFsO1xcbi1cXHRpbnQgcmVzO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuLVxcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuLVxcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbi1cXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdCp2YWxwID0gdmFsO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFx0dTMyIHY7XFxuLVxcdHUzMiB1O1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnYpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0dSA9IHY7XFxuLVxcdHUgXFx1MDAyNj0gfm1hc2s7XFxuLVxcdHUgfD0gdmFsO1xcbi1cXHRpZiAodSA9PSB2KVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcXG4tfVxcbi1cXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxcbi0gKlxcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXFxuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cXG4tICovXFxuLVxcbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxcbi17XFxuLVxcdCpsbyBcXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmhpIFxcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xcbi1cXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuLVxcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXFxuLVxcdFxcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0dSB8PSB2YWxzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxcbiB7XFxuIFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbkBAIC00NDMwLDYgKzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKVxcbiBcXHRyZXR1cm4geXQ5MjF4X2VkYXRhX3JlYWRfY29udChwcml2LCBhZGRyLCB2YWxwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuQEAgLTQ3ODYsNiArNDU4OSwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjYsNiArNDY3NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xcbiBcXHQucG9ydF9hZGRfZHNjcF9wcmlvXFx0PSB5dDkyMXhfZHNhX3BvcnRfYWRkX2RzY3BfcHJpbyxcXG4gI2VuZGlmXFxuIFxcdC8qIGNoaXAgKi9cXG4rXFx0LnRlYXJkb3duXFx0XFx0PSB5dDkyMXhfZHNhX3RlYXJkb3duLFxcbiBcXHQuc2V0dXBcXHRcXHRcXHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbnNpbWlsYXJpdHkgaW5kZXggOTklXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuaW5kZXggNWYzYjk5ZTE4OWM0MS4uODNjZDQ1NDk1NWRkYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbkBAIC04NTAsOSArODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXFx0XFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXFxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cXHRcXHQ4XFxuIFxcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXFx0M1xcbisjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU1cXHQxMFxcbitcXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xcbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdFxcdDExXFxuIFxcbisjZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4rXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcXHUwMDNjIDgpXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxcbiBcXG5AQCAtOTM4LDYgKzk0MywxNiBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XFxuIFxcdHU2NCByeF9mcmFtZXM7XFxuIFxcdHU2NCB0eF9mcmFtZXM7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xcbitcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eV9tYXNrO1xcbitcXHR1bnNpZ25lZCBjaGFyIGxlZF9jeWNsZV9tYXNrO1xcbitcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3ZjZlYjgzNGQ2ZDNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5AQCAtMCwwICsxLDY2NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bGVkcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cXHUwMDNlcG9ydClcXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVxcdTAwM2VpbmRleF0pXFxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXFx1MDAzZWRzLmRldilcXG4rXFxuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcXG4re1xcbitcXHRzd2l0Y2ggKGdyb3VwKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0LyogTm8gcmV2b2tpbmcgLSBMRUQgaXMgc2FjcmlmaWNlZCBpbiBjYXNlIG9mIElPIGVycm9yICovXFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIFxcdTAwMjY9IH5CSVQoZ3JvdXApO1xcbitcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgXFx1MDAyNj0gfkJJVChncm91cCk7XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY3RybCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgY2hhciAqZHV0eXApXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eTtcXG4rXFxuK1xcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XFxuK1xcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXFxuK1xcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRmb3IgKDsgY3ljbGUgXFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2U9IDEsIGN5Y2xlIFxcdTAwM2VcXHUwMDNlPSAxKVxcbitcXHRcXHRpZiAoY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHQqY3ljbGVwID0gY3ljbGU7XFxuK1xcbitcXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXFxuK1xcdFxcdFxcdFxcdCAgICAgKG9uIFxcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxcbitcXHRcXHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFxcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XFxuK1xcdFxcdFxcdGR1dHkgPSBkdXR5c1tpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0aWYgKG9uIFxcdTAwM2Ugb2ZmKVxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcXG4rXFx0KmR1dHlwID0gZHV0eTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZHV0eTtcXG4rXFx0Ym9vbCB1c2VfY3ljbGU7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghKm9ucCBcXHUwMDI2XFx1MDAyNiAhKm9mZnApIHtcXG4rXFx0XFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0ZHV0eSA9IChwcC1cXHUwMDNlbGVkX2R1dHlfbWFzayBcXHUwMDI2IH5CSVQoZ3JvdXApKSA/IHBwLVxcdTAwM2VsZWRfZHV0eSA6XFxuK1xcdFxcdCAgICAgICBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIGlmICghKm9ucCB8fCAhKm9mZnApIHtcXG4rXFx0XFx0cmV0dXJuIHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCAqb25wKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFxcdTAwMjZjeWNsZSwgXFx1MDAyNmR1dHkpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gY3ljbGUgXFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFxuK1xcdFxcdGlmICh1c2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgY3ljbGUgIT0gcHAtXFx1MDAzZWxlZF9jeWNsZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHBwLVxcdTAwM2VsZWRfY3ljbGVfbWFzayBcXHUwMDI2IH5CSVQoZ3JvdXApKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoZHV0eSAhPSBwcC1cXHUwMDNlbGVkX2R1dHkgXFx1MDAyNlxcdTAwMjYgKHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIFxcdTAwMjYgfkJJVChncm91cCkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHBwLVxcdTAwM2VsZWRfY3ljbGVfbWFzayBcXHUwMDI2PSB+QklUKGdyb3VwKTtcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5X21hc2sgXFx1MDAyNj0gfkJJVChncm91cCk7XFxuK1xcbitcXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XFxuK1xcdGlmICh2YWwgIT0gY3RybCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdHN3aXRjaCAoZHV0eSBcXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAoZHV0eSBcXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xcbitcXHR9XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxcbitcXHRcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgfD0gQklUKGdyb3VwKTtcXG4rXFx0XFx0cHAtXFx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xcbitcXHR9XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIHw9IEJJVChncm91cCk7XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eSA9IGR1dHk7XFxuK1xcbitcXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xcbitcXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIG1hc2s7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCh2YWwgXFx1MDAyNiBtYXAtXFx1MDAzZW1hc2spID09IG1hcC1cXHUwMDNlbWFzaylcXG4rXFx0XFx0XFx0KmZsYWdzcCB8PSBtYXAtXFx1MDAzZWZsYWdzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGN0cmwgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRjdHJsIHw9IG1hcC1cXHUwMDNlbWFzaztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIFxcdTAwMjY9IH5CSVQoZ3JvdXApO1xcbitcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgXFx1MDAyNj0gfkJJVChncm91cCk7XFxuK1xcbitcXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XFxuK1xcdGlmIChncm91cCA9PSAyKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHR9XFxuK1xcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1hc2ssIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxcbitcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxcbitcXHRcXHRcXHRcXHQgICBkZWxheV9vZmYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoXFx1MDAyNnByaXYtXFx1MDAzZWRzLCBwcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAoIWRwKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSlcXG4rXFx0XFx0cmV0dXJuICFkcC1cXHUwMDNldXNlciA/IE5VTEwgOiBcXHUwMDI2ZHAtXFx1MDAzZXVzZXItXFx1MDAzZWRldjtcXG4rXFx0aWYgKGRzYV9wb3J0X2lzX2NwdShkcCkpXFxuK1xcdFxcdHJldHVybiAhZHAtXFx1MDAzZWNvbmR1aXQgPyBOVUxMIDogXFx1MDAyNmRwLVxcdTAwM2Vjb25kdWl0LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXG4rXFx0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFnc3ApO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XFxuK1xcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XFxuK1xcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XFxuK1xcdGludCBwb2xhcml0eV9vcmlnO1xcbitcXHRib29sIGFjdGl2ZV9oaWdoO1xcbitcXHRib29sIGFjdGl2ZV9sb3c7XFxuK1xcdHUzMiBmb3JjZV9vcmlnO1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgdmFsO1xcbitcXHRib29sIG9uO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZncm91cCk7XFxuK1xcdGlmIChyZXMpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJNaXNzaW5nIExFRCByZWcgZm9yICVwZndcXFxcblxcXCIsIGZ3bm9kZSk7XFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFx0aWYgKGdyb3VwIFxcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxcXG5cXFwiLCBncm91cCwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmIChwcC1cXHUwMDNlbGVkc1tncm91cF0pIHtcXG4rXFx0XFx0cmVzID0gLUVFWElTVDtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGFjdGl2ZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRhY3RpdmVfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtbG93XFxcIik7XFxuK1xcdGlmIChhY3RpdmVfaGlnaCBcXHUwMDI2XFx1MDAyNiBhY3RpdmVfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiTEVEICUwMmQ6JTAydSBjYW5ub3QgYmUgYm90aCBhY3RpdmUtaGlnaCBhbmQgYWN0aXZlLWxvd1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgZ3JvdXApO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRwb2xhcml0eSA9IGFjdGl2ZV9oaWdoID8gMSA6IGFjdGl2ZV9sb3cgPyAtMSA6IDA7XFxuK1xcbitcXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxlZCkge1xcbitcXHRcXHRyZXMgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXBvcnQgPSBwcDtcXG4rXFx0bGVkLVxcdTAwM2Vncm91cCA9IGdyb3VwO1xcbitcXG4rXFx0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdHBvbGFyaXR5X29yaWcgPSAwO1xcbitcXHRpZiAocG9sYXJpdHkpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ludjtcXG4rXFxuK1xcdFxcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xcbitcXHRcXHRjdHJsID0gcG9sYXJpdHkgXFx1MDAzZSAwID8gdmFsIHwgbWFzayA6IHZhbCBcXHUwMDI2IH5tYXNrO1xcbitcXHRcXHRpZiAoY3RybCAhPSB2YWwpIHtcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGN0cmwpO1xcbitcXHRcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9pbnY7XFxuK1xcbitcXHRcXHRcXHRwb2xhcml0eV9vcmlnID0gLXBvbGFyaXR5O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZvcmNlX29yaWcgPSBVMzJfTUFYO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycl9sZWQyO1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRjdHJsID0gKHZhbCBcXHUwMDI2IH5tYXNrKSB8XFxuK1xcdFxcdCAgICAgICAob24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxcbitcXHRcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApKTtcXG4rXFx0XFx0aWYgKGN0cmwgIT0gdmFsKSB7XFxuK1xcdFxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBjdHJsKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfbGVkMjtcXG4rXFxuK1xcdFxcdFxcdGZvcmNlX29yaWcgPSB2YWwgXFx1MDAyNiBtYXNrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcXG4rXFx0XFx0b24gPSAodmFsIFxcdTAwMjYgbWFzaykgPT0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRlZmF1bHRfbGFiZWwgPSBcXFwiOnBvcnRcXFwiLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnJfcmVnaXN0ZXI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZWdpc3RlcjpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAoZm9yY2Vfb3JpZyAhPSBVMzJfTUFYKSB7XFxuK1xcdFxcdHJldCA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZm9yY2Vfb3JpZyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiTEVEMl9QT1JUXFxcIiwgcG9ydCwgZ3JvdXAsIHJldCk7XFxuK1xcdH1cXG4rZXJyX2xlZDI6XFxuK1xcdGlmIChwb2xhcml0eV9vcmlnKSB7XFxuK1xcdFxcdHJldCA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcG9sYXJpdHlfb3JpZyBcXHUwMDNlIDApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byByZXN0b3JlICVzIGZvciBMRUQgJTAyZDolMDJ1OiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIkxFRF9QQVJfSU5WXFxcIiwgcG9ydCwgZ3JvdXAsIHJldCk7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitlcnJfaW52OlxcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFxuK2VycjpcXG4rXFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBMRUQgJTAyZDolMDJ1OiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0cG9ydCwgZ3JvdXAsIHJlcyk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXG4rXFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRpZiAobGVkKSB7XFxuK1xcdFxcdFxcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcXHUwMDI2bGVkLVxcdTAwM2VjZGV2KTtcXG4rXFx0XFx0XFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcXG4rXFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5X21hc2sgPSAwO1xcbitcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuK1xcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdGlmICghbGVkc19ucClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocG9ydCBcXHUwMDNlPSBZVDkyMVhfTEVEX1BPUlRfTlVNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCBwb3J0ICVkIGZvciBMRURzXFxcXG5cXFwiLCBwb3J0KTtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXMgPSAwO1xcbitcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpO1xcbitcXHRcXHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHQvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb24gb24gbm9uLWZhdGFsIGVycm9ycyAqL1xcbitcXHRcXHRyZXMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCsrKVxcbitcXHRcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXFxuK1xcdCAqIChhcyBmYXIgYXMgSSBrbm93KS5cXG4rXFx0ICovXFxuK1xcbitcXHRyZXMgPSAwO1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0aWYgKHJlcyA9PSAtRU5PTUVNIHx8IHJlcyA9PSAtRUlPKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uIG9uIG5vbi1mYXRhbCBlcnJvcnMgKi9cXG4rXFx0XFx0cmVzID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMWRmNDc5ZWU1ODEwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfVU5LXFx0XFx0XFx0QklUKDIxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXFx0R0VOTUFTSygyMCwgMTkpXFx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVxcdFxcdEdFTk1BU0soMTYsIDEzKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXFx0XFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFxcdFxcdFxcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX01cXHRcXHRcXHRHRU5NQVNLKDE3LCAwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcXHRCSVQoMTcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXFx0QklUKDE2KVxcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXFx0XFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cXHRcXHRHRU5NQVNLKDMxLCAzMClcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNlXFx1MDAzZSB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVxcdFxcdEdFTk1BU0soMjksIDI4KVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QXFx0QklUKDI3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVxcdFxcdEdFTk1BU0soMjYsIDI1KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlxcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1xcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFxcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlxcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXFx0XFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcXHRcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg0ICogKGdycCkgKyAxOCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXFx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzY1xcdTAwM2MgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcXHRCSVQoMTQpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1xcdEJJVCgxMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcXHRCSVQoMTIpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXFx0QklUKDExKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1xcdFxcdEJJVCgxMClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcXHRcXHRCSVQoOClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcXHRcXHRCSVQoNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cXHRcXHRCSVQoNilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVxcdFxcdEJJVCg1KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXFx0QklUKDMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXFx0QklUKDIpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcXHRCSVQoMSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFxcdFxcdDB4ZDAxMDBcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcXHRcXHRHRU5NQVNLKDI1LCAyNClcXHQvKiBkZWxheT8gKi9cXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXFx0XFx0R0VOTUFTSygxLCAwKVxcdC8qICNncnAgLSAxICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVxcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgNSwgNiAqICgocG9ydCkgJSA1KSArIDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KVxcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1xcdFxcdDB4ZDAxYzRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcXHRcXHQweGQwMWM4XFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXFx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVxcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDUsIDYgKiAoZ3JwKSArIDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKGdycCkgKyAyKSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKGdycCkpKVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlxcdDY0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcXHQ1MTJcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFxcdDIwNDhcXG4rXFxuKy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cXHRcXHQyNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVxcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X2xlZCB7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xcbitcXHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xcbit9O1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcXG4rXFxuKyNlbHNlXFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2VuZGlmXFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmM2FkZmQ2NDE2NWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbkBAIC0wLDAgKzEsMTgwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1xcdDEwMDAwXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1xcdDEwMDAwMFxcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2V3cml0ZShwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4rXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4rXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuK1xcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0KnZhbHAgPSB2YWw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxcbit7XFxuK1xcdGludCByZXM7XFxuK1xcdHUzMiB2O1xcbitcXHR1MzIgdTtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHUgPSB2O1xcbitcXHR1IFxcdTAwMjY9IH5tYXNrO1xcbitcXHR1IHw9IHZhbDtcXG4rXFx0aWYgKHUgPT0gdilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXFxuK1xcdFxcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHR1MzIgdSA9IHZzW2ldO1xcbitcXG4rXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuK1xcdFxcdGlmICh1ICE9IHZzW2ldKVxcbitcXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHZzW2ldID0gdTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjaGFuZ2VkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEyZTIwZjcxZDgwNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxuQEAgLTAsMCArMSw2MSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1lUX1NNSV9IXFxuKyNkZWZpbmUgX1lUX1NNSV9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxcbitcXHRcXHRcXHQgICB1MzIgdmFsKTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcXG4rfVxcbitcXG4rLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcXG4rICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxcbisgKlxcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXFxuKyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cXG4rICovXFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcXG4re1xcbitcXHQqbG8gXFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpoaSBcXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcXG4rXFx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcXG4rXFx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XFxuK2ludCB5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHUzMiAqbWFza3MsIGNvbnN0IHUzMiAqdmFscyk7XFxuK2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXFxuK1xcdFxcdFxcdCAgICBjb25zdCB1MzIgKm1hc2tzKTtcXG4raW50IHl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MDQuODY5ODQwNzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzYxMTgzMzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWU4YjQxN2E1ZjI2Mjg1YWZjMTM1ZTllNThkMjg3MjUzNjU1YWM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDM6NDk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbmluZGV4IDMzYTY1NTJlNDZmYzAuLjkzYmE1YjE4MTIwNWIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuQEAgLTIxLDYgKzIxLDkgQEAgZGVzY3JpcHRpb246IHxcbiBcbiAgIEFueSBwb3J0IGNhbiBiZSB1c2VkIGFzIHRoZSBDUFUgcG9ydC5cbiBcbisgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXG4rICBMRURzIHN0cnVjdHVyZS5cbitcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcbkBAIC01OSw2ICs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXHUwMDNlXG4gXG4gICAgIG1kaW8ge1xuICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuQEAgLTExMyw2ICsxMTcsMjUgQEAgZXhhbXBsZXM6XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFwibGFuMVwiO1xuICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcImludGVybmFsXCI7XG4gICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c3dfcGh5MFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgICAgIGxlZHMge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9XSElURVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXCJrZWVwXCI7XG4rICAgICAgICAgICAgICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbisgICAgICAgICAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgfTtcbiBcbiAgICAgICAgICAgICAgICAgZXRoZXJuZXQtcG9ydEAxIHtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBmYzMyMGIzNzM2NTZmLi5iMjNmYjZmMmY0ZWY0IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTg0MTYsNyArMTg0MTYsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbitGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA2NzZmYjdkZmZlMTRmLi44ZDhlZGNmODlmMTA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5AQCAtODIsNiArODIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcIlxuIFxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wiXG4rXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCJcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wiXG5AQCAtMTY4LDEyICsxNzAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cbiBcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcbiBcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcbiBcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cbi1cbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCA2Y2ViNzhhNzU1ZDc3Li5kZjg0OWNkMGU2NDBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNSwxMSArMTUsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0Kz0gYjUzL1xuIG9iai15XHRcdFx0XHQrPSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQrPSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCs9IG1pY3JvY2hpcC9cbitvYmoteVx0XHRcdFx0Kz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQrPSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCs9IG14bDg2Mnh4L1xuIG9iai15XHRcdFx0XHQrPSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5Y2RkNzlhMWZkMjVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCArMSwxNyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuK1x0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuK1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBjaGlwLlxuK1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4rXHRib29sIFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcIlxuK1x0ZGVmYXVsdCB5XG4rXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4rXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbitcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZWIxMmNiOTFmOTM1XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMCwwICsxLDUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cbit5dDkyMXgtb2JqcyArPSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLmQ2NjNhZjAxMGY0MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyArMTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ5dDkyMXguaFwiXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00NDMwLDYgKzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKVxuIFx0cmV0dXJuIHl0OTIxeF9lZGF0YV9yZWFkX2NvbnQocHJpdiwgYWRkciwgdmFscCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9kc2FfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbisjZW5kaWZcbit9XG4rXG4gc3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbkBAIC00Nzg2LDYgKzQ1ODksMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbitcdGlmIChyZXMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cIiwgcmVzKTtcbisjZW5kaWZcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY2LDYgKzQ2NzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2FkZF9kc2NwX3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXG4gI2VuZGlmXG4gXHQvKiBjaGlwICovXG4rXHQudGVhcmRvd25cdFx0PSB5dDkyMXhfZHNhX3RlYXJkb3duLFxuIFx0LnNldHVwXHRcdFx0PSB5dDkyMXhfZHNhX3NldHVwLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNWYzYjk5ZTE4OWM0MS4uODNjZDQ1NDk1NWRkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC04NTAsOSArODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVx0M1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QT1JUX05VTVx0MTBcbitcbiAvKiA4IGludGVybmFsICsgMiBleHRlcm5hbCArIDEgbWN1ICovXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuIFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbitcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTM4LDYgKzk0MywxNiBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eV9tYXNrO1xuK1x0dW5zaWduZWQgY2hhciBsZWRfY3ljbGVfbWFzaztcbitcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbisjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3ZjZlYjgzNGQ2ZDNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICsxLDY2NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXHUwMDNlaW5kZXhdKVxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuK1xuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcbit7XG4rXHRzd2l0Y2ggKGdyb3VwKSB7XG4rXHRjYXNlIDA6XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDE6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcbitcdC8qIE5vIHJldm9raW5nIC0gTEVEIGlzIHNhY3JpZmljZWQgaW4gY2FzZSBvZiBJTyBlcnJvciAqL1xuK1x0cHAtXHUwMDNlbGVkX2R1dHlfbWFzayBcdTAwMjY9IH5CSVQoZ3JvdXApO1xuK1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gKHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2IH5CSVQoZ3JvdXApKSA/IHBwLVx1MDAzZWxlZF9kdXR5IDpcbitcdFx0ICAgICAgIFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbitcbitcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4rXHR9IGVsc2UgaWYgKCEqb25wIHx8ICEqb2ZmcCkge1xuK1x0XHRyZXR1cm4geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsICpvbnApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1xuK1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4rXG4rXHRcdGlmICh1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayBcdTAwMjYgfkJJVChncm91cCkpKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHkgXHUwMDI2XHUwMDI2IChwcC1cdTAwM2VsZWRfZHV0eV9tYXNrIFx1MDAyNiB+QklUKGdyb3VwKSkpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcbitcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XG4rXHRpZiAodmFsICE9IGN0cmwpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4rXHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbitcdGRlZmF1bHQ6XG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuK1x0XHRicmVhaztcbitcdH1cbitcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4rXHRpZiAodXNlX2N5Y2xlKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4rXHR9XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbitcdFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuK1x0aWYgKHVzZV9jeWNsZSlcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XG4rXHRlbHNlXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayB8PSBCSVQoZ3JvdXApO1xuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdH1cbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgfD0gQklUKGdyb3VwKTtcbitcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbitcbitcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4rXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTMyIG1hc2s7XG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksXG4rXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksXG4rXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbit9O1xuK1xuK3N0YXRpYyBib29sXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuK1x0XHRcdFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGlmICghZmxhZ3MpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRpZiAoIWZsYWdzKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHUzMiBhZGRyO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0aWYgKCh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxuK1x0ICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkge1xuK1x0XHQqZmxhZ3NwID0gMDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdCpmbGFnc3AgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKHZhbCBcdTAwMjYgbWFwLVx1MDAzZW1hc2spID09IG1hcC1cdTAwM2VtYXNrKVxuK1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHR1MzIgYWRkcjtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Y3RybCA9IDA7XG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4rXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuK1x0XHRcdGN0cmwgfD0gbWFwLVx1MDAzZW1hc2s7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZmxhZ3MpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcdHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrIFx1MDAyNj0gfkJJVChncm91cCk7XG4rXG4rXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4rXHRpZiAoZ3JvdXAgPT0gMikge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdH1cbitcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4rXHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuK1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuK1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIWRwKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSlcbitcdFx0cmV0dXJuICFkcC1cdTAwM2V1c2VyID8gTlVMTCA6IFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK1x0aWYgKGRzYV9wb3J0X2lzX2NwdShkcCkpXG4rXHRcdHJldHVybiAhZHAtXHUwMDNlY29uZHVpdCA/IE5VTEwgOiBcdTAwMjZkcC1cdTAwM2Vjb25kdWl0LVx1MDAzZWRldjtcbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbitcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4rXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbitcdGludCBwb2xhcml0eV9vcmlnO1xuK1x0Ym9vbCBhY3RpdmVfaGlnaDtcbitcdGJvb2wgYWN0aXZlX2xvdztcbitcdHUzMiBmb3JjZV9vcmlnO1xuK1x0aW50IHBvbGFyaXR5O1xuK1x0dTMyIGdyb3VwO1xuK1x0dTMyIG1hc2s7XG4rXHR1MzIgY3RybDtcbitcdHUzMiB2YWw7XG4rXHRib29sIG9uO1xuK1x0aW50IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcInJlZ1wiLCBcdTAwMjZncm91cCk7XG4rXHRpZiAocmVzKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIk1pc3NpbmcgTEVEIHJlZyBmb3IgJXBmd1xcblwiLCBmd25vZGUpO1xuK1x0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCIsIGdyb3VwLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pIHtcbitcdFx0cmVzID0gLUVFWElTVDtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRhY3RpdmVfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0YWN0aXZlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1sb3dcIik7XG4rXHRpZiAoYWN0aXZlX2hpZ2ggXHUwMDI2XHUwMDI2IGFjdGl2ZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiTEVEICUwMmQ6JTAydSBjYW5ub3QgYmUgYm90aCBhY3RpdmUtaGlnaCBhbmQgYWN0aXZlLWxvd1xcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRwb2xhcml0eSA9IGFjdGl2ZV9oaWdoID8gMSA6IGFjdGl2ZV9sb3cgPyAtMSA6IDA7XG4rXG4rXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFsZWQpIHtcbitcdFx0cmVzID0gLUVOT01FTTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuK1x0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cbitcdCAqL1xuK1x0cG9sYXJpdHlfb3JpZyA9IDA7XG4rXHRpZiAocG9sYXJpdHkpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIGVycl9pbnY7XG4rXG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuK1x0XHRjdHJsID0gcG9sYXJpdHkgXHUwMDNlIDAgPyB2YWwgfCBtYXNrIDogdmFsIFx1MDAyNiB+bWFzaztcbitcdFx0aWYgKGN0cmwgIT0gdmFsKSB7XG4rXHRcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGN0cmwpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRnb3RvIGVycl9pbnY7XG4rXG4rXHRcdFx0cG9sYXJpdHlfb3JpZyA9IC1wb2xhcml0eTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Zm9yY2Vfb3JpZyA9IFUzMl9NQVg7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVycl9sZWQyO1xuK1x0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbitcdGRlZmF1bHQ6XG4rXHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbitcdFx0Y3RybCA9ICh2YWwgXHUwMDI2IH5tYXNrKSB8XG4rXHRcdCAgICAgICAob24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuK1x0XHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCkpO1xuK1x0XHRpZiAoY3RybCAhPSB2YWwpIHtcbitcdFx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxuK1x0XHRcdFx0XHQgICAgICAgY3RybCk7XG4rXHRcdFx0aWYgKHJlcylcbitcdFx0XHRcdGdvdG8gZXJyX2xlZDI7XG4rXG4rXHRcdFx0Zm9yY2Vfb3JpZyA9IHZhbCBcdTAwMjYgbWFzaztcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRvbiA9ICh2YWwgXHUwMDI2IG1hc2spID09IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRlZmF1bHRfbGFiZWwgPSBcIjpwb3J0XCIsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3JlZ2lzdGVyOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChmb3JjZV9vcmlnICE9IFUzMl9NQVgpIHtcbitcdFx0cmV0ID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSxcbitcdFx0XHRcdFx0ICAgICBmb3JjZV9vcmlnKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcdFwiRmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxuXCIsXG4rXHRcdFx0XHRcIkxFRDJfUE9SVFwiLCBwb3J0LCBncm91cCwgcmV0KTtcbitcdH1cbitlcnJfbGVkMjpcbitcdGlmIChwb2xhcml0eV9vcmlnKSB7XG4rXHRcdHJldCA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLFxuK1x0XHRcdFx0XHQgICAgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCksXG4rXHRcdFx0XHRcdCAgICAgcG9sYXJpdHlfb3JpZyBcdTAwM2UgMCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0ZGV2X2VycihkZXYsXG4rXHRcdFx0XHRcIkZhaWxlZCB0byByZXN0b3JlICVzIGZvciBMRUQgJTAyZDolMDJ1OiAlZFxcblwiLFxuK1x0XHRcdFx0XCJMRURfUEFSX0lOVlwiLCBwb3J0LCBncm91cCwgcmV0KTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitlcnJfaW52OlxuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXG4rZXJyOlxuK1x0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgTEVEICUwMmQ6JTAydTogJWRcXG5cIixcbitcdFx0cG9ydCwgZ3JvdXAsIHJlcyk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKSB7XG4rXHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbitcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgPSAwO1xuK1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0aWYgKCFsZWRzX25wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwb3J0IFx1MDAzZT0gWVQ5MjFYX0xFRF9QT1JUX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIHBvcnQgJWQgZm9yIExFRHNcXG5cIiwgcG9ydCk7XG4rXHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJlcyA9IDA7XG4rXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpO1xuK1x0XHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXG4rXHRcdFx0YnJlYWs7XG4rXHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbiBvbiBub24tZmF0YWwgZXJyb3JzICovXG4rXHRcdHJlcyA9IDA7XG4rXHR9XG4rXG4rXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCsrKVxuK1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbit9XG4rXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXG4rXHQgKiAoYXMgZmFyIGFzIEkga25vdykuXG4rXHQgKi9cbitcbitcdHJlcyA9IDA7XG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4rXHRcdGlmICghZHAtXHUwMDNlZG4pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgZHAtXHUwMDNlaW5kZXgpO1xuK1x0XHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXG4rXHRcdFx0YnJlYWs7XG4rXHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbiBvbiBub24tZmF0YWwgZXJyb3JzICovXG4rXHRcdHJlcyA9IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTFkZjQ3OWVlNTgxMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgKzEsMTE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTEVEU19IXG4rI2RlZmluZSBfWVRfTEVEU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTktcdFx0XHRCSVQoMjEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVx0R0VOTUFTSygyMCwgMTkpXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcdEJJVCgxNilcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cdFx0R0VOTUFTSygzMSwgMzApXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2NcdTAwM2MgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxNikpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcdEJJVCgxNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXHRCSVQoMTEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXHRcdEJJVCg4KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cdFx0QklUKDUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcdEJJVCgyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcdFx0MHhkMDEwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXHRcdEdFTk1BU0soMSwgMClcdC8qICNncnAgLSAxICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXHQyMDQ4XG4rXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXHRcdDI0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK3N0cnVjdCB5dDkyMXhfbGVkIHtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbitcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmM2FkZmQ2NDE2NWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgKzEsMTgwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuK1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuK1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4rXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQqdmFscCA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuK3tcbitcdGludCByZXM7XG4rXHR1MzIgdjtcbitcdHUzMiB1O1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0dSA9IHY7XG4rXHR1IFx1MDAyNj0gfm1hc2s7XG4rXHR1IHw9IHZhbDtcbitcdGlmICh1ID09IHYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHR1IHw9IHZhbHNbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0aWYgKHUgIT0gdnNbaV0pXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXG4rXHRcdHZzW2ldID0gdTtcbitcdH1cbitcbitcdGlmICghY2hhbmdlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIxMmUyMGY3MWQ4MDZcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgKzEsNjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9TTUlfSFxuKyNkZWZpbmUgX1lUX1NNSV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbitcdFx0XHQgICB1MzIgdmFsKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4rfVxuK1xuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4rICpcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuK3tcbitcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4rXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuK1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XG4raW50IHl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXG4rXHRcdFx0ICAgICBjb25zdCB1MzIgKm1hc2tzLCBjb25zdCB1MzIgKnZhbHMpO1xuK2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXG4rXHRcdFx0ICAgIGNvbnN0IHUzMiAqbWFza3MpO1xuK2ludCB5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpO1xuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MDQuODY5ODQ0MTczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyNTMxMjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IEFNRDY0IEFyY2hpdGVjdHVyZSBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzLCBwcmVzdW1hYmx5IGZvciBhbWQ2NCwgYW5kIHRoZSB1c2VyIHdhbnRzIG15IGV4cGVydCBleWUuIExldCdzIGRpZyBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLlwiIFRoZSBwYXRjaCBpbmNsdWRlcyBjaGFuZ2VzIHRvIHNldmVyYWwgZmlsZXMsIHdoaWNoIGlzIGEgZ29vZCBzaWduIHRoYXQgdGhlIHNjb3BlIGlzIHByZXR0eSB3aWRlLlxuXG5GaXJzdCB1cCwgdGhlcmUncyBhIGRldmljZSB0cmVlIGJpbmRpbmcsIHRoZSBgbW90b3Jjb21tLHl0OTIxeC55YW1sYCBmaWxlLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgdGhpcyBpcyBkZXNpZ25lZCB0byBwbGF5IG5pY2VseSB3aXRoIG1vZGVybiBkZXZpY2UgdHJlZSBwcmFjdGljZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG1vZGVybiBzeXN0ZW1zLiBOZXh0LCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGFwcHJvcHJpYXRlIG1haW50YWluZXJzIGFyZSBsaXN0ZWQgYW5kIGlmIHRoZXkndmUgYWxyZWFkeSByZXZpZXdlZCB0aGUgY29kZSwgb3IgaWYgdGhpcyBpcyBhbiBhcmVhIEkgbmVlZCB0byB0YWtlIHNwZWNpYWwgY2FyZSB3aXRoLlxuXG5UaGVuLCB0aGVyZSBhcmUgdGhlIHVzdWFsIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBlbnRyaWVzIGluIHRoZSBEU0EgZGlyZWN0b3J5IGFuZCB0aGUgYG1vdG9yY29tbWAgc3ViZGlyZWN0b3J5LCBzbyBpdCBsb29rcyBsaWtlIHRoaXMgZHJpdmVyIGlzIGJlaW5nIHByb3Blcmx5IGludGVncmF0ZWQuIEltcG9ydGFudGx5LCBJIHNlZSBhIHJlbmFtaW5nIG9mIGB5dDkyMXguY2AgYW5kIGB5dDkyMXguaGAgdG8gYGNoaXAuY2AgYW5kIGBjaGlwLmhgLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRyaXZlcidzIGNvcmUgbG9naWMgaGFzbid0IGNoYW5nZWQgYmVjYXVzZSB0aGlzIHJlbmFtaW5nIGNhbiBvZnRlbiBiZSBhIHNvdXJjZSBvZiBwcm9ibGVtcy4gSXQgYWxzbyBpbmNsdWRlcyBuZXcgYGxlZHMuYy9oYCBhbmQgYHNtaS5jL2hgIGZpbGVzIHdpdGhpbiB0aGUgYG1vdG9yY29tbWAgZGlyZWN0b3J5LCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZSBkcml2ZXIgbWF5IGluY2x1ZGUgbmV3IGZ1bmN0aW9uYWxpdGllcywgc3VjaCBhcyBMRURzIG9yIFNNSSBtYW5hZ2VtZW50LlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzICphY3R1YWxseSogYnJvdWdodCBpbnRvIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgYHl0OTIxeGAgaXMgcHJvYmVkL2luc3RhbnRpYXRlZC4gSSB3aWxsIG9wZW4gdXAgYGNoaXAuY2AgYW5kIGxvb2sgZm9yIG1vZHVsZSBvciBkcml2ZXIgcmVnaXN0cmF0aW9uLiBJJ2xsIGFsc28gZG8gYSBxdWljayBgZ3JlcGAgdGhyb3VnaCB0aGUgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9gIGRpcmVjdG9yeSB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGRpc2NvdmVycyB0aGlzIHNwZWNpZmljIHN3aXRjaCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBEU0EgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjA5LjA5NTE1OTM1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3ODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfLipfZHJpdmVyfHJlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwNzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwOC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTIwPXl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM4OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01NDg9c3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1NS1cXHQvKiBSZWFkaW5nIG9mIHl0OTIxeF9wb3J0OjptaWIgaXMgbm90IHByb3RlY3RlZCBieSBhIGxvY2sgYW5kIGl0J3MgdmFpblxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1NjpcXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU3LVxcdCAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gbWFrZSBhIHNuYXBzaG90IG9mIE1JQiBzdGF0cy5cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2OTI9c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MDQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcwNTpcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXFx1MDAyNnByaXYtXFx1MDAzZWRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzA2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDcyND1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2OTpcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MC19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00Nzc4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzg4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODktXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD05NjM9c3RydWN0IHl0OTIxeF9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTk3Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo5NzM6XFx0LyogcHJvdGVjdCB0aGUgYWNjZXNzIHRvIHRoZSBzd2l0Y2ggcmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtOTc0LVxcdHN0cnVjdCBtdXRleCByZWdfbG9jaztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTQxNT15dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NDYtXFx0fTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYzo1NDc6XFx0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU0OC1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jOjU0OTpcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTUzOmVycl9yZWdpc3RlcjpcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTQtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM9NTg2PXN0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01OTQtXFx0XFx0aWYgKGxlZCkge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jOjU5NTpcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTk2LVxcdFxcdFxcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oPTMzPXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oLTM3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg6Mzg6LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg6Mzk6ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaC00MC0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaC00MS0gKlxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg6NDI6ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgtNDMtICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OTowOS4xNDMwNDUxODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDY0Nzk1NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgRW52aXJvbm1lbnQncyBSZWFjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGFuZCBhc3NvY2lhdGVkIGhhcmR3YXJlLCB0aGUgeXQ5MjF4LCBpcyBldmVuIGFjY2Vzc2libGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IFwieXQ5MjF4XCIgKmlzKi4gQWgsIGl0J3MgYW4gTURJTyBkcml2ZXIuIFNwZWNpZmljYWxseSwgYG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlcjsgbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7YC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSBNRElPIGRldmljZXMsIGFuZCBzcGVjaWZpY2FsbHkgRFNBIHN3aXRjaGVzLCBwcm9iZWFibGUgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBlbXVsYXRlZCBoYXJkd2FyZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgb3Igd2l0aCBnZW5lcmljIHZpcnR1YWwgZGV2aWNlcz8gSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gZ2V0IHNvbWV0aGluZyBsaWtlIGEgTW90b3Jjb21tIFlUOTIxNSB0byBwcm9iZSB3aXRob3V0IG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBjdXN0b20gZGV2aWNlIHRyZWUgZm9yIGEgcGFydGljdWxhciBib2FyZC5cblxuTGV0J3MgZGlnIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBEU0EvTURJTyBkZXZpY2VzIGFyZSBwcm9iZWQuIERvIHRoZXkgKnJlcXVpcmUqIGEgcGh5c2ljYWwgTURJTyBidXMgYW5kIGEgRGV2aWNlIFRyZWUgKERUKSwgb3IgaXMgdGhlcmUgc29tZSBraW5kIG9mIG1vY2sgb3IgdmlydHVhbCBidXMgYXZhaWxhYmxlPyBIb2xkIG9uLCBsZXQncyBqdW1wIGJhY2sgdG8gU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMsIHdoaWNoIGhpZ2hsaWdodHMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhpcyBzZWN0aW9uOiB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAobWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgbmVlZCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIGdvb2QgY29tcGFyaXNvbiBwb2ludC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgRFNBIGRyaXZlcnMsIEkyQywgU1BJLCBNRElPIHN3aXRjaCBjaGlwcyBpbiBnZW5lcmFsPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgRFNBIHN3aXRjaCBkcml2ZXJzIGFyZSBldmFsdWF0ZWQgaW4gdGhlIHN5emthbGxlciB0cmlhZ2UgcHJvY2Vzcy5cblxuU28sIHRoZSBjb3JlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gdGhpczogQ2FuIE1ESU8gc3dpdGNoZXMgb3IgRFNBIHN3aXRjaGVzIChzcGVjaWZpY2FsbHksIHRob3NlIGxpa2UgdGhlIG9uZXMgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYCkgYmUgaW5zdGFudGlhdGVkIHdpdGhpbiBhIHN0YW5kYXJkIHN5emthbGxlciAvIFFFTVUgYW1kNjQgZW52aXJvbm1lbnQ/XG5cbkhvdyB3b3VsZCBhbiBNRElPIHN3aXRjaCBjaGlwIGxpa2UgdGhlIFlUOTIxNSBwcm9iZSBvbiBhbWQ2ND8gVGhpcyBpcyByZWFsbHkgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFRpbWUgdG8gZXhhbWluZSB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBpbnNwZWN0IGBjaGlwLmNgIGFyb3VuZCBgeXQ5MjF4X21kaW9fZHJpdmVyYCBhbmQgYHl0OTIxeF9tZGlvX3Byb2JlYCB0byBzZWUgaG93IGl0J3MgZG9uZS4gVGhhdCdsbCB0ZWxsIG1lIGlmIGl0ICpuZWVkcyogc29tZXRoaW5nIGJleW9uZCB3aGF0J3MgYXZhaWxhYmxlIGluIG15IHN0YW5kYXJkIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE3OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OToxNC4yMDc4NDM4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY5MDpcXHR9XFxuNDY5MTpcXHRcXG40NjkyOlxcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuNDY5MzpcXHR7XFxuNDY5NDpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbjQ2OTU6XFx0XFxuNDY5NjpcXHRcXHRpZiAoIXByaXYpXFxuNDY5NzpcXHRcXHRcXHRyZXR1cm47XFxuNDY5ODpcXHRcXG40Njk5OlxcdFxcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaS0tIFxcdTAwM2UgMDsgKSB7XFxuNDcwMDpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ3MDE6XFx0XFxuNDcwMjpcXHRcXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQpO1xcbjQ3MDM6XFx0XFx0fVxcbjQ3MDQ6XFx0XFxuNDcwNTpcXHRcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXFx1MDAyNnByaXYtXFx1MDAzZWRzKTtcXG40NzA2OlxcdFxcbjQ3MDc6XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZWFjbF9ibGtzKTsgaSsrKSB7XFxuNDcwODpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXFx1MDAzZWFjbF9ibGtzW2ldO1xcbjQ3MDk6XFx0XFxuNDcxMDpcXHRcXHRcXHRpZiAoIWFjbGJsaylcXG40NzExOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ3MTI6XFx0XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cXHUwMDNlcnVsZXMpOyBqKyspIHtcXG40NzEzOlxcdFxcdFxcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX3J1bGUgKmFjbHJ1bGUgPSBhY2xibGstXFx1MDAzZXJ1bGVzW2pdO1xcbjQ3MTQ6XFx0XFxuNDcxNTpcXHRcXHRcXHRcXHRpZiAoIWFjbHJ1bGUpXFxuNDcxNjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40NzE3OlxcdFxcdFxcdFxcdGt2ZnJlZShhY2xydWxlKTtcXG40NzE4OlxcdFxcdFxcdH1cXG40NzE5OlxcdFxcdFxcdGt2ZnJlZShhY2xibGspO1xcbjQ3MjA6XFx0XFx0fVxcbjQ3MjE6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ3MjI6XFx0fVxcbjQ3MjM6XFx0XFxuNDcyNDpcXHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG40NzI1OlxcdHtcXG40NzI2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuNDcyNzpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvO1xcbjQ3Mjg6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xcbjQ3Mjk6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xcbjQ3MzA6XFx0XFxuNDczMTpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuNDczMjpcXHRcXHRpZiAoIXByaXYpXFxuNDczMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzM0OlxcdFxcbjQ3MzU6XFx0XFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xcbjQ3MzY6XFx0XFx0aWYgKCFtZGlvKVxcbjQ3Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDczODpcXHRcXG40NzM5OlxcdFxcdG1kaW8tXFx1MDAzZWJ1cyA9IG1kaW9kZXYtXFx1MDAzZWJ1cztcXG40NzQwOlxcdFxcdG1kaW8tXFx1MDAzZWFkZHIgPSBtZGlvZGV2LVxcdTAwM2VhZGRyO1xcbjQ3NDE6XFx0XFx0bWRpby1cXHUwMDNlc3dpdGNoaWQgPSAwO1xcbjQ3NDI6XFx0XFxuNDc0MzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDc0NDpcXHRcXG40NzQ1OlxcdFxcdHByaXYtXFx1MDAzZXJlZ19vcHMgPSBcXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcXG40NzQ2OlxcdFxcdHByaXYtXFx1MDAzZXJlZ19jdHggPSBtZGlvO1xcbjQ3NDc6XFx0XFxuNDc0ODpcXHRcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpKyspIHtcXG40NzQ5OlxcdFxcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV07XFxuNDc1MDpcXHRcXG40NzUxOlxcdFxcdFxcdHBwLVxcdTAwM2VpbmRleCA9IGk7XFxuNDc1MjpcXHRcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cHAtXFx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xcbjQ3NTM6XFx0XFx0fVxcbjQ3NTQ6XFx0XFxuNDc1NTpcXHRcXHRkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG40NzU2OlxcdFxcdGRzLVxcdTAwM2VkZXYgPSBkZXY7XFxuNDc1NzpcXHRcXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuNDc2MDpcXHRcXHRkcy1cXHUwMDNlb3BzID0gXFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcXG40NzYxOlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcXG40NzYyOlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcXG40NzYzOlxcdFxcdGRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcXG40NzY0OlxcdFxcdGRzLVxcdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xcbjQ3NjU6XFx0XFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcXG40NzY2OlxcdFxcbjQ3Njc6XFx0XFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcXG40NzY4OlxcdFxcbjQ3Njk6XFx0XFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xcbjQ3NzA6XFx0fVxcbjQ3NzE6XFx0XFxuNDc3MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcXG40NzczOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG40Nzc0OlxcdFxcdHt9XFxuNDc3NTpcXHR9O1xcbjQ3NzY6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcXG40Nzc3OlxcdFxcbjQ3Nzg6XFx0c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuNDc3OTpcXHRcXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcXG40NzgwOlxcdFxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuNDc4MTpcXHRcXHQuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93bixcXG40NzgyOlxcdFxcdC5tZGlvZHJ2LmRyaXZlciA9IHtcXG40NzgzOlxcdFxcdFxcdC5uYW1lID0gWVQ5MjFYX05BTUUsXFxuNDc4NDpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXFxuNDc4NTpcXHRcXHR9LFxcbjQ3ODY6XFx0fTtcXG40Nzg3OlxcdFxcbjQ3ODg6XFx0bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuNDc4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MTQuMjA4MDgxMTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzcwNjI3ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB5dDkyMXhfbWRpb19kcml2ZXJgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgbG9va3MgbGlrZSBpdCdzIGtleWVkIG9mZiB0aGUgYHl0OTIxeF9vZl9tYXRjaGAgT3BlbkZpcm13YXJlL0RldmljZVRyZWUgbm9kZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYG1vdG9yY29tbSx5dDkyMTVgIGRldmljZS4gIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgdGhpbmcgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgeDg2XzY0IG9yIGFtZDY0IFFFTVU/IEkgbWVhbiwgd2l0aG91dCBhIERldmljZVRyZWUgb3IgYSBwaHlzaWNhbCBNRElPIGJ1cyB3aXRoIHRoaXMgcGFydGljdWxhciBzd2l0Y2ggaG9va2VkIHVwP1xuXG5Ib2xkIG9uLi4uIGJlZm9yZSBJIGdvIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGFwcGx5IFNlY3Rpb24gMiBvZiB0aGUgdHJpYWdlIHBoaWxvc29waHkuICBUaGF0IFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgY2hlY2sgaXMgaW1wb3J0YW50LiBJdCBoaWdobGlnaHRzIHdoZW4gc29tZXRoaW5nIGlzICpub3QqIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuICBJIG5lZWQgdG8gc2VlIGlmIGl0IGZhbGxzIHVuZGVyIGFueSBvZiB0aG9zZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIGtleSBoZXJlIGlzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiICBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLlxuXG5Ob3csIERTQSBzd2l0Y2hlcyBhcmUgcGh5c2ljYWwsIHJpZ2h0PyBFdGhlcm5ldCBzd2l0Y2ggY2hpcHMg4oCTIHRoaW5ncyBsaWtlIHRoZSBNYXJ2ZWxsIG12ODhlNnh4eCwgdGhlIE1vdG9yY29tbSBZVDkyMTUgKHRoZSBvbmUgd2UncmUgZGVhbGluZyB3aXRoKSwgdGhlIFJlYWx0ZWsgUlRMODM2NiwgTWljcm9jaGlwIEtTWiwgZXRjLiBUaGV5IGdldCB3aXJlZCBpbiB2aWEgTURJTywgU1BJLCBvciBtZW1vcnktbWFwcGVkIEkvTywgdHlwaWNhbGx5IG9uIGVtYmVkZGVkIGJvYXJkcyDigJMgQVJNLCBNSVBTLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIHdpdGggRGV2aWNlVHJlZXMgZGVzY3JpYmluZyB0aGUgc3dpdGNoIGFuZCBpdHMgcG9ydHMuXG5cblNvLCB0aGUgcnViIGlzOiBvbiBhbWQ2NC9zdGFuZGFyZCBRRU1VLCB0aGVyZSdzIG5vIHZpcnR1YWwgTURJTyBidXMgd2l0aCBhIE1vdG9yY29tbSBZVDkyMTUgY2hpcCBhdHRhY2hlZC4gQmluZ28uICBUaGlzIHNjcmVhbXMgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIi4gIFRoZSBxdWVzdGlvbiBpczogY2FuIGEgdXNlci1zcGFjZSBwcm9jZXNzIGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcz8gIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIHN5c2ZzIGludGVyZmFjZSBvciBzb21lIHBzZXVkbyBpbnRlcmZhY2UgdG8gc3BpbiB1cCBNRElPIGRldmljZXMgb24gYW4gTURJTyBidXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Nzg5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MTguNTc4NzEyODE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDMzOTc4NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19kcml2ZXJfcmVnaXN0ZXJ8bWRpb2J1c19yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExOTIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDk9TURJT1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1MS0gIGRldm1fbWRpb2J1c19hbGxvY19zaXplKClcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUyOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUzOiAgZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKClcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzU0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3Q9MTI9ZGV2aWNlICh0aGUgc2FtZSBvYmplY3RzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgdmlhXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3Q6MTM6YGBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKWBgKS4gTUFDLXNpZGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzIHN1Y2ggYXNcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q9Nz1UaGUgUEhZcyBvbiBhbiBNRElPIGJ1cyBbcGh5XSBhcmUgcHJvYmVkIGFuZCByZWdpc3RlcmVkIHVzaW5nXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0LTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTYtICAgZHJpdmVyIG5lZWRzLCBzZXR1cCB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUsIGFuZCByZWdpc3RlciB3aXRoIHRoZSBQQUwgdXNpbmdcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSdzIGEgcmVtb3ZlIGZ1bmN0aW9uIHRvIHVuZG8gYWxsIG9mXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jPTEwOT1zdGF0aWMgaW50IGVwODI0OGVfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMtMTMyLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM6MTMzOlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMtMTM0LVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYz0yMDc9c3RhdGljIGludCBncGlvX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYy0yNDMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM6MjQ0OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjgzLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTQ6XFx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmRzYV9sb29wX2Rydik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTE4Nz1zdGF0aWMgaW50IGdzd2lwX21kaW8oc3RydWN0IGdzd2lwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6MjE0OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MzIxPXN0YXRpYyBpbnQga3N6OTQ3N19wY3NfY3JlYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MzQyOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXFx1MDAzZWRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTIzMjE9aW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzkyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjIzOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5NC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTY4NT1zdGF0aWMgaW50IGxhbjkzN3hfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo3NTY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwNzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwOC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTIwPXl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM4OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQwOT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0NC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQ0NTpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTI0Mj1zdGF0aWMgaW50IG10NzYyOF9zZXR1cF9pbnRlcm5hbF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjEtXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jOjI2MjpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTI2Nz1zdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjkyLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjI5MzpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5NC1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTE0OT1zdGF0aWMgaW50IG5ldGNfcG9ydF9jcmVhdGVfZW1kaW9fYnVzKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjE4MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDEzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjEwMTQ6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jPTg3OD1zdGF0aWMgaW50IHZzYzk5NTNfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXFx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYzo5MDQ6XFx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTA1LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9MzU3PXN0YXRpYyBpbnQgYXI5MzMxX3N3X21idXNfaW5pdChzdHJ1Y3QgYXI5MzMxX3N3X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjM4MjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgzLVxcdG9mX25vZGVfcHV0KG1ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05NDc9cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODc6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC03LVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oOjg6c3RhdGljIGlubGluZSBpbnQgcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC05LXtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaDoxMDpcXHRyZXR1cm4gbWRpb19kcml2ZXJfcmVnaXN0ZXIoZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0xMS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaD0yMD12b2lkIHJlYWx0ZWtfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmgtMjMtXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmg6MjQ6c3RhdGljIGlubGluZSBpbnQgcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0yNS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTMzNzM9c3RhdGljIGludCBydGw4MzY1bWJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMzc2LVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM6MzM3NzpcXHRyZXQgPSByZWFsdGVrX21kaW9fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZydGw4MzY1bWJfbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMzM3OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmM9MTg2Nj1zdGF0aWMgaW50IHJ0bDgzNjZyYl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYy0xODY5LVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jOjE4NzA6XFx0cmV0ID0gcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2cnRsODM2NnJiX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYy0xODcxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9NzQ9aW50IHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy05OS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTAwOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jPTExMTc9c3RhdGljIGludCBhNXBzd19wcm9iZV9tZGlvKHN0cnVjdCBhNXBzdyAqYTVwc3csIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0My1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExNDQ6XFx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQ1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzA5LS8qIEZyb20gc2phMTEwNV9tZGlvLmMgKi9cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzExLXZvaWQgc2phMTEwNV9tZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjctXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcXHRyYyA9IHNqYTExMDVfbWRpb2J1c19yZWdpc3Rlcihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2OS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzEyPXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdDFfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0My1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozNDQ6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0NS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozOTY6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDU4LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM9NDU5PXN0YXRpYyBpbnQgYXhfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYzo0Nzk6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDgwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTMyMT1zdGF0aWMgaW50IG93bF9lbWFjX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNDY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGlkZXYtXFx1MDAzZWRldiwgcHJpdi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM9MTI5MD1zdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYzoxMzA3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoZ3JldGgtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwOC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYz0zOTMxPXN0YXRpYyBpbnQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6NDAyNzpcXHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyOC1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9MTIxPXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9tZGlvX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYzoxNTg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTktXFx0aWYgKHJldCAhPSAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jPTEwNjE9c3RhdGljIGludCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjEyMjI6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihhdXAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTM0Mjg9c3RhdGljIGludCB4Z2JlX3BoeV9pbml0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cXHRzbnByaW50ZihtaWktXFx1MDAzZWlkLCBzaXplb2YobWlpLVxcdTAwM2VpZCksIFxcXCIlc1xcXCIsIGRldl9uYW1lKHBkYXRhLVxcdTAwM2VkZXYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MTg6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzIwOlxcdFxcdGRldl9lcnIocGRhdGEtXFx1MDAzZWRldiwgXFxcIm1kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MjEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM9OTg9aW50IHhnZV9tZGlvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTE4LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4MTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jOjExOTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG1paV9idXMgKm1kaW8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkxMzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTE0LVxcdFxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MjI6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz05Mzk9aW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5NTg6XFx0cmV0ID0geGdlbmVfbWRpb2J1c19yZWdpc3RlcihwZGF0YSwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlxcdGVycm9yID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3NC1cXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM6MTAxMTpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBheF9sb2NhbC1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz02ODc9c3RhdGljIGludCBhZzcxeHhfbWRpb19wcm9iZShzdHJ1Y3QgYWc3MXh4ICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI3LVxcdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6NzI4OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjktXFx0b2Zfbm9kZV9wdXQobW5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI2MDpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM9MjExPXN0cnVjdCBtaWlfYnVzICpiY21hX21kaW9fbWlpX3JlZ2lzdGVyKHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM6MjM2OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWlpX2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cXHRvZl9ub2RlX3B1dChucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjMzLVxcdFxcdHBoeV9uYW1lID0gXFxcImV4dGVybmFsIFJ2TUlJXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoyMzQ6XFx0XFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJ21heC1zcGVlZCdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzUtXFx0XFx0ICogUEhZIHByb3BlcnR5IGZvciB1cywgZWZmZWN0aXZlbHkgbGltaXRpbmcgdGhlIFBIWSBzdXBwb3J0ZWRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyNy1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MjIyODpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHNjLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyOS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYz0xNTA1PXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTU1ODpcXHRpID0gbWRpb2J1c19yZWdpc3Rlcih0cC1cXHUwMDNlbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTktXFx0aWYgKGkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMz1zdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDk3OnN0YXRpYyBpbnQgbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtYWNiICpicCwgc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDQtXFx0aWYgKG1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1OlxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTE5OlxcdFxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTIyOlxcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5OlxcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTYwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jPTExMDc9c3RhdGljIGludCBkbTkwNTFfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYm9hcmRfaW5mbyAqZGIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYzoxMTI1OlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGRiLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz0yNDIzPXN0YXRpYyBpbnQgdHNuZXBfbWRpb19pbml0KHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjI0NTU6XFx0cmV0dmFsID0gb2ZfbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtZGlvYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBwcml2LVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NzEtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYz0zNj1zdGF0aWMgaW50IGVuZXRjX3BjaV9tZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM6OTE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yNjY9c3RhdGljIGludCBlbmV0Y19tZGlvX3Byb2JlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyOTM6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MzA0Mj1zdGF0aWMgaW50IGZlY19lbmV0X21paV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMxNjE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXFx1MDAzZW1paV9idXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYz02NT1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2YpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYzoxMDY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTE0OT1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MTc2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jPTk3PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM6MTY3OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz00MDk9c3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjQ5NDpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyNi1cXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI3OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI4LVxcdGVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5OlxcdFxcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIGZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM9MTA5ND1zdGF0aWMgaW50IGhpeDVoZDJfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM6MTE4NjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM9MTIzPWludCBoY2xnZV9tYWNfbWRpb19jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IH4oMVUgXFx1MDAzY1xcdTAwM2MgbWFjLVxcdTAwM2VwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM9NDk1PXN0YXRpYyBpbnQgaG5zX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1ODQ6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVxcdH0gZWxzZSBpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXFx1MDAzZWRldi5md25vZGUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTItXFx0XFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTkzOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTk0LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IGVtYWNfZHRfbWRpb19wcm9iZShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXYtXFx1MDAzZW9mZGV2LVxcdTAwM2VuYW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM6MjU4NTpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNmRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZWRldiwgYnVzLCBtaWlfbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVxcdGlmIChyZXMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA4OC1cXHRhZGFwdGVyLVxcdTAwM2VtaWlfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjEwODk6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDkwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDItXFx0XFx0IHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcXHRpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtaWlfYnVzKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVxcdFxcdGVyciA9IC1FTlhJTztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM9MjgzPXN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXFx0LyogRm9yIHRoZSBwbGF0Zm9ybXMgbm90IHN1cHBvcnRpbmcgRFQvQUNQSSBmYWxsLWJhY2tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4MjpcXHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgzLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVxcdGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODYtXFx0ZWxzZVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OToyMC42ODIxMTU0NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Nzk5NTAzMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSB5dDkyMXggTURJTyBEcml2ZXIgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYHl0OTIxeF9tZGlvX2RyaXZlcmAsIHdoaWNoIGlzIGFuIE1ESU8gZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBzd2l0Y2ggY2hpcC4gSXQgaWRlbnRpZmllcyBpdHNlbGYgdmlhIHRoZSBcIm1vdG9yY29tbSx5dDkyMTVcIiBjb21wYXRpYmxlIHN0cmluZyBpbiB0aGUgRGV2aWNlIFRyZWUuIEkgcXVpY2tseSBnbGFuY2UgYXQgYG5ldC9kc2EvdGFnX3l0OTIxeC5jYCDigJMganVzdCBhIHF1aWNrIGNoZWNrIHNpbmNlIHRoZSBwYXRjaCBkaWRuJ3QgbW9kaWZ5IGl0LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0ICp3YXMqIG1vZGlmaWVkLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgRGV2aWNlIFRyZWUgYmluZGluZ3MsIHRoZSBNQUlOVEFJTkVSUyBmaWxlLCBhbmQgdGhlIERTQSBLY29uZmlnL01ha2VmaWxlLCBhbG9uZ3NpZGUgdGhlIGludHJvZHVjdGlvbiBvZiBgbGVkcy5jYCBhbmQgYHNtaS5jYCBmb3IgTEVEIHN1cHBvcnQgYW5kIFNNSSByZWdpc3RlciBhY2Nlc3MsIHJlc3BlY3RpdmVseSwgd2l0aGluIGEgbmV3IGBtb3RvcmNvbW1gIGRpcmVjdG9yeSB1bmRlciBgZHJpdmVycy9uZXQvZHNhL2AuIFRoZSBjb3JlIGRyaXZlciBjb2RlIGhhcyBiZWVuIHJlbmFtZWQgZnJvbSBgeXQ5MjF4LmNgIHRvIGBjaGlwLmNgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgb24gYW4gYW1kNjQgbWFjaGluZSB1c2luZyBRRU1VIG9yIHN5emthbGxlcj8gSXMgdGhlcmUgc29tZSB2aXJ0dWFsIG9yIGVtdWxhdGVkIGhhcmR3YXJlIG9yIG5ldGxpbmsvc3lzY2FsbCBpbnRlcmZhY2UgdGhhdCBjb3VsZCByZWFjaCB0aGVzZSBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYD8gSSBjaGVjayBpZiBgZHNhX2xvb3BgIG9yIGFueXRoaW5nIHNpbWlsYXIgd291bGQgdXNlIGl0LCBidXQgYGRzYV9sb29wLmNgIGhhcyBpdHMgb3duIHN3aXRjaCBvcGVyYXRpb25zLlxuXG5UaGUgcmVhbGl0eSBpcywgYHl0OTIxeGAgaXMgYSAqc3BlY2lmaWMqIGhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIFlUOTIxNSBBU0lDLiBJdCAqbmVlZHMqIHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUsIGNvbm5lY3RlZCB0byBhbiBNRElPIGJ1cywgYW5kIGRlc2NyaWJlZCBpbiB0aGUgRGV2aWNlIFRyZWUgd2l0aCB0aGF0IFwibW90b3Jjb21tLHl0OTIxNVwiIGNvbXBhdGlibGUgc3RyaW5nLiBXaXRob3V0IHRoZSByZWFsIFlUOTIxNSBBU0lDIHdpcmVkIHRvIGEgTURJTyBidXMgYW5kIGEgRFQgZGVzY3JpcHRpb24sIGB5dDkyMXhfbWRpb19wcm9iZSgpYCB3aWxsICpuZXZlciogYmUgY2FsbGVkLiBDb25zZXF1ZW50bHksIG5vbmUgb2YgdGhlIGZ1bmN0aW9ucyBpbiBgY2hpcC5jYCwgYGxlZHMuY2AsIG9yIGBzbWkuY2Ag4oCTIHdoaWNoIGFyZSBEU0EgY2FsbGJhY2tzIGFuZCBMRUQgY2xhc3NkZXYgY2FsbGJhY2tzIOKAkyB3aWxsIGV2ZXIgZXhlY3V0ZSBiZWNhdXNlIHRoZXkncmUgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIHByb2JlLlxuXG5UaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgY29tcGFyaXNvbiB0byBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucy4gVGhlIGRlc2NyaXB0aW9uIG9mIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIg4oCTIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUNzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIOKAkyBuYWlscyBpdC4gVGhpcyBkcml2ZXIgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cblNvLCAqV29ydGhGdXp6aW5nKiBpcyBmYWxzZS5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGFsbCByZXF1aXJlbWVudHMgYmVmb3JlIHNldHRpbmcgdGhlIHJlc3VsdHM6XG5cbjEuICAqV29ydGhGdXp6aW5nKjogRmFsc2VcbjIuICAqRW5hYmxlQ29uZmlncyo6IEVtcHR5IGxpc3QgKG9yIG51bGwgb3IgcmVsZXZhbnQgY29uZmlncywgc3VjaCBhcyBgTkVUX0RTQV9ZVDkyMVhgLCBgTkVUX0RTQV9ZVDkyMVhfTEVEU2Ag4oCTIHN5emthbGxlciBsaWtlcyBhbiBlbXB0eSBsaXN0L251bGwgZm9yIGZhbHNlKS5cbjMuICAqRm9jdXNTeW1ib2xzKjogRW1wdHkgbGlzdCBvciBudWxsXG40LiAgKlJlYXNvbmluZyo6IEEgY2xlYXIgZXhwbGFuYXRpb246IEl0J3MgYW4gTURJTy1jb25uZWN0ZWQgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIEFTSUMgZHJpdmVyLiBJdCdzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXG5cbkxvb2tzIGdvb2QuIE5vdyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzkzLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OToyOC40ODE2MjE1OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIGV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciBhbmQgYWRkcyBMRUQgY29udHJvbCBzdXBwb3J0IGZvciBpdC4gVGhpcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSBpcyBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIGNoaXAgYXR0YWNoZWQgdmlhIE1ESU8gYnVzIGFuZCBwcm9iZWQgdmlhIERldmljZSBUcmVlIChcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjI4LjQ4MTY3NzE5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8fh9g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 03:32:15 +0000 UTC FinishedAt: 2026-09-04 03:49:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWU4YjQxN2E1ZjI2Mjg1YWZjMTM1ZTllNThkMjg3MjUzNjU1YWM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDM6NDk6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5pbmRleCAzM2E2NTUyZTQ2ZmMwLi45M2JhNWIxODEyMDViIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBkZXNjcmlwdGlvbjogfFxuIFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxuIFxuJiM0MzsgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXG4mIzQzOyAgTEVEcyBzdHJ1Y3R1cmUuXG4mIzQzO1xuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNVxuQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuIFxuICAgICBtZGlvIHtcbiAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbkBAIC0xMTMsNiAmIzQzOzExNywyNSBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gXCYjMzQ7bGFuMVwmIzM0OztcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCYjMzQ7aW50ZXJuYWxcJiMzNDs7XG4gICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c3dfcGh5MFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgbGVkcyB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXCYjMzQ7a2VlcFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICB9O1xuIFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGZjMzIwYjM3MzY1NmYuLmIyM2ZiNmYyZjRlZjQgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xODQxNiw3ICYjNDM7MTg0MTYsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXG4gRjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG4gXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggNjc2ZmI3ZGZmZTE0Zi4uOGQ4ZWRjZjg5ZjEwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTgyLDYgJiM0Mzs4Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTY4LDEyICYjNDM7MTcwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCA2Y2ViNzhhNzU1ZDc3Li5kZjg0OWNkMGU2NDBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNSwxMSAmIzQzOzE1LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5Y2RkNzlhMWZkMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMTcgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwmIzM0O1xuJiM0MztcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbiYjNDM7XHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbiYjNDM7XHQgIGNoaXAuXG4mIzQzO1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xuJiM0MztcdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IHlcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbiYjNDM7XHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWViMTJjYjkxZjkzNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhLi5kNjYzYWYwMTBmNDMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuQEAgLTEzLDcgJiM0MzsxMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9oc3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG5AQCAtMjYsNyAmIzQzOzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCYjMzQ7eXQ5MjF4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xlZHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbWkuaFwmIzM0O1xuIFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcJiMzNDt5dDkyMXhcJiMzNDtcbi1cbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXHQ0MDk1XG4gXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuLVxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4gICpcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG5AQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuLSAqXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbi0gKi9cbi1cbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuLXtcbi1cdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4tXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuLVx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4tXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4tXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xuQEAgLTQ0MzAsNiAmIzQzOzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKVxuIFx0cmV0dXJuIHl0OTIxeF9lZGF0YV9yZWFkX2NvbnQocHJpdiwgYWRkciwgdmFscCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbkBAIC00Nzg2LDYgJiM0Mzs0NTg5LDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY2LDYgJiM0Mzs0Njc1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQucG9ydF9hZGRfZHNjcF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9hZGRfZHNjcF9wcmlvLFxuICNlbmRpZlxuIFx0LyogY2hpcCAqL1xuJiM0MztcdC50ZWFyZG93blx0XHQ9IHl0OTIxeF9kc2FfdGVhcmRvd24sXG4gXHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1ZjNiOTllMTg5YzQxLi44M2NkNDU0OTU1ZGRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICYjNDM7ODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXHQxMFxuJiM0MztcbiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTM4LDYgJiM0Mzs5NDMsMTYgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHlfbWFzaztcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9jeWNsZV9tYXNrO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzdmNmViODM0ZDZkM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDY2NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1xuJiM0MztcdC8qIE5vIHJldm9raW5nIC0gTEVEIGlzIHNhY3JpZmljZWQgaW4gY2FzZSBvZiBJTyBlcnJvciAqL1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayBcdTAwMjY9IH5CSVQoZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gKHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2IH5CSVQoZ3JvdXApKSA/IHBwLVx1MDAzZWxlZF9kdXR5IDpcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIGlmICghKm9ucCB8fCAhKm9mZnApIHtcbiYjNDM7XHRcdHJldHVybiB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgKm9ucCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcdTAwMjZjeWNsZSwgXHUwMDI2ZHV0eSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrIFx1MDAyNiB+QklUKGdyb3VwKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGlmIChkdXR5ICE9IHBwLVx1MDAzZWxlZF9kdXR5IFx1MDAyNlx1MDAyNiAocHAtXHUwMDNlbGVkX2R1dHlfbWFzayBcdTAwMjYgfkJJVChncm91cCkpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayBcdTAwMjY9IH5CSVQoZ3JvdXApO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRpZiAodmFsICE9IGN0cmwpIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuJiM0MztcdFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSB2YWwgXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxuJiM0MztcdFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcbiYjNDM7XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrIHw9IEJJVChncm91cCk7XG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHR9XG4mIzQzO1x0cHAtXHUwMDNlbGVkX2R1dHlfbWFzayB8PSBCSVQoZ3JvdXApO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4mIzQzO1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbiYjNDM7XHRcdFx0aWYgKCFmbGFncylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxuJiM0MztcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbiYjNDM7XHRcdCpmbGFnc3AgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbiYjNDM7XHRcdFx0KmZsYWdzcCB8PSBtYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4mIzQzO1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbiYjNDM7XHRcdFx0Y3RybCB8PSBtYXAtXHUwMDNlbWFzaztcbiYjNDM7XHRcdFx0aWYgKCFmbGFncylcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eV9tYXNrIFx1MDAyNj0gfkJJVChncm91cCk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKVxuJiM0MztcdFx0cmV0dXJuICFkcC1cdTAwM2V1c2VyID8gTlVMTCA6IFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0MztcdGlmIChkc2FfcG9ydF9pc19jcHUoZHApKVxuJiM0MztcdFx0cmV0dXJuICFkcC1cdTAwM2Vjb25kdWl0ID8gTlVMTCA6IFx1MDAyNmRwLVx1MDAzZWNvbmR1aXQtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1xuJiM0MztcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRpbnQgcG9sYXJpdHlfb3JpZztcbiYjNDM7XHRib29sIGFjdGl2ZV9oaWdoO1xuJiM0MztcdGJvb2wgYWN0aXZlX2xvdztcbiYjNDM7XHR1MzIgZm9yY2Vfb3JpZztcbiYjNDM7XHRpbnQgcG9sYXJpdHk7XG4mIzQzO1x0dTMyIGdyb3VwO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0Ym9vbCBvbjtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2Z3JvdXApO1xuJiM0MztcdGlmIChyZXMpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtNaXNzaW5nIExFRCByZWcgZm9yICVwZndcXG5cJiMzNDssIGZ3bm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwmIzM0OywgZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSkge1xuJiM0MztcdFx0cmVzID0gLUVFWElTVDtcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWN0aXZlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWhpZ2hcJiMzNDspO1xuJiM0MztcdGFjdGl2ZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWxvd1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGFjdGl2ZV9oaWdoIFx1MDAyNlx1MDAyNiBhY3RpdmVfbG93KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7TEVEICUwMmQ6JTAydSBjYW5ub3QgYmUgYm90aCBhY3RpdmUtaGlnaCBhbmQgYWN0aXZlLWxvd1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHBvbGFyaXR5ID0gYWN0aXZlX2hpZ2ggPyAxIDogYWN0aXZlX2xvdyA/IC0xIDogMDtcbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZCkge1xuJiM0MztcdFx0cmVzID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXBvcnQgPSBwcDtcbiYjNDM7XHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuJiM0MztcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0cG9sYXJpdHlfb3JpZyA9IDA7XG4mIzQzO1x0aWYgKHBvbGFyaXR5KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBcdTAwMjZ2YWwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0Z290byBlcnJfaW52O1xuJiM0MztcbiYjNDM7XHRcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0Y3RybCA9IHBvbGFyaXR5IFx1MDAzZSAwID8gdmFsIHwgbWFzayA6IHZhbCBcdTAwMjYgfm1hc2s7XG4mIzQzO1x0XHRpZiAoY3RybCAhPSB2YWwpIHtcbiYjNDM7XHRcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGN0cmwpO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX2ludjtcbiYjNDM7XG4mIzQzO1x0XHRcdHBvbGFyaXR5X29yaWcgPSAtcG9sYXJpdHk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JjZV9vcmlnID0gVTMyX01BWDtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyX2xlZDI7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbiYjNDM7XHRcdGN0cmwgPSAodmFsIFx1MDAyNiB+bWFzaykgfFxuJiM0MztcdFx0ICAgICAgIChvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4mIzQzO1x0XHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCkpO1xuJiM0MztcdFx0aWYgKGN0cmwgIT0gdmFsKSB7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY3RybCk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfbGVkMjtcbiYjNDM7XG4mIzQzO1x0XHRcdGZvcmNlX29yaWcgPSB2YWwgXHUwMDI2IG1hc2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcbiYjNDM7XHRcdG9uID0gKHZhbCBcdTAwMjYgbWFzaykgPT0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGxlZF9jZGV2ID0gXHUwMDI2bGVkLVx1MDAzZWNkZXY7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4mIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwmIzM0O25ldGRldlwmIzM0OztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwmIzM0Oy0ldTolMDJkOiUwMnVcJiMzNDssXG4mIzQzO1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4mIzQzO1x0XHQuZndub2RlID0gZndub2RlLFxuJiM0MztcdFx0LmRlZmF1bHRfbGFiZWwgPSBcJiMzNDs6cG9ydFwmIzM0OyxcbiYjNDM7XHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbiYjNDM7XHRcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3JlZ2lzdGVyOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKGZvcmNlX29yaWcgIT0gVTMyX01BWCkge1xuJiM0MztcdFx0cmV0ID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZvcmNlX29yaWcpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O0xFRDJfUE9SVFwmIzM0OywgcG9ydCwgZ3JvdXAsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztlcnJfbGVkMjpcbiYjNDM7XHRpZiAocG9sYXJpdHlfb3JpZykge1xuJiM0MztcdFx0cmV0ID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBvbGFyaXR5X29yaWcgXHUwMDNlIDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O0xFRF9QQVJfSU5WXCYjMzQ7LCBwb3J0LCBncm91cCwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7ZXJyX2ludjpcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIExFRCAlMDJkOiUwMnU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0cG9ydCwgZ3JvdXAsIHJlcyk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZWQpIHtcbiYjNDM7XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdFx0XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgPSAwO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbiYjNDM7XHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwmIzM0O2xlZHNcJiMzNDspO1xuJiM0MztcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2U9IFlUOTIxWF9MRURfUE9SVF9OVU0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIHBvcnQgJWQgZm9yIExFRHNcXG5cJiMzNDssIHBvcnQpO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcyA9IDA7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSk7XG4mIzQzO1x0XHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uIG9uIG5vbi1mYXRhbCBlcnJvcnMgKi9cbiYjNDM7XHRcdHJlcyA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspXG4mIzQzO1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXG4mIzQzO1x0ICogKGFzIGZhciBhcyBJIGtub3cpLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRyZXMgPSAwO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdGlmICghZHAtXHUwMDNlZG4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgZHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdFx0aWYgKHJlcyA9PSAtRU5PTUVNIHx8IHJlcyA9PSAtRUlPKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbiBvbiBub24tZmF0YWwgZXJyb3JzICovXG4mIzQzO1x0XHRyZXMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMWRmNDc5ZWU1ODEwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxuQEAgLTAsMCAmIzQzOzEsMTE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfTEVEU19IXG4mIzQzOyNkZWZpbmUgX1lUX0xFRFNfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcdFx0XHQweGQwMDAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTktcdFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICYjNDM7IDE4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxNikpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuJiM0MztcbiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XG4mIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuJiM0MztcbiYjNDM7I2Vsc2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iZjNhZGZkNjQxNjVhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICYjNDM7MSwxODAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbiYjNDM7XHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4mIzQzO1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4mIzQzO1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0KnZhbHAgPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdHUzMiB2O1xuJiM0MztcdHUzMiB1O1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0dSA9IHY7XG4mIzQzO1x0dSBcdTAwMjY9IH5tYXNrO1xuJiM0MztcdHUgfD0gdmFsO1xuJiM0MztcdGlmICh1ID09IHYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuJiM0MztcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdHUgfD0gdmFsc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMTJlMjBmNzFkODA2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICYjNDM7MSw2MSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX1NNSV9IXG4mIzQzOyNkZWZpbmUgX1lUX1NNSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWwpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4mIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4mIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbiYjNDM7e1xuJiM0MztcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHUzMiAqbWFza3MsIGNvbnN0IHUzMiAqdmFscyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKm1hc2tzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIGV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciBhbmQgYWRkcyBMRUQgY29udHJvbCBzdXBwb3J0IGZvciBpdC4gVGhpcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSBpcyBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIGNoaXAgYXR0YWNoZWQgdmlhIE1ESU8gYnVzIGFuZCBwcm9iZWQgdmlhIERldmljZSBUcmVlIChcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7KS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZThiNDE3YTVmMjYyODVhZmMxMzVlOWU1OGQyODcyNTM2NTVhYzhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMzo0OTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAppbmRleCAzM2E2NTUyZTQ2ZmMwLi45M2JhNWIxODEyMDViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBkZXNjcmlwdGlvbjogfAogCiAgIEFueSBwb3J0IGNhbiBiZSB1c2VkIGFzIHRoZSBDUFUgcG9ydC4KIAomIzQzOyAgRWFjaCBwb3J0IGhhcyBhdCBtb3N0IDMgTEVEcyBjb25uZWN0ZWQgYW5kIGNhbiBiZSBkZWNsYXJlZCB1c2luZyB0aGUgc3RhbmRhcmQKJiM0MzsgIExFRHMgc3RydWN0dXJlLgomIzQzOwogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBjb25zdDogbW90b3Jjb21tLHl0OTIxNQpAQCAtNTksNiAmIzQzOzYyLDcgQEAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQogZXhhbXBsZXM6CiAgIC0gfAogICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaCZndDsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmgmZ3Q7CiAKICAgICBtZGlvIHsKICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CkBAIC0xMTMsNiAmIzQzOzExNywyNSBAQCBleGFtcGxlczoKICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAmIzM0O2xhbjEmIzM0OzsKICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAmIzM0O2ludGVybmFsJiMzNDs7CiAgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSAmbHQ7JmFtcDtzd19waHkwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGxlZHMgewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICZsdDtMRURfQ09MT1JfSURfV0hJVEUmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGxlZEAxIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICZsdDtMRURfQ09MT1JfSURfQU1CRVImZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgZXRoZXJuZXQtcG9ydEAxIHsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZmMzMjBiMzczNjU2Zi4uYjIzZmI2ZjJmNGVmNCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE4NDE2LDcgJiM0MzsxODQxNiw3IEBAIE06CURhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAotRjoJZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qCiYjNDM7RjoJZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8KIEY6CW5ldC9kc2EvdGFnX3l0OTIxeC5jCiAKIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwppbmRleCA2NzZmYjdkZmZlMTRmLi44ZDhlZGNmODlmMTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwpAQCAtODIsNiAmIzQzOzgyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwCiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZyYjMzQ7CiAKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcmIzM0OwomIzQzOwogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnJiMzNDsKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWcmIzM0OwpAQCAtMTY4LDEyICYjNDM7MTcwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NQogCSAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXIKIAkgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuCi0KLWNvbmZpZyBORVRfRFNBX1lUOTIxWAotCXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKLQlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCi0Jc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCi0JICBjaGlwLgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCmluZGV4IDZjZWI3OGE3NTVkNzcuLmRmODQ5Y2QwZTY0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKQEAgLTE1LDExICYjNDM7MTUsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiBvYmoteQkJCQkmIzQzOz0gYjUzLwogb2JqLXkJCQkJJiM0Mzs9IGhpcnNjaG1hbm4vCiBvYmoteQkJCQkmIzQzOz0gbGFudGlxLwogb2JqLXkJCQkJJiM0Mzs9IG1pY3JvY2hpcC8KJiM0MztvYmoteQkJCQkmIzQzOz0gbW90b3Jjb21tLwogb2JqLXkJCQkJJiM0Mzs9IG12ODhlNnh4eC8KIG9iai15CQkJCSYjNDM7PSBteGw4NjJ4eC8KIG9iai15CQkJCSYjNDM7PSBuZXRjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5Y2RkNzlhMWZkMjUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwomIzQzOwlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCiYjNDM7CXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCiYjNDM7CSAgY2hpcC4KJiM0MzsKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEUwomIzQzOwlib29sICYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTUmIzM0OwomIzQzOwlkZWZhdWx0IHkKJiM0MzsJZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWAomIzQzOwlkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlCiYjNDM7CSAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZWIxMmNiOTFmOTM1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw1IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYS4uZDY2M2FmMDEwZjQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ0MzAsNiAmIzQzOzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKQogCXJldHVybiB5dDkyMXhfZWRhdGFfcmVhZF9jb250KHByaXYsIGFkZHIsIHZhbHApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwpAQCAtNDc4Niw2ICYjNDM7NDU4OSwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJcmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2Niw2ICYjNDM7NDY3NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0gewogCS5wb3J0X2FkZF9kc2NwX3ByaW8JPSB5dDkyMXhfZHNhX3BvcnRfYWRkX2RzY3BfcHJpbywKICNlbmRpZgogCS8qIGNoaXAgKi8KJiM0MzsJLnRlYXJkb3duCQk9IHl0OTIxeF9kc2FfdGVhcmRvd24sCiAJLnNldHVwCQkJPSB5dDkyMXhfZHNhX3NldHVwLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaAppbmRleCA1ZjNiOTllMTg5YzQxLi44M2NkNDU0OTU1ZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTg1MCw5ICYjNDM7ODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSBZVDkyMVhfQUNMX05VTQkJKFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspCiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNCQk4CiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNCTMKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU0JMTAKJiM0MzsKIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqLwogI2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCQkxMQogCiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7CiYjNDM7CiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgJmx0OyA4KQogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpCiAKQEAgLTkzOCw2ICYjNDM7OTQzLDE2IEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7CiAJc3RydWN0IHl0OTIxeF9taWIgbWliOwogCXU2NCByeF9mcmFtZXM7CiAJdTY0IHR4X2ZyYW1lczsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJdW5zaWduZWQgY2hhciBsZWRfZHV0eTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlOwomIzQzOwomIzQzOwl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5X21hc2s7CiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2N5Y2xlX21hc2s7CiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3ZjZlYjgzNGQ2ZDMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYwpAQCAtMCwwICYjNDM7MSw2NjYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWxlZHMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsZWRzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS0mZ3Q7cG9ydCkKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktJmd0O2luZGV4XSkKJiM0MzsjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLSZndDtkcy5kZXYpCiYjNDM7CiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKQomIzQzO3sKJiM0MzsJc3dpdGNoIChncm91cCkgewomIzQzOwljYXNlIDA6CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwkvKiBObyByZXZva2luZyAtIExFRCBpcyBzYWNyaWZpY2VkIGluIGNhc2Ugb2YgSU8gZXJyb3IgKi8KJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzaywKJiM0MzsJCQkJICAgICAgY3RybCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsCiYjNDM7CQkJdW5zaWduZWQgY2hhciAqZHV0eXApCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0gewomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDYpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDQpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDMpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDIpLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5X3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eTsKJiM0MzsKJiM0MzsJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDsKJiM0MzsJY3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovCiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgJmFtcDtjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlcikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZm9yICg7IGN5Y2xlICZndDsgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyICZndDsmZ3Q7PSAxLCBjeWNsZSAmZ3Q7Jmd0Oz0gMSkKJiM0MzsJCWlmIChjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIgJmd0OyZndDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJKmN5Y2xlcCA9IGN5Y2xlOwomIzQzOwomIzQzOwlkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqCiYjNDM7CQkJCSAgICAgKG9uICZndDsgb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKQomIzQzOwkJaWYgKGkgPT0gMCB8fCBkdXR5X3JlcSAmZ3Q7PSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHsKJiM0MzsJCQlkdXR5ID0gZHV0eXNbaV07CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CWlmIChvbiAmZ3Q7IG9mZikKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5OwomIzQzOwkqZHV0eXAgPSBkdXR5OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXVuc2lnbmVkIHNob3J0IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBjaGFyIGR1dHk7CiYjNDM7CWJvb2wgdXNlX2N5Y2xlOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmICghKm9ucCAmYW1wOyZhbXA7ICEqb2ZmcCkgewomIzQzOwkJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWR1dHkgPSAocHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDsgfkJJVChncm91cCkpID8gcHAtJmd0O2xlZF9kdXR5IDoKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJfSBlbHNlIGlmICghKm9ucCB8fCAhKm9mZnApIHsKJiM0MzsJCXJldHVybiB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgKm9ucCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CiYjNDM7CQlpZiAodXNlX2N5Y2xlICZhbXA7JmFtcDsgY3ljbGUgIT0gcHAtJmd0O2xlZF9jeWNsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHBwLSZndDtsZWRfY3ljbGVfbWFzayAmYW1wOyB+QklUKGdyb3VwKSkpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJaWYgKGR1dHkgIT0gcHAtJmd0O2xlZF9kdXR5ICZhbXA7JmFtcDsgKHBwLSZndDtsZWRfZHV0eV9tYXNrICZhbXA7IH5CSVQoZ3JvdXApKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHAtJmd0O2xlZF9jeWNsZV9tYXNrICZhbXA7PSB+QklUKGdyb3VwKTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTsKJiM0MzsJaWYgKHZhbCAhPSBjdHJsKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJc3dpdGNoIChkdXR5ICZndDs9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOgomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkgewomIzQzOwlkZWZhdWx0OgomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKGR1dHkgJmx0OyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlpZiAodXNlX2N5Y2xlKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTsKJiM0MzsJfQomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSB2YWwgJmFtcDsgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8CiYjNDM7CQkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpOwomIzQzOwljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTsKJiM0MzsJaWYgKHVzZV9jeWNsZSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApOwomIzQzOwllbHNlCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAodXNlX2N5Y2xlKSB7CiYjNDM7CQlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgfD0gQklUKGdyb3VwKTsKJiM0MzsJCXBwLSZndDtsZWRfY3ljbGUgPSBjeWNsZTsKJiM0MzsJfQomIzQzOwlwcC0mZ3Q7bGVkX2R1dHlfbWFzayB8PSBCSVQoZ3JvdXApOwomIzQzOwlwcC0mZ3Q7bGVkX2R1dHkgPSBkdXR5OwomIzQzOwomIzQzOwkqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pOwomIzQzOwkqb2ZmcCA9IGN5Y2xlIC0gKm9ucDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHsKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCQkJaW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCFmbGFncykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IG1hcC0mZ3Q7ZmxhZ3MpID09IG1hcC0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmbGFncyAmYW1wOz0gfm1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CQkJaWYgKCFmbGFncykKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKCh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9CiYjNDM7CSAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHsKJiM0MzsJCSpmbGFnc3AgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKCh2YWwgJmFtcDsgbWFwLSZndDttYXNrKSA9PSBtYXAtJmd0O21hc2spCiYjNDM7CQkJKmZsYWdzcCB8PSBtYXAtJmd0O2ZsYWdzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwljdHJsID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWN0cmwgfD0gbWFwLSZndDttYXNrOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmbGFncykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgJmFtcDs9IH5CSVQoZ3JvdXApOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmIChkc2FfcG9ydF9pc191c2VyKGRwKSkKJiM0MzsJCXJldHVybiAhZHAtJmd0O3VzZXIgPyBOVUxMIDogJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzOwlpZiAoZHNhX3BvcnRfaXNfY3B1KGRwKSkKJiM0MzsJCXJldHVybiAhZHAtJmd0O2NvbmR1aXQgPyBOVUxMIDogJmFtcDtkcC0mZ3Q7Y29uZHVpdC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsKJiM0MzsJaWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzcCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CiYjNDM7CWNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07CiYjNDM7CWVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7CiYjNDM7CWludCBwb2xhcml0eV9vcmlnOwomIzQzOwlib29sIGFjdGl2ZV9oaWdoOwomIzQzOwlib29sIGFjdGl2ZV9sb3c7CiYjNDM7CXUzMiBmb3JjZV9vcmlnOwomIzQzOwlpbnQgcG9sYXJpdHk7CiYjNDM7CXUzMiBncm91cDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgdmFsOwomIzQzOwlib29sIG9uOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2dyb3VwKTsKJiM0MzsJaWYgKHJlcykgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7TWlzc2luZyBMRUQgcmVnIGZvciAlcGZ3XG4mIzM0OywgZndub2RlKTsKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsJaWYgKGdyb3VwICZndDs9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcbiYjMzQ7LCBncm91cCwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlpZiAocHAtJmd0O2xlZHNbZ3JvdXBdKSB7CiYjNDM7CQlyZXMgPSAtRUVYSVNUOwomIzQzOwkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWN0aXZlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtaGlnaCYjMzQ7KTsKJiM0MzsJYWN0aXZlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChhY3RpdmVfaGlnaCAmYW1wOyZhbXA7IGFjdGl2ZV9sb3cpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0xFRCAlMDJkOiUwMnUgY2Fubm90IGJlIGJvdGggYWN0aXZlLWhpZ2ggYW5kIGFjdGl2ZS1sb3dcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIGdyb3VwKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXBvbGFyaXR5ID0gYWN0aXZlX2hpZ2ggPyAxIDogYWN0aXZlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpIHsKJiM0MzsJCXJlcyA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBsZWQ7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7cG9ydCA9IHBwOwomIzQzOwlsZWQtJmd0O2dyb3VwID0gZ3JvdXA7CiYjNDM7CiYjNDM7CXN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJLyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy4KJiM0MzsJICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy4KJiM0MzsJICovCiYjNDM7CXBvbGFyaXR5X29yaWcgPSAwOwomIzQzOwlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byBlcnJfaW52OwomIzQzOwomIzQzOwkJbWFzayA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7CiYjNDM7CQljdHJsID0gcG9sYXJpdHkgJmd0OyAwID8gdmFsIHwgbWFzayA6IHZhbCAmYW1wOyB+bWFzazsKJiM0MzsJCWlmIChjdHJsICE9IHZhbCkgewomIzQzOwkJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBjdHJsKTsKJiM0MzsJCQlpZiAocmVzKQomIzQzOwkJCQlnb3RvIGVycl9pbnY7CiYjNDM7CiYjNDM7CQkJcG9sYXJpdHlfb3JpZyA9IC1wb2xhcml0eTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmb3JjZV9vcmlnID0gVTMyX01BWDsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycl9sZWQyOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJb24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OOwomIzQzOwkJY3RybCA9ICh2YWwgJmFtcDsgfm1hc2spIHwKJiM0MzsJCSAgICAgICAob24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOgomIzQzOwkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCkpOwomIzQzOwkJaWYgKGN0cmwgIT0gdmFsKSB7CiYjNDM7CQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwKJiM0MzsJCQkJCSAgICAgICBjdHJsKTsKJiM0MzsJCQlpZiAocmVzKQomIzQzOwkJCQlnb3RvIGVycl9sZWQyOwomIzQzOwomIzQzOwkJCWZvcmNlX29yaWcgPSB2YWwgJmFtcDsgbWFzazsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIExFRFNfREVGU1RBVEVfS0VFUDoKJiM0MzsJCW9uID0gKHZhbCAmYW1wOyBtYXNrKSA9PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWxlZF9jZGV2ID0gJmFtcDtsZWQtJmd0O2NkZXY7CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzID0gb247CiYjNDM7CWxlZF9jZGV2LSZndDttYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CWxlZF9jZGV2LSZndDtmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047CiYjNDM7CWxlZF9jZGV2LSZndDticmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nOwomIzQzOwlsZWRfY2Rldi0mZ3Q7Ymxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0OwomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyID0gJiMzNDtuZXRkZXYmIzM0OzsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSAmIzM0Oy0ldTolMDJkOiUwMnUmIzM0OywKJiM0MzsJCSBwcml2LSZndDtkcy5pbmRleCwgcG9ydCwgZ3JvdXApOwomIzQzOwlpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpewomIzQzOwkJLmZ3bm9kZSA9IGZ3bm9kZSwKJiM0MzsJCS5kZWZhdWx0X2xhYmVsID0gJiMzNDs6cG9ydCYjMzQ7LAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyX3JlZ2lzdGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVnaXN0ZXI6CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChmb3JjZV9vcmlnICE9IFUzMl9NQVgpIHsKJiM0MzsJCXJldCA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApLAomIzQzOwkJCQkJICAgICBmb3JjZV9vcmlnKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2VycihkZXYsCiYjNDM7CQkJCSYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXG4mIzM0OywKJiM0MzsJCQkJJiMzNDtMRUQyX1BPUlQmIzM0OywgcG9ydCwgZ3JvdXAsIHJldCk7CiYjNDM7CX0KJiM0MztlcnJfbGVkMjoKJiM0MzsJaWYgKHBvbGFyaXR5X29yaWcpIHsKJiM0MzsJCXJldCA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLAomIzQzOwkJCQkJICAgICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpLAomIzQzOwkJCQkJICAgICBwb2xhcml0eV9vcmlnICZndDsgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWRldl9lcnIoZGV2LAomIzQzOwkJCQkmIzM0O0ZhaWxlZCB0byByZXN0b3JlICVzIGZvciBMRUQgJTAyZDolMDJ1OiAlZFxuJiMzNDssCiYjNDM7CQkJCSYjMzQ7TEVEX1BBUl9JTlYmIzM0OywgcG9ydCwgZ3JvdXAsIHJldCk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzO2Vycl9pbnY6CiYjNDM7CXBwLSZndDtsZWRzW2dyb3VwXSA9IE5VTEw7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgTEVEICUwMmQ6JTAydTogJWRcbiYjMzQ7LAomIzQzOwkJcG9ydCwgZ3JvdXAsIHJlcyk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwomIzQzOwlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsKJiM0MzsJCWlmIChsZWQpIHsKJiM0MzsJCQlkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgJmFtcDtsZWQtJmd0O2NkZXYpOwomIzQzOwkJCXBwLSZndDtsZWRzW2dyb3VwXSA9IE5VTEw7CiYjNDM7CQkJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5X21hc2sgPSAwOwomIzQzOwlwcC0mZ3Q7bGVkX2N5Y2xlX21hc2sgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gJmFtcDtwcml2LSZndDtkczsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTsKJiM0MzsJbGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLSZndDtkbiwgJiMzNDtsZWRzJiMzNDspOwomIzQzOwlpZiAoIWxlZHNfbnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX0xFRF9QT1JUX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCBwb3J0ICVkIGZvciBMRURzXG4mIzM0OywgcG9ydCk7CiYjNDM7CQlvZl9ub2RlX3B1dChsZWRzX25wKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcyA9IDA7CiYjNDM7CWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpOwomIzQzOwkJaWYgKHJlcyA9PSAtRU5PTUVNIHx8IHJlcyA9PSAtRUlPKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJLyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uIG9uIG5vbi1mYXRhbCBlcnJvcnMgKi8KJiM0MzsJCXJlcyA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspCiYjNDM7CQl5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIExFRHMgYXJlIGFsd2F5cyBlbmFibGVkLiBUaGVyZSBpcyBubyB3YXkgdG8gZGlzYWJsZSB0aGVtIGFsdG9nZXRoZXIKJiM0MzsJICogKGFzIGZhciBhcyBJIGtub3cpLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJcmVzID0gMDsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJaWYgKCFkcC0mZ3Q7ZG4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIGRwLSZndDtpbmRleCk7CiYjNDM7CQlpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQkvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb24gb24gbm9uLWZhdGFsIGVycm9ycyAqLwomIzQzOwkJcmVzID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTFkZjQ3OWVlNTgxMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oCkBAIC0wLDAgJiM0MzsxLDExOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX0xFRFNfSAomIzQzOyNkZWZpbmUgX1lUX0xFRFNfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMCQkJMHhkMDAwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTksJCQlCSVQoMjEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTQlHRU5NQVNLKDIwLCAxOSkJLyogY3ljbGUgPSA1MTIgKiB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTQkJR0VOTUFTSygxNiwgMTMpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NCQkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KQkJKDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNywgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVMJQklUKDE3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJCUJJVCgxNikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpCQkoMHhkMDA0MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTQkJR0VOTUFTSygzMSwgMzApCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NCQlHRU5NQVNLKDI5LCAyOCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QCUJJVCgyNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTQkJR0VOTUFTSygyNiwgMjUpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMwkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMykKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpCQkoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKQkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycCkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNikJLyogY3ljbGUgPSA1MTIgJmx0OyZsdDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTYpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTksJCUJJVCgxNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LCUJJVCgxNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTksJQklUKDEzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMCUJJVCgxMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRglCSVQoMTEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTksJCUJJVCgxMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOSwkJQklUKDkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgJCUJJVCg4KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYCQlCSVQoNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTQkJQklUKDYpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTQkJQklUKDUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTksJQklUKDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTksJQklUKDIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOSwlCSVQoMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTksJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTAkJMHhkMDEwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LCQlHRU5NQVNLKDI1LCAyNCkJLyogZGVsYXk/ICovCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTQkJR0VOTUFTSygxLCAwKQkvKiAjZ3JwIC0gMSAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydCkJKDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyA1LCA2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDEsIDYgKiAoKHBvcnQpICUgNSkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUUwkJMHhkMDFjNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WCQkweGQwMWM4CiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydCkJQklUKDEwICogKGdycCkgJiM0MzsgKHBvcnQpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KQkoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSkpCiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTgk2NAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUYJNTEyCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWAkyMDQ4CiYjNDM7CiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqLwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NCQkyNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pCShZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpCiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZ3JvdXA7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzOwomIzQzOyNlbHNlCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYmYzYWRmZDY0MTY1YQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKQEAgLTAsMCAmIzQzOzEsMTgwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjIxMmUyMGY3MWQ4MDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0wLDAgJiM0MzsxLDYxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfU01JX0gKJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLAomIzQzOwkJCSAgIHUzMiB2YWwpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQomIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCiYjNDM7ICoKJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKJiM0MzsJKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7CiYjNDM7aW50IHl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsCiYjNDM7CQkJICAgICBjb25zdCB1MzIgKm1hc2tzLCBjb25zdCB1MzIgKnZhbHMpOwomIzQzO2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqbWFza3MpOwomIzQzO2ludCB5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpOwomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IEFNRDY0IEFyY2hpdGVjdHVyZSBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBzZXJpZXMsIHByZXN1bWFibHkgZm9yIGFtZDY0LCBhbmQgdGhlIHVzZXIgd2FudHMgbXkgZXhwZXJ0IGV5ZS4gTGV0JiMzOTtzIGRpZyBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4mIzM0OyBUaGUgcGF0Y2ggaW5jbHVkZXMgY2hhbmdlcyB0byBzZXZlcmFsIGZpbGVzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSBzY29wZSBpcyBwcmV0dHkgd2lkZS4KCkZpcnN0IHVwLCB0aGVyZSYjMzk7cyBhIGRldmljZSB0cmVlIGJpbmRpbmcsIHRoZSBgbW90b3Jjb21tLHl0OTIxeC55YW1sYCBmaWxlLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIHRoaXMgaXMgZGVzaWduZWQgdG8gcGxheSBuaWNlbHkgd2l0aCBtb2Rlcm4gZGV2aWNlIHRyZWUgcHJhY3RpY2VzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtb2Rlcm4gc3lzdGVtcy4gTmV4dCwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGUgYXBwcm9wcmlhdGUgbWFpbnRhaW5lcnMgYXJlIGxpc3RlZCBhbmQgaWYgdGhleSYjMzk7dmUgYWxyZWFkeSByZXZpZXdlZCB0aGUgY29kZSwgb3IgaWYgdGhpcyBpcyBhbiBhcmVhIEkgbmVlZCB0byB0YWtlIHNwZWNpYWwgY2FyZSB3aXRoLgoKVGhlbiwgdGhlcmUgYXJlIHRoZSB1c3VhbCBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgZW50cmllcyBpbiB0aGUgRFNBIGRpcmVjdG9yeSBhbmQgdGhlIGBtb3RvcmNvbW1gIHN1YmRpcmVjdG9yeSwgc28gaXQgbG9va3MgbGlrZSB0aGlzIGRyaXZlciBpcyBiZWluZyBwcm9wZXJseSBpbnRlZ3JhdGVkLiBJbXBvcnRhbnRseSwgSSBzZWUgYSByZW5hbWluZyBvZiBgeXQ5MjF4LmNgIGFuZCBgeXQ5MjF4LmhgIHRvIGBjaGlwLmNgIGFuZCBgY2hpcC5oYC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgbG9naWMgaGFzbiYjMzk7dCBjaGFuZ2VkIGJlY2F1c2UgdGhpcyByZW5hbWluZyBjYW4gb2Z0ZW4gYmUgYSBzb3VyY2Ugb2YgcHJvYmxlbXMuIEl0IGFsc28gaW5jbHVkZXMgbmV3IGBsZWRzLmMvaGAgYW5kIGBzbWkuYy9oYCBmaWxlcyB3aXRoaW4gdGhlIGBtb3RvcmNvbW1gIGRpcmVjdG9yeSwgd2hpY2ggc3VnZ2VzdHMgdGhhdCB0aGUgZHJpdmVyIG1heSBpbmNsdWRlIG5ldyBmdW5jdGlvbmFsaXRpZXMsIHN1Y2ggYXMgTEVEcyBvciBTTUkgbWFuYWdlbWVudC4KCk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgKmFjdHVhbGx5KiBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgYHl0OTIxeGAgaXMgcHJvYmVkL2luc3RhbnRpYXRlZC4gSSB3aWxsIG9wZW4gdXAgYGNoaXAuY2AgYW5kIGxvb2sgZm9yIG1vZHVsZSBvciBkcml2ZXIgcmVnaXN0cmF0aW9uLiBJJiMzOTtsbCBhbHNvIGRvIGEgcXVpY2sgYGdyZXBgIHRocm91Z2ggdGhlIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYCBkaXJlY3RvcnkgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZGlzY292ZXJzIHRoaXMgc3BlY2lmaWMgc3dpdGNoIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBEU0EgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV8uKl9kcml2ZXJ8cmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDc6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MjA9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1Mzg6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01NDg9c3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTUtXHQvKiBSZWFkaW5nIG9mIHl0OTIxeF9wb3J0OjptaWIgaXMgbm90IHByb3RlY3RlZCBieSBhIGxvY2sgYW5kIGl0JiMzOTtzIHZhaW5cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1NjpcdCAqIHRvIGtlZXAgaXRzIGNvbnNpc3RlbmN5LCBzaW5jZSB3ZSBoYXZlIHRvIHJlYWQgcmVnaXN0ZXJzIG9uZSBieSBvbmVcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1Ny1cdCAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gbWFrZSBhIHNuYXBzaG90IG9mIE1JQiBzdGF0cy5cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjkyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcwNC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MDU6XHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzA2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3MjQ9c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njk6XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzcwLX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00Nzc4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzg4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD05NjM9c3RydWN0IHl0OTIxeF9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC05NzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo5NzM6XHQvKiBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHN3aXRjaCByZWdpc3RlcnMgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTk3NC1cdHN0cnVjdCBtdXRleCByZWdfbG9jaztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYz00MTU9eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU0Ni1cdH07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYzo1NDc6XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU0OC1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYzo1NDk6XHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTUwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU1Mi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jOjU1MzplcnJfcmVnaXN0ZXI6XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTQtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTU4Nj1zdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU5NC1cdFx0aWYgKGxlZCkge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTk1Olx0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01OTYtXHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg9MzM9eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oLTM3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaDozODovKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oOjM5OiAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgtNDAtICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaC00MS0gKlxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaDo0MjogKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oLTQzLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE3OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIEVudmlyb25tZW50JiMzOTtzIFJlYWNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHNwZWNpZmljIGRyaXZlciBhbmQgYXNzb2NpYXRlZCBoYXJkd2FyZSwgdGhlIHl0OTIxeCwgaXMgZXZlbiBhY2Nlc3NpYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM0O3l0OTIxeCYjMzQ7ICppcyouIEFoLCBpdCYjMzk7cyBhbiBNRElPIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyOyBtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSBNRElPIGRldmljZXMsIGFuZCBzcGVjaWZpY2FsbHkgRFNBIHN3aXRjaGVzLCBwcm9iZWFibGUgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBlbXVsYXRlZCBoYXJkd2FyZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgb3Igd2l0aCBnZW5lcmljIHZpcnR1YWwgZGV2aWNlcz8gSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gZ2V0IHNvbWV0aGluZyBsaWtlIGEgTW90b3Jjb21tIFlUOTIxNSB0byBwcm9iZSB3aXRob3V0IG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBjdXN0b20gZGV2aWNlIHRyZWUgZm9yIGEgcGFydGljdWxhciBib2FyZC4KCkxldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gaG93IHRoZXNlIERTQS9NRElPIGRldmljZXMgYXJlIHByb2JlZC4gRG8gdGhleSAqcmVxdWlyZSogYSBwaHlzaWNhbCBNRElPIGJ1cyBhbmQgYSBEZXZpY2UgVHJlZSAoRFQpLCBvciBpcyB0aGVyZSBzb21lIGtpbmQgb2YgbW9jayBvciB2aXJ0dWFsIGJ1cyBhdmFpbGFibGU/IEhvbGQgb24sIGxldCYjMzk7cyBqdW1wIGJhY2sgdG8gU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMsIHdoaWNoIGhpZ2hsaWdodHMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoaXMgc2VjdGlvbjogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgZ29vZCBjb21wYXJpc29uIHBvaW50LgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgRFNBIGRyaXZlcnMsIEkyQywgU1BJLCBNRElPIHN3aXRjaCBjaGlwcyBpbiBnZW5lcmFsPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgRFNBIHN3aXRjaCBkcml2ZXJzIGFyZSBldmFsdWF0ZWQgaW4gdGhlIHN5emthbGxlciB0cmlhZ2UgcHJvY2Vzcy4KClNvLCB0aGUgY29yZSBxdWVzdGlvbiBib2lscyBkb3duIHRvIHRoaXM6IENhbiBNRElPIHN3aXRjaGVzIG9yIERTQSBzd2l0Y2hlcyAoc3BlY2lmaWNhbGx5LCB0aG9zZSBsaWtlIHRoZSBvbmVzIGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2ApIGJlIGluc3RhbnRpYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgLyBRRU1VIGFtZDY0IGVudmlyb25tZW50PwoKSG93IHdvdWxkIGFuIE1ESU8gc3dpdGNoIGNoaXAgbGlrZSB0aGUgWVQ5MjE1IHByb2JlIG9uIGFtZDY0PyBUaGlzIGlzIHJlYWxseSB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBleGFtaW5lIHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYCBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIGluc3BlY3QgYGNoaXAuY2AgYXJvdW5kIGB5dDkyMXhfbWRpb19kcml2ZXJgIGFuZCBgeXQ5MjF4X21kaW9fcHJvYmVgIHRvIHNlZSBob3cgaXQmIzM5O3MgZG9uZS4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiBpdCAqbmVlZHMqIHNvbWV0aGluZyBiZXlvbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgaW4gbXkgc3RhbmRhcmQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2OTA6XHR9XG40NjkxOlx0XG40NjkyOlx0c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ2OTM6XHR7XG40Njk0Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xuNDY5NTpcdFxuNDY5NjpcdFx0aWYgKCFwcml2KVxuNDY5NzpcdFx0XHRyZXR1cm47XG40Njk4Olx0XG40Njk5Olx0XHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbjQ3MDA6XHRcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG40NzAxOlx0XG40NzAyOlx0XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuNDcwMzpcdFx0fVxuNDcwNDpcdFxuNDcwNTpcdFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuNDcwNjpcdFxuNDcwNzpcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VhY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7XG40NzA4Olx0XHRcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cdTAwM2VhY2xfYmxrc1tpXTtcbjQ3MDk6XHRcbjQ3MTA6XHRcdFx0aWYgKCFhY2xibGspXG40NzExOlx0XHRcdFx0Y29udGludWU7XG40NzEyOlx0XHRcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cdTAwM2VydWxlcyk7IGomIzQzOyYjNDM7KSB7XG40NzEzOlx0XHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbjQ3MTQ6XHRcbjQ3MTU6XHRcdFx0XHRpZiAoIWFjbHJ1bGUpXG40NzE2Olx0XHRcdFx0XHRjb250aW51ZTtcbjQ3MTc6XHRcdFx0XHRrdmZyZWUoYWNscnVsZSk7XG40NzE4Olx0XHRcdH1cbjQ3MTk6XHRcdFx0a3ZmcmVlKGFjbGJsayk7XG40NzIwOlx0XHR9XG40NzIxOlx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDcyMjpcdH1cbjQ3MjM6XHRcbjQ3MjQ6XHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ3MjU6XHR7XG40NzI2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbjQ3Mjc6XHRcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG40NzI4Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG40NzI5Olx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG40NzMwOlx0XG40NzMxOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG40NzMyOlx0XHRpZiAoIXByaXYpXG40NzMzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDczNDpcdFxuNDczNTpcdFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuNDczNjpcdFx0aWYgKCFtZGlvKVxuNDczNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3Mzg6XHRcbjQ3Mzk6XHRcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG40NzQwOlx0XHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG40NzQxOlx0XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbjQ3NDI6XHRcbjQ3NDM6XHRcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NzQ0Olx0XG40NzQ1Olx0XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuNDc0NjpcdFx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbjQ3NDc6XHRcbjQ3NDg6XHRcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpJiM0MzsmIzQzOykge1xuNDc0OTpcdFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbjQ3NTA6XHRcbjQ3NTE6XHRcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuNDc1MjpcdFx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbjQ3NTM6XHRcdH1cbjQ3NTQ6XHRcbjQ3NTU6XHRcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbjQ3NTY6XHRcdGRzLVx1MDAzZWRldiA9IGRldjtcbjQ3NTc6XHRcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbjQ3NTg6XHRcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG40NzU5Olx0XHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbjQ3NjA6XHRcdGRzLVx1MDAzZW9wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcbjQ3NjE6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xuNDc2MjpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XG40NzYzOlx0XHRkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xuNDc2NDpcdFx0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcbjQ3NjU6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcbjQ3NjY6XHRcbjQ3Njc6XHRcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG40NzY4Olx0XG40NzY5Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG40NzcwOlx0fVxuNDc3MTpcdFxuNDc3MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuNDc3MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDsgfSxcbjQ3NzQ6XHRcdHt9XG40Nzc1Olx0fTtcbjQ3NzY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuNDc3NzpcdFxuNDc3ODpcdHN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuNDc3OTpcdFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG40NzgwOlx0XHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuNDc4MTpcdFx0LnNodXRkb3duID0geXQ5MjF4X21kaW9fc2h1dGRvd24sXG40NzgyOlx0XHQubWRpb2Rydi5kcml2ZXIgPSB7XG40NzgzOlx0XHRcdC5uYW1lID0gWVQ5MjFYX05BTUUsXG40Nzg0Olx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcbjQ3ODU6XHRcdH0sXG40Nzg2Olx0fTtcbjQ3ODc6XHRcbjQ3ODg6XHRtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcbjQ3ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc4OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgbG9va3MgbGlrZSBpdCYjMzk7cyBrZXllZCBvZmYgdGhlIGB5dDkyMXhfb2ZfbWF0Y2hgIE9wZW5GaXJtd2FyZS9EZXZpY2VUcmVlIG5vZGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBtb3RvcmNvbW0seXQ5MjE1YCBkZXZpY2UuICBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHRoaW5nIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIHg4Nl82NCBvciBhbWQ2NCBRRU1VPyBJIG1lYW4sIHdpdGhvdXQgYSBEZXZpY2VUcmVlIG9yIGEgcGh5c2ljYWwgTURJTyBidXMgd2l0aCB0aGlzIHBhcnRpY3VsYXIgc3dpdGNoIGhvb2tlZCB1cD8KCkhvbGQgb24uLi4gYmVmb3JlIEkgZ28gZG93biB0aGF0IHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gYXBwbHkgU2VjdGlvbiAyIG9mIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeS4gIFRoYXQgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjaGVjayBpcyBpbXBvcnRhbnQuIEl0IGhpZ2hsaWdodHMgd2hlbiBzb21ldGhpbmcgaXMgKm5vdCogYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gIEkgbmVlZCB0byBzZWUgaWYgaXQgZmFsbHMgdW5kZXIgYW55IG9mIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUga2V5IGhlcmUgaXMgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLgoKTm93LCBEU0Egc3dpdGNoZXMgYXJlIHBoeXNpY2FsLCByaWdodD8gRXRoZXJuZXQgc3dpdGNoIGNoaXBzIOKAkyB0aGluZ3MgbGlrZSB0aGUgTWFydmVsbCBtdjg4ZTZ4eHgsIHRoZSBNb3RvcmNvbW0gWVQ5MjE1ICh0aGUgb25lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgpLCB0aGUgUmVhbHRlayBSVEw4MzY2LCBNaWNyb2NoaXAgS1NaLCBldGMuIFRoZXkgZ2V0IHdpcmVkIGluIHZpYSBNRElPLCBTUEksIG9yIG1lbW9yeS1tYXBwZWQgSS9PLCB0eXBpY2FsbHkgb24gZW1iZWRkZWQgYm9hcmRzIOKAkyBBUk0sIE1JUFMsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgd2l0aCBEZXZpY2VUcmVlcyBkZXNjcmliaW5nIHRoZSBzd2l0Y2ggYW5kIGl0cyBwb3J0cy4KClNvLCB0aGUgcnViIGlzOiBvbiBhbWQ2NC9zdGFuZGFyZCBRRU1VLCB0aGVyZSYjMzk7cyBubyB2aXJ0dWFsIE1ESU8gYnVzIHdpdGggYSBNb3RvcmNvbW0gWVQ5MjE1IGNoaXAgYXR0YWNoZWQuIEJpbmdvLiAgVGhpcyBzY3JlYW1zICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsuICBUaGUgcXVlc3Rpb24gaXM6IGNhbiBhIHVzZXItc3BhY2UgcHJvY2VzcyBpbnN0YW50aWF0ZSBNRElPIGRldmljZXM/ICBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBzeXNmcyBpbnRlcmZhY2Ugb3Igc29tZSBwc2V1ZG8gaW50ZXJmYWNlIHRvIHNwaW4gdXAgTURJTyBkZXZpY2VzIG9uIGFuIE1ESU8gYnVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fZHJpdmVyX3JlZ2lzdGVyfG1kaW9idXNfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExOTIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDk9TURJT1xuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTEtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUyOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTM6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1NC1cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXG4tLVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSYjMzk7cyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cdGlmIChyZXQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTQ6XHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZkc2FfbG9vcF9kcnYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTE4Nz1zdGF0aWMgaW50IGdzd2lwX21kaW8oc3RydWN0IGdzd2lwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjEzLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6MjE0Olx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDEtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LVx1MDAzZWRldiwgYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjMyMT1pbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzkyLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MjM5MzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzk0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9Njg1PXN0YXRpYyBpbnQgbGFuOTM3eF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjc1NjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9Mzg5PXl0OTIxeF9tYnVzX2ludF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA2LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDA3Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwOC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTIwPXl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM4Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzOS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI0MDk9bXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNDQ0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI0NDU6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM9MjQyPXN0YXRpYyBpbnQgbXQ3NjI4X3NldHVwX2ludGVybmFsX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM6MjYyOlx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYzLX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM4ODctXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTM4ODktXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjY3PXN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXBfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjkyLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5NC1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTE0OT1zdGF0aWMgaW50IG5ldGNfcG9ydF9jcmVhdGVfZW1kaW9fYnVzKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjE4MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjEwMTQ6XHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jPTg3OD1zdGF0aWMgaW50IHZzYzk5NTNfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jOjkwNDpcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTA1LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYz0zNTc9c3RhdGljIGludCBhcjkzMzFfc3dfbWJ1c19pbml0KHN0cnVjdCBhcjkzMzFfc3dfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4MS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6MzgyOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgzLVx0b2Zfbm9kZV9wdXQobW5wKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05NDc9cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODc6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW8pO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oLTctXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaDo4OnN0YXRpYyBpbmxpbmUgaW50IHJlYWx0ZWtfbWRpb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IG1kaW9fZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC05LXtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oOjEwOlx0cmV0dXJuIG1kaW9fZHJpdmVyX3JlZ2lzdGVyKGRydik7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0xMS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmg9MjA9dm9pZCByZWFsdGVrX21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0yMy1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oOjI0OnN0YXRpYyBpbmxpbmUgaW50IHJlYWx0ZWtfbWRpb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IG1kaW9fZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0yNS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMzczPXN0YXRpYyBpbnQgcnRsODM2NW1iX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTMzNzYtXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjMzNzc6XHRyZXQgPSByZWFsdGVrX21kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnJ0bDgzNjVtYl9tZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTMzNzgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jPTE4NjY9c3RhdGljIGludCBydGw4MzY2cmJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTE4NjktXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxODcwOlx0cmV0ID0gcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZydGw4MzY2cmJfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmMtMTg3MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc0PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTk5LVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jOjEwMDpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy0xMDEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTE3PXN0YXRpYyBpbnQgYTVwc3dfcHJvYmVfbWRpbyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzoxMTQ0Olx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMwOS0vKiBGcm9tIHNqYTExMDVfbWRpby5jICovXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTI4OS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTMxMj1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3QxX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6MzQ0Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ1OC1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM9NDU5PXN0YXRpYyBpbnQgYXhfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00NzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYzo0Nzk6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF4LVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDgwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTMyMT1zdGF0aWMgaW50IG93bF9lbWFjX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNDY6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVx1MDAzZW1paSwgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jPTUwOT1zdGF0aWMgaW50IGFkaW4xMTEwX3JlZ2lzdGVyX21kaW9idXMoc3RydWN0IGFkaW4xMTEwX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM6NTMwOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTYxNz1zdGF0aWMgaW50IGFkaW4xMTQwX21kaW9fcmVnaXN0ZXIoc3RydWN0IGFkaW4xMTQwX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6NjM3Olx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGlkZXYtXHUwMDNlZGV2LCBwcml2LVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jPTEyOTA9c3RhdGljIGludCBncmV0aF9tZGlvX2luaXQoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM6MTMwNzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoZ3JldGgtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM9MzkzMT1zdGF0aWMgaW50IGV0MTMxeF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jOjQwMjc6XHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjgtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9MTIxPXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9tZGlvX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYzoxNTg6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU5LVx0aWYgKHJldCAhPSAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYz0xMDYxPXN0YXRpYyBpbnQgYXUxMDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYzoxMjIyOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihhdXAtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTEyMjMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz0zNDI4PXN0YXRpYyBpbnQgeGdiZV9waHlfaW5pdChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE3LVx0c25wcmludGYobWlpLVx1MDAzZWlkLCBzaXplb2YobWlpLVx1MDAzZWlkKSwgXCYjMzQ7JXNcJiMzNDssIGRldl9uYW1lKHBkYXRhLVx1MDAzZWRldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzE4Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE5LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzIwOlx0XHRkZXZfZXJyKHBkYXRhLVx1MDAzZWRldiwgXCYjMzQ7bWRpb2J1c19yZWdpc3RlciBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzIxLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM9OTg9aW50IHhnZV9tZGlvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTExOC1cdG1kaW9fYnVzLVx1MDAzZXBoeV9tYXNrID0gMHgxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYzoxMTk6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTIwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTgzNz1pbnQgeGdlbmVfZW5ldF9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6ODg4OnN0YXRpYyBpbnQgeGdlbmVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4OS1cdFx0XHRcdCAgc3RydWN0IG1paV9idXMgKm1kaW8pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkxMzpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTE0LVx0XHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMS1cdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MjI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM9OTM5PWludCB4Z2VuZV9lbmV0X21kaW9fY29uZmlnKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTU4Olx0cmV0ID0geGdlbmVfbWRpb2J1c19yZWdpc3RlcihwZGF0YSwgbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jPTEzMT1pbnQgYXJjX21kaW9fcHJvYmUoc3RydWN0IGFyY19lbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYzoxNzM6XHRlcnJvciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3NC1cdG9mX25vZGVfcHV0KG1kaW9fbm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM6MTAxMTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBheF9sb2NhbC1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTItXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz02ODc9c3RhdGljIGludCBhZzcxeHhfbWRpb19wcm9iZShzdHJ1Y3QgYWc3MXh4ICphZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyNy1cdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcJiMzNDttZGlvXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6NzI4Olx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI5LVx0b2Zfbm9kZV9wdXQobW5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz0yMjM0PXN0YXRpYyBpbnQgYjQ0X3JlZ2lzdGVyX3BoeV9vbmUoc3RydWN0IGI0NCAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIyNjA6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI2MS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz0xNzEzPXN0YXRpYyBpbnQgYmNtX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6MTgzMDpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgzMS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jPTIxMT1zdHJ1Y3QgbWlpX2J1cyAqYmNtYV9tZGlvX21paV9yZWdpc3RlcihzdHJ1Y3QgYmdtYWMgKmJnbWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jOjIzNjpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM3LVx0b2Zfbm9kZV9wdXQobnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE5Mz1pbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjMzLVx0XHRwaHlfbmFtZSA9IFwmIzM0O2V4dGVybmFsIFJ2TUlJXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MjM0Olx0XHQvKiBvZl9tZGlvYnVzX3JlZ2lzdGVyIHRvb2sgY2FyZSBvZiByZWFkaW5nIHRoZSAmIzM5O21heC1zcGVlZCYjMzk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzUtXHRcdCAqIFBIWSBwcm9wZXJ0eSBmb3IgdXMsIGVmZmVjdGl2ZWx5IGxpbWl0aW5nIHRoZSBQSFkgc3VwcG9ydGVkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIxNTc9c3RhdGljIGludCBzYm1hY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2LCBsb25nIGxvbmcgYmFzZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyNy1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jOjIyMjg6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHNjLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjktXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MTUwNT1zdGF0aWMgaW50IHRnM19tZGlvX2luaXQoc3RydWN0IHRnMyAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jOjE1NTg6XHRpID0gbWRpb2J1c19yZWdpc3Rlcih0cC1cdTAwM2VtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNTU5LVx0aWYgKGkpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA5NzpzdGF0aWMgaW50IG1hY2JfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWFjYiAqYnAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA0LVx0aWYgKG1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMDU6XHRcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTA2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTExOTpcdFx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjAtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTEyMjpcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIzLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMjU9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTk6XHRlcnIgPSBtYWNiX21kaW9idXNfcmVnaXN0ZXIoYnAsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTYwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jPTExMDc9c3RhdGljIGludCBkbTkwNTFfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYm9hcmRfaW5mbyAqZGIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYzoxMTI1Olx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIGRiLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYy0xMTI2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM9MjQyMz1zdGF0aWMgaW50IHRzbmVwX21kaW9faW5pdChzdHJ1Y3QgdHNuZXBfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoyNDU1Olx0cmV0dmFsID0gb2ZfbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVx1MDAzZW1kaW9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0yNDU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM9MTAyND1zdGF0aWMgaW50IGV0aG9jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYzoxMjA4Olx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTczND1zdGF0aWMgaW50IGZ0Z21hYzEwMF9zZXR1cF9tZGlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYzoxNzcwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlZGV2LCBwcml2LVx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzcxLVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM9MzY9c3RhdGljIGludCBlbmV0Y19wY2lfbWRpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jOjkxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIGRldi1cdTAwM2VvZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jLTkyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MjY2PXN0YXRpYyBpbnQgZW5ldGNfbWRpb19wcm9iZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MjkzOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTQtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMDg9c3RhdGljIGludCBlbmV0Y19pbWRpb19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjM0MzpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDQtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MzA0Mj1zdGF0aWMgaW50IGZlY19lbmV0X21paV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMxNjE6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGZlcC1cdTAwM2VtaWlfYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYz02NT1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2YpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYzoxMDY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jLTEwNy1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYz0xNDk9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jOjE3NjpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYz05Nz1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jOjE2NzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM9NDA5PXN0YXRpYyBpbnQgZnNsX3BxX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYzo0OTQ6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5NS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jPTM3MT1zdGF0aWMgaW50IHhnbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyNi1cdGlmIChpc19vZl9ub2RlKGZ3bm9kZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jOjQyNzpcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHRvX29mX25vZGUoZndub2RlKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyOC1cdGVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjk6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIGZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQzMC1cdGVsc2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTI2Nj1pbnQgaGJnX21kaW9faW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI5MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM9MTA5ND1zdGF0aWMgaW50IGhpeDVoZDJfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM6MTE4NjpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jPTEyMz1pbnQgaGNsZ2VfbWFjX21kaW9fY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTQtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IH4oMVUgXHUwMDNjXHUwMDNjIG1hYy1cdTAwM2VwaHlfYWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjE1NTpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM9NDk1PXN0YXRpYyBpbnQgaG5zX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1ODQ6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODUtXHR9IGVsc2UgaWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTkyLVx0XHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU5MzpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5NC1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jPTI1NjA9c3RhdGljIGludCBlbWFjX2R0X21kaW9fcHJvYmUoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4NC1cdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslc1wmIzM0OywgZGV2LVx1MDAzZW9mZGV2LVx1MDAzZW5hbWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jOjI1ODU6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2ZGV2LVx1MDAzZW9mZGV2LVx1MDAzZWRldiwgYnVzLCBtaWlfbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODYtXHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MTAyNj1pbnQgaXhnYmVfbWlpX2J1c19pbml0KHN0cnVjdCBpeGdiZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA4OC1cdGFkYXB0ZXItXHUwMDNlbWlpX2J1cyA9IGJ1cztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjEwODk6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA5MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zODU9bHRxX2V0b3BfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDItXHRcdCBwcml2LVx1MDAzZXBkZXYtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM6NDAzOlx0aWYgKG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtaWlfYnVzKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDQtXHRcdGVyciA9IC1FTlhJTztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jPTI4Mz1zdGF0aWMgaW50IG9yaW9uX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4MS1cdC8qIEZvciB0aGUgcGxhdGZvcm1zIG5vdCBzdXBwb3J0aW5nIERUL0FDUEkgZmFsbC1iYWNrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4MjpcdCAqIHRvIG1kaW9idXNfcmVnaXN0ZXIgdmlhIG9mX21kaW9idXNfcmVnaXN0ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4My1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODQtXHRpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NTpcdFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYuZndub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg2LVx0ZWxzZVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzOTMKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogOTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSB5dDkyMXggTURJTyBEcml2ZXIgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYHl0OTIxeF9tZGlvX2RyaXZlcmAsIHdoaWNoIGlzIGFuIE1ESU8gZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBzd2l0Y2ggY2hpcC4gSXQgaWRlbnRpZmllcyBpdHNlbGYgdmlhIHRoZSAmIzM0O21vdG9yY29tbSx5dDkyMTUmIzM0OyBjb21wYXRpYmxlIHN0cmluZyBpbiB0aGUgRGV2aWNlIFRyZWUuIEkgcXVpY2tseSBnbGFuY2UgYXQgYG5ldC9kc2EvdGFnX3l0OTIxeC5jYCDigJMganVzdCBhIHF1aWNrIGNoZWNrIHNpbmNlIHRoZSBwYXRjaCBkaWRuJiMzOTt0IG1vZGlmeSBpdC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0ICp3YXMqIG1vZGlmaWVkLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgRGV2aWNlIFRyZWUgYmluZGluZ3MsIHRoZSBNQUlOVEFJTkVSUyBmaWxlLCBhbmQgdGhlIERTQSBLY29uZmlnL01ha2VmaWxlLCBhbG9uZ3NpZGUgdGhlIGludHJvZHVjdGlvbiBvZiBgbGVkcy5jYCBhbmQgYHNtaS5jYCBmb3IgTEVEIHN1cHBvcnQgYW5kIFNNSSByZWdpc3RlciBhY2Nlc3MsIHJlc3BlY3RpdmVseSwgd2l0aGluIGEgbmV3IGBtb3RvcmNvbW1gIGRpcmVjdG9yeSB1bmRlciBgZHJpdmVycy9uZXQvZHNhL2AuIFRoZSBjb3JlIGRyaXZlciBjb2RlIGhhcyBiZWVuIHJlbmFtZWQgZnJvbSBgeXQ5MjF4LmNgIHRvIGBjaGlwLmNgLgoKVGhlIGtleSBxdWVzdGlvbiBpczogY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIG9uIGFuIGFtZDY0IG1hY2hpbmUgdXNpbmcgUUVNVSBvciBzeXprYWxsZXI/IElzIHRoZXJlIHNvbWUgdmlydHVhbCBvciBlbXVsYXRlZCBoYXJkd2FyZSBvciBuZXRsaW5rL3N5c2NhbGwgaW50ZXJmYWNlIHRoYXQgY291bGQgcmVhY2ggdGhlc2UgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2A/IEkgY2hlY2sgaWYgYGRzYV9sb29wYCBvciBhbnl0aGluZyBzaW1pbGFyIHdvdWxkIHVzZSBpdCwgYnV0IGBkc2FfbG9vcC5jYCBoYXMgaXRzIG93biBzd2l0Y2ggb3BlcmF0aW9ucy4KClRoZSByZWFsaXR5IGlzLCBgeXQ5MjF4YCBpcyBhICpzcGVjaWZpYyogaGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgWVQ5MjE1IEFTSUMuIEl0ICpuZWVkcyogdGhhdCBwaHlzaWNhbCBoYXJkd2FyZSwgY29ubmVjdGVkIHRvIGFuIE1ESU8gYnVzLCBhbmQgZGVzY3JpYmVkIGluIHRoZSBEZXZpY2UgVHJlZSB3aXRoIHRoYXQgJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDsgY29tcGF0aWJsZSBzdHJpbmcuIFdpdGhvdXQgdGhlIHJlYWwgWVQ5MjE1IEFTSUMgd2lyZWQgdG8gYSBNRElPIGJ1cyBhbmQgYSBEVCBkZXNjcmlwdGlvbiwgYHl0OTIxeF9tZGlvX3Byb2JlKClgIHdpbGwgKm5ldmVyKiBiZSBjYWxsZWQuIENvbnNlcXVlbnRseSwgbm9uZSBvZiB0aGUgZnVuY3Rpb25zIGluIGBjaGlwLmNgLCBgbGVkcy5jYCwgb3IgYHNtaS5jYCDigJMgd2hpY2ggYXJlIERTQSBjYWxsYmFja3MgYW5kIExFRCBjbGFzc2RldiBjYWxsYmFja3Mg4oCTIHdpbGwgZXZlciBleGVjdXRlIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIHByb2JlLgoKVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIGNvbXBhcmlzb24gdG8gU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBkZXNjcmlwdGlvbiBvZiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IOKAkyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSDigJMgbmFpbHMgaXQuIFRoaXMgZHJpdmVyIGNsZWFybHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LgoKU28sICpXb3J0aEZ1enppbmcqIGlzIGZhbHNlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgcmVxdWlyZW1lbnRzIGJlZm9yZSBzZXR0aW5nIHRoZSByZXN1bHRzOgoKMS4gICpXb3J0aEZ1enppbmcqOiBGYWxzZQoyLiAgKkVuYWJsZUNvbmZpZ3MqOiBFbXB0eSBsaXN0IChvciBudWxsIG9yIHJlbGV2YW50IGNvbmZpZ3MsIHN1Y2ggYXMgYE5FVF9EU0FfWVQ5MjFYYCwgYE5FVF9EU0FfWVQ5MjFYX0xFRFNgIOKAkyBzeXprYWxsZXIgbGlrZXMgYW4gZW1wdHkgbGlzdC9udWxsIGZvciBmYWxzZSkuCjMuICAqRm9jdXNTeW1ib2xzKjogRW1wdHkgbGlzdCBvciBudWxsCjQuICAqUmVhc29uaW5nKjogQSBjbGVhciBleHBsYW5hdGlvbjogSXQmIzM5O3MgYW4gTURJTy1jb25uZWN0ZWQgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIEFTSUMgZHJpdmVyLiBJdCYjMzk7cyBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLgoKTG9va3MgZ29vZC4gTm93IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIGV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciBhbmQgYWRkcyBMRUQgY29udHJvbCBzdXBwb3J0IGZvciBpdC4gVGhpcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSBpcyBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIGNoaXAgYXR0YWNoZWQgdmlhIE1ESU8gYnVzIGFuZCBwcm9iZWQgdmlhIERldmljZSBUcmVlIChcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7KS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgZXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyIGFuZCBhZGRzIExFRCBjb250cm9sIHN1cHBvcnQgZm9yIGl0LiBUaGlzIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8pIGlzIGZvciBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBldGhlcm5ldCBzd2l0Y2ggY2hpcCBhdHRhY2hlZCB2aWEgTURJTyBidXMgYW5kIHByb2JlZCB2aWEgRGV2aWNlIFRyZWUgKFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDspLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDM6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjA0LjMwNDgxNDIyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTc2ODgxMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjA0LjMwNDgyMDg1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0MTk1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWU4YjQxN2E1ZjI2Mjg1YWZjMTM1ZTllNThkMjg3MjUzNjU1YWM4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDAzOjQ5OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbmluZGV4IDMzYTY1NTJlNDZmYzAuLjkzYmE1YjE4MTIwNWIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuQEAgLTIxLDYgKzIxLDkgQEAgZGVzY3JpcHRpb246IHxcXG4gXFxuICAgQW55IHBvcnQgY2FuIGJlIHVzZWQgYXMgdGhlIENQVSBwb3J0LlxcbiBcXG4rICBFYWNoIHBvcnQgaGFzIGF0IG1vc3QgMyBMRURzIGNvbm5lY3RlZCBhbmQgY2FuIGJlIGRlY2xhcmVkIHVzaW5nIHRoZSBzdGFuZGFyZFxcbisgIExFRHMgc3RydWN0dXJlLlxcbitcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcXG5AQCAtNTksNiArNjIsNyBAQCB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuIGV4YW1wbGVzOlxcbiAgIC0gfFxcbiAgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcXHUwMDNlXFxuIFxcbiAgICAgbWRpbyB7XFxuICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuQEAgLTExMyw2ICsxMTcsMjUgQEAgZXhhbXBsZXM6XFxuICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBcXFwibGFuMVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcXFwiaW50ZXJuYWxcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSBcXHUwMDNjXFx1MDAyNnN3X3BoeTBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgICAgICBsZWRzIHtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX1dISVRFXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgfTtcXG4gXFxuICAgICAgICAgICAgICAgICBldGhlcm5ldC1wb3J0QDEge1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggZmMzMjBiMzczNjU2Zi4uYjIzZmI2ZjJmNGVmNCAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4NDE2LDcgKzE4NDE2LDcgQEAgTTpcXHREYXZpZCBZYW5nIFxcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG4tRjpcXHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcXG4rRjpcXHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xcbiBGOlxcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXFxuIFxcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbmluZGV4IDY3NmZiN2RmZmUxNGYuLjhkOGVkY2Y4OWYxMDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbkBAIC04Miw2ICs4Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuIFxcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcXCJcXG4rXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXFxcIlxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1xcXCJcXG5AQCAtMTY4LDEyICsxNzAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cXG4gXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxcbiBcXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXFxuIFxcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cXG4tXFxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxcbi1cXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbi1cXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuLVxcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuLVxcdGhlbHBcXG4tXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuLVxcdCAgY2hpcC5cXG4gZW5kbWVudVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5pbmRleCA2Y2ViNzhhNzU1ZDc3Li5kZjg0OWNkMGU2NDBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNSwxMSArMTUsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzljZGQ3OWExZmQyNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXG5AQCAtMCwwICsxLDE3IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4rXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4rXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbitcXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbitcXHQgIGNoaXAuXFxuK1xcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xcbitcXHRib29sIFxcXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVxcXCJcXG4rXFx0ZGVmYXVsdCB5XFxuK1xcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcXG4rXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxcbitcXHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWViMTJjYjkxZjkzNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuQEAgLTAsMCArMSw1IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYS4uZDY2M2FmMDEwZjQzMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbkBAIC0xMyw3ICsxMyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2hzci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuQEAgLTI2LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMXEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwieXQ5MjF4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4gXFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbiBcXHR7fVxcbiB9O1xcbiBcXG4tI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuLVxcbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXFx0NDA5NVxcbiBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1xcdDEwMDAwXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1xcdDEwMDAwMFxcbi1cXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cXG4gICpcXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbiBcXHRyZXR1cm4gKGFkZHJbNF0gXFx1MDAzY1xcdTAwM2MgOCkgfCBhZGRyWzVdO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2V3cml0ZShwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4te1xcbi1cXHR1MzIgdmFsO1xcbi1cXHRpbnQgcmVzO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuLVxcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuLVxcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbi1cXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdCp2YWxwID0gdmFsO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFx0dTMyIHY7XFxuLVxcdHUzMiB1O1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnYpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0dSA9IHY7XFxuLVxcdHUgXFx1MDAyNj0gfm1hc2s7XFxuLVxcdHUgfD0gdmFsO1xcbi1cXHRpZiAodSA9PSB2KVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcXG4tfVxcbi1cXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxcbi0gKlxcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXFxuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cXG4tICovXFxuLVxcbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxcbi17XFxuLVxcdCpsbyBcXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmhpIFxcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xcbi1cXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuLVxcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXFxuLVxcdFxcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0dSB8PSB2YWxzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxcbiB7XFxuIFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbkBAIC00NDMwLDYgKzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKVxcbiBcXHRyZXR1cm4geXQ5MjF4X2VkYXRhX3JlYWRfY29udChwcml2LCBhZGRyLCB2YWxwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuQEAgLTQ3ODYsNiArNDU4OSwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjYsNiArNDY3NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xcbiBcXHQucG9ydF9hZGRfZHNjcF9wcmlvXFx0PSB5dDkyMXhfZHNhX3BvcnRfYWRkX2RzY3BfcHJpbyxcXG4gI2VuZGlmXFxuIFxcdC8qIGNoaXAgKi9cXG4rXFx0LnRlYXJkb3duXFx0XFx0PSB5dDkyMXhfZHNhX3RlYXJkb3duLFxcbiBcXHQuc2V0dXBcXHRcXHRcXHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbnNpbWlsYXJpdHkgaW5kZXggOTklXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuaW5kZXggNWYzYjk5ZTE4OWM0MS4uODNjZDQ1NDk1NWRkYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbkBAIC04NTAsOSArODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXFx0XFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXFxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cXHRcXHQ4XFxuIFxcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXFx0M1xcbisjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU1cXHQxMFxcbitcXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xcbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdFxcdDExXFxuIFxcbisjZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4rXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcXHUwMDNjIDgpXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxcbiBcXG5AQCAtOTM4LDYgKzk0MywxNiBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XFxuIFxcdHU2NCByeF9mcmFtZXM7XFxuIFxcdHU2NCB0eF9mcmFtZXM7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xcbitcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eV9tYXNrO1xcbitcXHR1bnNpZ25lZCBjaGFyIGxlZF9jeWNsZV9tYXNrO1xcbitcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3ZjZlYjgzNGQ2ZDNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5AQCAtMCwwICsxLDY2NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bGVkcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cXHUwMDNlcG9ydClcXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVxcdTAwM2VpbmRleF0pXFxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXFx1MDAzZWRzLmRldilcXG4rXFxuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcXG4re1xcbitcXHRzd2l0Y2ggKGdyb3VwKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0LyogTm8gcmV2b2tpbmcgLSBMRUQgaXMgc2FjcmlmaWNlZCBpbiBjYXNlIG9mIElPIGVycm9yICovXFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIFxcdTAwMjY9IH5CSVQoZ3JvdXApO1xcbitcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgXFx1MDAyNj0gfkJJVChncm91cCk7XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY3RybCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgY2hhciAqZHV0eXApXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eTtcXG4rXFxuK1xcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XFxuK1xcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXFxuK1xcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRmb3IgKDsgY3ljbGUgXFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2U9IDEsIGN5Y2xlIFxcdTAwM2VcXHUwMDNlPSAxKVxcbitcXHRcXHRpZiAoY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHQqY3ljbGVwID0gY3ljbGU7XFxuK1xcbitcXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXFxuK1xcdFxcdFxcdFxcdCAgICAgKG9uIFxcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxcbitcXHRcXHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFxcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XFxuK1xcdFxcdFxcdGR1dHkgPSBkdXR5c1tpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0aWYgKG9uIFxcdTAwM2Ugb2ZmKVxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcXG4rXFx0KmR1dHlwID0gZHV0eTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZHV0eTtcXG4rXFx0Ym9vbCB1c2VfY3ljbGU7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghKm9ucCBcXHUwMDI2XFx1MDAyNiAhKm9mZnApIHtcXG4rXFx0XFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0ZHV0eSA9IChwcC1cXHUwMDNlbGVkX2R1dHlfbWFzayBcXHUwMDI2IH5CSVQoZ3JvdXApKSA/IHBwLVxcdTAwM2VsZWRfZHV0eSA6XFxuK1xcdFxcdCAgICAgICBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIGlmICghKm9ucCB8fCAhKm9mZnApIHtcXG4rXFx0XFx0cmV0dXJuIHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCAqb25wKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFxcdTAwMjZjeWNsZSwgXFx1MDAyNmR1dHkpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gY3ljbGUgXFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFxuK1xcdFxcdGlmICh1c2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgY3ljbGUgIT0gcHAtXFx1MDAzZWxlZF9jeWNsZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHBwLVxcdTAwM2VsZWRfY3ljbGVfbWFzayBcXHUwMDI2IH5CSVQoZ3JvdXApKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoZHV0eSAhPSBwcC1cXHUwMDNlbGVkX2R1dHkgXFx1MDAyNlxcdTAwMjYgKHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIFxcdTAwMjYgfkJJVChncm91cCkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHBwLVxcdTAwM2VsZWRfY3ljbGVfbWFzayBcXHUwMDI2PSB+QklUKGdyb3VwKTtcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5X21hc2sgXFx1MDAyNj0gfkJJVChncm91cCk7XFxuK1xcbitcXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XFxuK1xcdGlmICh2YWwgIT0gY3RybCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdHN3aXRjaCAoZHV0eSBcXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAoZHV0eSBcXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xcbitcXHR9XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxcbitcXHRcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgfD0gQklUKGdyb3VwKTtcXG4rXFx0XFx0cHAtXFx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xcbitcXHR9XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIHw9IEJJVChncm91cCk7XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eSA9IGR1dHk7XFxuK1xcbitcXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xcbitcXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIG1hc2s7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCh2YWwgXFx1MDAyNiBtYXAtXFx1MDAzZW1hc2spID09IG1hcC1cXHUwMDNlbWFzaylcXG4rXFx0XFx0XFx0KmZsYWdzcCB8PSBtYXAtXFx1MDAzZWZsYWdzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGN0cmwgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRjdHJsIHw9IG1hcC1cXHUwMDNlbWFzaztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eV9tYXNrIFxcdTAwMjY9IH5CSVQoZ3JvdXApO1xcbitcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgXFx1MDAyNj0gfkJJVChncm91cCk7XFxuK1xcbitcXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XFxuK1xcdGlmIChncm91cCA9PSAyKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHR9XFxuK1xcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1hc2ssIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxcbitcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxcbitcXHRcXHRcXHRcXHQgICBkZWxheV9vZmYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoXFx1MDAyNnByaXYtXFx1MDAzZWRzLCBwcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAoIWRwKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSlcXG4rXFx0XFx0cmV0dXJuICFkcC1cXHUwMDNldXNlciA/IE5VTEwgOiBcXHUwMDI2ZHAtXFx1MDAzZXVzZXItXFx1MDAzZWRldjtcXG4rXFx0aWYgKGRzYV9wb3J0X2lzX2NwdShkcCkpXFxuK1xcdFxcdHJldHVybiAhZHAtXFx1MDAzZWNvbmR1aXQgPyBOVUxMIDogXFx1MDAyNmRwLVxcdTAwM2Vjb25kdWl0LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXG4rXFx0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFnc3ApO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XFxuK1xcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XFxuK1xcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XFxuK1xcdGludCBwb2xhcml0eV9vcmlnO1xcbitcXHRib29sIGFjdGl2ZV9oaWdoO1xcbitcXHRib29sIGFjdGl2ZV9sb3c7XFxuK1xcdHUzMiBmb3JjZV9vcmlnO1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgdmFsO1xcbitcXHRib29sIG9uO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZncm91cCk7XFxuK1xcdGlmIChyZXMpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJNaXNzaW5nIExFRCByZWcgZm9yICVwZndcXFxcblxcXCIsIGZ3bm9kZSk7XFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFx0aWYgKGdyb3VwIFxcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxcXG5cXFwiLCBncm91cCwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmIChwcC1cXHUwMDNlbGVkc1tncm91cF0pIHtcXG4rXFx0XFx0cmVzID0gLUVFWElTVDtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGFjdGl2ZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRhY3RpdmVfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtbG93XFxcIik7XFxuK1xcdGlmIChhY3RpdmVfaGlnaCBcXHUwMDI2XFx1MDAyNiBhY3RpdmVfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiTEVEICUwMmQ6JTAydSBjYW5ub3QgYmUgYm90aCBhY3RpdmUtaGlnaCBhbmQgYWN0aXZlLWxvd1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgZ3JvdXApO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRwb2xhcml0eSA9IGFjdGl2ZV9oaWdoID8gMSA6IGFjdGl2ZV9sb3cgPyAtMSA6IDA7XFxuK1xcbitcXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxlZCkge1xcbitcXHRcXHRyZXMgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXBvcnQgPSBwcDtcXG4rXFx0bGVkLVxcdTAwM2Vncm91cCA9IGdyb3VwO1xcbitcXG4rXFx0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdHBvbGFyaXR5X29yaWcgPSAwO1xcbitcXHRpZiAocG9sYXJpdHkpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ludjtcXG4rXFxuK1xcdFxcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xcbitcXHRcXHRjdHJsID0gcG9sYXJpdHkgXFx1MDAzZSAwID8gdmFsIHwgbWFzayA6IHZhbCBcXHUwMDI2IH5tYXNrO1xcbitcXHRcXHRpZiAoY3RybCAhPSB2YWwpIHtcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGN0cmwpO1xcbitcXHRcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9pbnY7XFxuK1xcbitcXHRcXHRcXHRwb2xhcml0eV9vcmlnID0gLXBvbGFyaXR5O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZvcmNlX29yaWcgPSBVMzJfTUFYO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycl9sZWQyO1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRjdHJsID0gKHZhbCBcXHUwMDI2IH5tYXNrKSB8XFxuK1xcdFxcdCAgICAgICAob24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxcbitcXHRcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApKTtcXG4rXFx0XFx0aWYgKGN0cmwgIT0gdmFsKSB7XFxuK1xcdFxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBjdHJsKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfbGVkMjtcXG4rXFxuK1xcdFxcdFxcdGZvcmNlX29yaWcgPSB2YWwgXFx1MDAyNiBtYXNrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcXG4rXFx0XFx0b24gPSAodmFsIFxcdTAwMjYgbWFzaykgPT0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRlZmF1bHRfbGFiZWwgPSBcXFwiOnBvcnRcXFwiLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnJfcmVnaXN0ZXI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZWdpc3RlcjpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAoZm9yY2Vfb3JpZyAhPSBVMzJfTUFYKSB7XFxuK1xcdFxcdHJldCA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZm9yY2Vfb3JpZyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiTEVEMl9QT1JUXFxcIiwgcG9ydCwgZ3JvdXAsIHJldCk7XFxuK1xcdH1cXG4rZXJyX2xlZDI6XFxuK1xcdGlmIChwb2xhcml0eV9vcmlnKSB7XFxuK1xcdFxcdHJldCA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcG9sYXJpdHlfb3JpZyBcXHUwMDNlIDApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byByZXN0b3JlICVzIGZvciBMRUQgJTAyZDolMDJ1OiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIkxFRF9QQVJfSU5WXFxcIiwgcG9ydCwgZ3JvdXAsIHJldCk7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitlcnJfaW52OlxcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFxuK2VycjpcXG4rXFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBMRUQgJTAyZDolMDJ1OiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0cG9ydCwgZ3JvdXAsIHJlcyk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXG4rXFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRpZiAobGVkKSB7XFxuK1xcdFxcdFxcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcXHUwMDI2bGVkLVxcdTAwM2VjZGV2KTtcXG4rXFx0XFx0XFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcXG4rXFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5X21hc2sgPSAwO1xcbitcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlX21hc2sgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuK1xcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdGlmICghbGVkc19ucClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocG9ydCBcXHUwMDNlPSBZVDkyMVhfTEVEX1BPUlRfTlVNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCBwb3J0ICVkIGZvciBMRURzXFxcXG5cXFwiLCBwb3J0KTtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXMgPSAwO1xcbitcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpO1xcbitcXHRcXHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHQvKiBBbGxvdyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb24gb24gbm9uLWZhdGFsIGVycm9ycyAqL1xcbitcXHRcXHRyZXMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCsrKVxcbitcXHRcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXFxuK1xcdCAqIChhcyBmYXIgYXMgSSBrbm93KS5cXG4rXFx0ICovXFxuK1xcbitcXHRyZXMgPSAwO1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0aWYgKHJlcyA9PSAtRU5PTUVNIHx8IHJlcyA9PSAtRUlPKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0LyogQWxsb3cgcGFydGlhbCBjb25maWd1cmF0aW9uIG9uIG5vbi1mYXRhbCBlcnJvcnMgKi9cXG4rXFx0XFx0cmVzID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMWRmNDc5ZWU1ODEwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfVU5LXFx0XFx0XFx0QklUKDIxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXFx0R0VOTUFTSygyMCwgMTkpXFx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVxcdFxcdEdFTk1BU0soMTYsIDEzKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXFx0XFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFxcdFxcdFxcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX01cXHRcXHRcXHRHRU5NQVNLKDE3LCAwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcXHRCSVQoMTcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXFx0QklUKDE2KVxcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXFx0XFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cXHRcXHRHRU5NQVNLKDMxLCAzMClcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNlXFx1MDAzZSB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVxcdFxcdEdFTk1BU0soMjksIDI4KVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QXFx0QklUKDI3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVxcdFxcdEdFTk1BU0soMjYsIDI1KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlxcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1xcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFxcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlxcdFxcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXFx0XFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcXHRcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg0ICogKGdycCkgKyAxOCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXFx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzY1xcdTAwM2MgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcXHRCSVQoMTQpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1xcdEJJVCgxMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcXHRCSVQoMTIpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXFx0QklUKDExKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1xcdFxcdEJJVCgxMClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcXHRcXHRCSVQoOClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcXHRcXHRCSVQoNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cXHRcXHRCSVQoNilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVxcdFxcdEJJVCg1KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXFx0QklUKDMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXFx0QklUKDIpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcXHRCSVQoMSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFxcdFxcdDB4ZDAxMDBcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcXHRcXHRHRU5NQVNLKDI1LCAyNClcXHQvKiBkZWxheT8gKi9cXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXFx0XFx0R0VOTUFTSygxLCAwKVxcdC8qICNncnAgLSAxICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVxcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgNSwgNiAqICgocG9ydCkgJSA1KSArIDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KVxcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1xcdFxcdDB4ZDAxYzRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcXHRcXHQweGQwMWM4XFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXFx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVxcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDUsIDYgKiAoZ3JwKSArIDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKGdycCkgKyAyKSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKGdycCkpKVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlxcdDY0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcXHQ1MTJcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFxcdDIwNDhcXG4rXFxuKy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cXHRcXHQyNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVxcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X2xlZCB7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xcbitcXHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xcbit9O1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcXG4rXFxuKyNlbHNlXFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2VuZGlmXFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmM2FkZmQ2NDE2NWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbkBAIC0wLDAgKzEsMTgwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1xcdDEwMDAwXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1xcdDEwMDAwMFxcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2V3cml0ZShwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4rXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4rXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuK1xcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0KnZhbHAgPSB2YWw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxcbit7XFxuK1xcdGludCByZXM7XFxuK1xcdHUzMiB2O1xcbitcXHR1MzIgdTtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHUgPSB2O1xcbitcXHR1IFxcdTAwMjY9IH5tYXNrO1xcbitcXHR1IHw9IHZhbDtcXG4rXFx0aWYgKHUgPT0gdilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXFxuK1xcdFxcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHR1MzIgdSA9IHZzW2ldO1xcbitcXG4rXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuK1xcdFxcdGlmICh1ICE9IHZzW2ldKVxcbitcXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHZzW2ldID0gdTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjaGFuZ2VkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjEyZTIwZjcxZDgwNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxuQEAgLTAsMCArMSw2MSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1lUX1NNSV9IXFxuKyNkZWZpbmUgX1lUX1NNSV9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxcbitcXHRcXHRcXHQgICB1MzIgdmFsKTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcXG4rfVxcbitcXG4rLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcXG4rICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxcbisgKlxcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXFxuKyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cXG4rICovXFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcXG4re1xcbitcXHQqbG8gXFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpoaSBcXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcXG4rXFx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcXG4rXFx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XFxuK2ludCB5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHUzMiAqbWFza3MsIGNvbnN0IHUzMiAqdmFscyk7XFxuK2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXFxuK1xcdFxcdFxcdCAgICBjb25zdCB1MzIgKm1hc2tzKTtcXG4raW50IHl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MDQuODY5ODQwNzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzYxMTgzMzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWU4YjQxN2E1ZjI2Mjg1YWZjMTM1ZTllNThkMjg3MjUzNjU1YWM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDM6NDk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbmluZGV4IDMzYTY1NTJlNDZmYzAuLjkzYmE1YjE4MTIwNWIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuQEAgLTIxLDYgKzIxLDkgQEAgZGVzY3JpcHRpb246IHxcbiBcbiAgIEFueSBwb3J0IGNhbiBiZSB1c2VkIGFzIHRoZSBDUFUgcG9ydC5cbiBcbisgIEVhY2ggcG9ydCBoYXMgYXQgbW9zdCAzIExFRHMgY29ubmVjdGVkIGFuZCBjYW4gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkXG4rICBMRURzIHN0cnVjdHVyZS5cbitcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcbkBAIC01OSw2ICs2Miw3IEBAIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXHUwMDNlXG4gXG4gICAgIG1kaW8ge1xuICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuQEAgLTExMyw2ICsxMTcsMjUgQEAgZXhhbXBsZXM6XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFwibGFuMVwiO1xuICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcImludGVybmFsXCI7XG4gICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c3dfcGh5MFx1MDAzZTtcbitcbisgICAgICAgICAgICAgICAgICAgIGxlZHMge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgICAgICAgICAgbGVkQDAge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9XSElURVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fTEFOO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LXN0YXRlID0gXCJrZWVwXCI7XG4rICAgICAgICAgICAgICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICAgICAgICAgICAgICBsZWRAMSB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbisgICAgICAgICAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgfTtcbiBcbiAgICAgICAgICAgICAgICAgZXRoZXJuZXQtcG9ydEAxIHtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBmYzMyMGIzNzM2NTZmLi5iMjNmYjZmMmY0ZWY0IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTg0MTYsNyArMTg0MTYsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbitGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA2NzZmYjdkZmZlMTRmLi44ZDhlZGNmODlmMTA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5AQCAtODIsNiArODIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcIlxuIFxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wiXG4rXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCJcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wiXG5AQCAtMTY4LDEyICsxNzAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cbiBcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcbiBcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcbiBcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cbi1cbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCA2Y2ViNzhhNzU1ZDc3Li5kZjg0OWNkMGU2NDBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNSwxMSArMTUsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0Kz0gYjUzL1xuIG9iai15XHRcdFx0XHQrPSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQrPSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCs9IG1pY3JvY2hpcC9cbitvYmoteVx0XHRcdFx0Kz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQrPSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCs9IG14bDg2Mnh4L1xuIG9iai15XHRcdFx0XHQrPSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5Y2RkNzlhMWZkMjVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCArMSwxNyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuK1x0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuK1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBjaGlwLlxuK1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4rXHRib29sIFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcIlxuK1x0ZGVmYXVsdCB5XG4rXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4rXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbitcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZWIxMmNiOTFmOTM1XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMCwwICsxLDUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cbit5dDkyMXgtb2JqcyArPSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLmQ2NjNhZjAxMGY0MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyArMTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ5dDkyMXguaFwiXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00NDMwLDYgKzQyMjQsMTUgQEAgc3RhdGljIGludCB5dDkyMXhfZWRhdGFfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHU4IGFkZHIsIHU4ICp2YWxwKVxuIFx0cmV0dXJuIHl0OTIxeF9lZGF0YV9yZWFkX2NvbnQocHJpdiwgYWRkciwgdmFscCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9kc2FfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbisjZW5kaWZcbit9XG4rXG4gc3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbkBAIC00Nzg2LDYgKzQ1ODksMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbitcdGlmIChyZXMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cIiwgcmVzKTtcbisjZW5kaWZcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY2LDYgKzQ2NzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2FkZF9kc2NwX3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXG4gI2VuZGlmXG4gXHQvKiBjaGlwICovXG4rXHQudGVhcmRvd25cdFx0PSB5dDkyMXhfZHNhX3RlYXJkb3duLFxuIFx0LnNldHVwXHRcdFx0PSB5dDkyMXhfZHNhX3NldHVwLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNWYzYjk5ZTE4OWM0MS4uODNjZDQ1NDk1NWRkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC04NTAsOSArODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVx0M1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QT1JUX05VTVx0MTBcbitcbiAvKiA4IGludGVybmFsICsgMiBleHRlcm5hbCArIDEgbWN1ICovXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuIFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbitcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTM4LDYgKzk0MywxNiBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eV9tYXNrO1xuK1x0dW5zaWduZWQgY2hhciBsZWRfY3ljbGVfbWFzaztcbitcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbisjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3ZjZlYjgzNGQ2ZDNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICsxLDY2NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXHUwMDNlaW5kZXhdKVxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuK1xuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcbit7XG4rXHRzd2l0Y2ggKGdyb3VwKSB7XG4rXHRjYXNlIDA6XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDE6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcbitcdC8qIE5vIHJldm9raW5nIC0gTEVEIGlzIHNhY3JpZmljZWQgaW4gY2FzZSBvZiBJTyBlcnJvciAqL1xuK1x0cHAtXHUwMDNlbGVkX2R1dHlfbWFzayBcdTAwMjY9IH5CSVQoZ3JvdXApO1xuK1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gKHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2IH5CSVQoZ3JvdXApKSA/IHBwLVx1MDAzZWxlZF9kdXR5IDpcbitcdFx0ICAgICAgIFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbitcbitcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4rXHR9IGVsc2UgaWYgKCEqb25wIHx8ICEqb2ZmcCkge1xuK1x0XHRyZXR1cm4geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsICpvbnApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1xuK1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4rXG4rXHRcdGlmICh1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayBcdTAwMjYgfkJJVChncm91cCkpKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHkgXHUwMDI2XHUwMDI2IChwcC1cdTAwM2VsZWRfZHV0eV9tYXNrIFx1MDAyNiB+QklUKGdyb3VwKSkpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcbitcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XG4rXHRpZiAodmFsICE9IGN0cmwpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4rXHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbitcdGRlZmF1bHQ6XG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuK1x0XHRicmVhaztcbitcdH1cbitcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4rXHRpZiAodXNlX2N5Y2xlKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4rXHR9XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbitcdFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuK1x0aWYgKHVzZV9jeWNsZSlcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XG4rXHRlbHNlXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGVfbWFzayB8PSBCSVQoZ3JvdXApO1xuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdH1cbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgfD0gQklUKGdyb3VwKTtcbitcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbitcbitcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4rXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTMyIG1hc2s7XG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksXG4rXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksXG4rXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbit9O1xuK1xuK3N0YXRpYyBib29sXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuK1x0XHRcdFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGlmICghZmxhZ3MpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRpZiAoIWZsYWdzKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHUzMiBhZGRyO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0aWYgKCh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxuK1x0ICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkge1xuK1x0XHQqZmxhZ3NwID0gMDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdCpmbGFnc3AgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKHZhbCBcdTAwMjYgbWFwLVx1MDAzZW1hc2spID09IG1hcC1cdTAwM2VtYXNrKVxuK1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHR1MzIgYWRkcjtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Y3RybCA9IDA7XG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4rXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuK1x0XHRcdGN0cmwgfD0gbWFwLVx1MDAzZW1hc2s7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZmxhZ3MpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgXHUwMDI2PSB+QklUKGdyb3VwKTtcbitcdHBwLVx1MDAzZWxlZF9jeWNsZV9tYXNrIFx1MDAyNj0gfkJJVChncm91cCk7XG4rXG4rXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4rXHRpZiAoZ3JvdXAgPT0gMikge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdH1cbitcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4rXHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuK1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuK1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIWRwKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSlcbitcdFx0cmV0dXJuICFkcC1cdTAwM2V1c2VyID8gTlVMTCA6IFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK1x0aWYgKGRzYV9wb3J0X2lzX2NwdShkcCkpXG4rXHRcdHJldHVybiAhZHAtXHUwMDNlY29uZHVpdCA/IE5VTEwgOiBcdTAwMjZkcC1cdTAwM2Vjb25kdWl0LVx1MDAzZWRldjtcbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbitcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4rXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbitcdGludCBwb2xhcml0eV9vcmlnO1xuK1x0Ym9vbCBhY3RpdmVfaGlnaDtcbitcdGJvb2wgYWN0aXZlX2xvdztcbitcdHUzMiBmb3JjZV9vcmlnO1xuK1x0aW50IHBvbGFyaXR5O1xuK1x0dTMyIGdyb3VwO1xuK1x0dTMyIG1hc2s7XG4rXHR1MzIgY3RybDtcbitcdHUzMiB2YWw7XG4rXHRib29sIG9uO1xuK1x0aW50IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcInJlZ1wiLCBcdTAwMjZncm91cCk7XG4rXHRpZiAocmVzKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIk1pc3NpbmcgTEVEIHJlZyBmb3IgJXBmd1xcblwiLCBmd25vZGUpO1xuK1x0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCIsIGdyb3VwLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pIHtcbitcdFx0cmVzID0gLUVFWElTVDtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRhY3RpdmVfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0YWN0aXZlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1sb3dcIik7XG4rXHRpZiAoYWN0aXZlX2hpZ2ggXHUwMDI2XHUwMDI2IGFjdGl2ZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiTEVEICUwMmQ6JTAydSBjYW5ub3QgYmUgYm90aCBhY3RpdmUtaGlnaCBhbmQgYWN0aXZlLWxvd1xcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRwb2xhcml0eSA9IGFjdGl2ZV9oaWdoID8gMSA6IGFjdGl2ZV9sb3cgPyAtMSA6IDA7XG4rXG4rXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFsZWQpIHtcbitcdFx0cmVzID0gLUVOT01FTTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuK1x0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cbitcdCAqL1xuK1x0cG9sYXJpdHlfb3JpZyA9IDA7XG4rXHRpZiAocG9sYXJpdHkpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIGVycl9pbnY7XG4rXG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuK1x0XHRjdHJsID0gcG9sYXJpdHkgXHUwMDNlIDAgPyB2YWwgfCBtYXNrIDogdmFsIFx1MDAyNiB+bWFzaztcbitcdFx0aWYgKGN0cmwgIT0gdmFsKSB7XG4rXHRcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGN0cmwpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRnb3RvIGVycl9pbnY7XG4rXG4rXHRcdFx0cG9sYXJpdHlfb3JpZyA9IC1wb2xhcml0eTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Zm9yY2Vfb3JpZyA9IFUzMl9NQVg7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVycl9sZWQyO1xuK1x0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbitcdGRlZmF1bHQ6XG4rXHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbitcdFx0Y3RybCA9ICh2YWwgXHUwMDI2IH5tYXNrKSB8XG4rXHRcdCAgICAgICAob24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuK1x0XHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCkpO1xuK1x0XHRpZiAoY3RybCAhPSB2YWwpIHtcbitcdFx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxuK1x0XHRcdFx0XHQgICAgICAgY3RybCk7XG4rXHRcdFx0aWYgKHJlcylcbitcdFx0XHRcdGdvdG8gZXJyX2xlZDI7XG4rXG4rXHRcdFx0Zm9yY2Vfb3JpZyA9IHZhbCBcdTAwMjYgbWFzaztcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRvbiA9ICh2YWwgXHUwMDI2IG1hc2spID09IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRlZmF1bHRfbGFiZWwgPSBcIjpwb3J0XCIsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3JlZ2lzdGVyOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChmb3JjZV9vcmlnICE9IFUzMl9NQVgpIHtcbitcdFx0cmV0ID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSxcbitcdFx0XHRcdFx0ICAgICBmb3JjZV9vcmlnKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcdFwiRmFpbGVkIHRvIHJlc3RvcmUgJXMgZm9yIExFRCAlMDJkOiUwMnU6ICVkXFxuXCIsXG4rXHRcdFx0XHRcIkxFRDJfUE9SVFwiLCBwb3J0LCBncm91cCwgcmV0KTtcbitcdH1cbitlcnJfbGVkMjpcbitcdGlmIChwb2xhcml0eV9vcmlnKSB7XG4rXHRcdHJldCA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLFxuK1x0XHRcdFx0XHQgICAgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCksXG4rXHRcdFx0XHRcdCAgICAgcG9sYXJpdHlfb3JpZyBcdTAwM2UgMCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0ZGV2X2VycihkZXYsXG4rXHRcdFx0XHRcIkZhaWxlZCB0byByZXN0b3JlICVzIGZvciBMRUQgJTAyZDolMDJ1OiAlZFxcblwiLFxuK1x0XHRcdFx0XCJMRURfUEFSX0lOVlwiLCBwb3J0LCBncm91cCwgcmV0KTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitlcnJfaW52OlxuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXG4rZXJyOlxuK1x0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgTEVEICUwMmQ6JTAydTogJWRcXG5cIixcbitcdFx0cG9ydCwgZ3JvdXAsIHJlcyk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKSB7XG4rXHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbitcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHBwLVx1MDAzZWxlZF9kdXR5X21hc2sgPSAwO1xuK1x0cHAtXHUwMDNlbGVkX2N5Y2xlX21hc2sgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0aWYgKCFsZWRzX25wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwb3J0IFx1MDAzZT0gWVQ5MjFYX0xFRF9QT1JUX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIHBvcnQgJWQgZm9yIExFRHNcXG5cIiwgcG9ydCk7XG4rXHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJlcyA9IDA7XG4rXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCkpO1xuK1x0XHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXG4rXHRcdFx0YnJlYWs7XG4rXHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbiBvbiBub24tZmF0YWwgZXJyb3JzICovXG4rXHRcdHJlcyA9IDA7XG4rXHR9XG4rXG4rXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCsrKVxuK1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbit9XG4rXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHQvKiBMRURzIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlbSBhbHRvZ2V0aGVyXG4rXHQgKiAoYXMgZmFyIGFzIEkga25vdykuXG4rXHQgKi9cbitcbitcdHJlcyA9IDA7XG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4rXHRcdGlmICghZHAtXHUwMDNlZG4pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgZHAtXHUwMDNlaW5kZXgpO1xuK1x0XHRpZiAocmVzID09IC1FTk9NRU0gfHwgcmVzID09IC1FSU8pXG4rXHRcdFx0YnJlYWs7XG4rXHRcdC8qIEFsbG93IHBhcnRpYWwgY29uZmlndXJhdGlvbiBvbiBub24tZmF0YWwgZXJyb3JzICovXG4rXHRcdHJlcyA9IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTFkZjQ3OWVlNTgxMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgKzEsMTE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTEVEU19IXG4rI2RlZmluZSBfWVRfTEVEU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9VTktcdFx0XHRCSVQoMjEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVx0R0VOTUFTSygyMCwgMTkpXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcdEJJVCgxNilcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cdFx0R0VOTUFTSygzMSwgMzApXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2NcdTAwM2MgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxNikpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcdEJJVCgxNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXHRCSVQoMTEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXHRcdEJJVCg4KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cdFx0QklUKDUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcdEJJVCgyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcdFx0MHhkMDEwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXHRcdEdFTk1BU0soMSwgMClcdC8qICNncnAgLSAxICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXHQyMDQ4XG4rXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXHRcdDI0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK3N0cnVjdCB5dDkyMXhfbGVkIHtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbitcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJmM2FkZmQ2NDE2NWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgKzEsMTgwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuK1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuK1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4rXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQqdmFscCA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuK3tcbitcdGludCByZXM7XG4rXHR1MzIgdjtcbitcdHUzMiB1O1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0dSA9IHY7XG4rXHR1IFx1MDAyNj0gfm1hc2s7XG4rXHR1IHw9IHZhbDtcbitcdGlmICh1ID09IHYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHR1IHw9IHZhbHNbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0aWYgKHUgIT0gdnNbaV0pXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXG4rXHRcdHZzW2ldID0gdTtcbitcdH1cbitcbitcdGlmICghY2hhbmdlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIxMmUyMGY3MWQ4MDZcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgKzEsNjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9TTUlfSFxuKyNkZWZpbmUgX1lUX1NNSV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbitcdFx0XHQgICB1MzIgdmFsKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4rfVxuK1xuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4rICpcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuK3tcbitcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4rXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuK1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyk7XG4raW50IHl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXG4rXHRcdFx0ICAgICBjb25zdCB1MzIgKm1hc2tzLCBjb25zdCB1MzIgKnZhbHMpO1xuK2ludCB5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsXG4rXHRcdFx0ICAgIGNvbnN0IHUzMiAqbWFza3MpO1xuK2ludCB5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpO1xuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MDQuODY5ODQ0MTczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyNTMxMjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IEFNRDY0IEFyY2hpdGVjdHVyZSBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzLCBwcmVzdW1hYmx5IGZvciBhbWQ2NCwgYW5kIHRoZSB1c2VyIHdhbnRzIG15IGV4cGVydCBleWUuIExldCdzIGRpZyBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLlwiIFRoZSBwYXRjaCBpbmNsdWRlcyBjaGFuZ2VzIHRvIHNldmVyYWwgZmlsZXMsIHdoaWNoIGlzIGEgZ29vZCBzaWduIHRoYXQgdGhlIHNjb3BlIGlzIHByZXR0eSB3aWRlLlxuXG5GaXJzdCB1cCwgdGhlcmUncyBhIGRldmljZSB0cmVlIGJpbmRpbmcsIHRoZSBgbW90b3Jjb21tLHl0OTIxeC55YW1sYCBmaWxlLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgdGhpcyBpcyBkZXNpZ25lZCB0byBwbGF5IG5pY2VseSB3aXRoIG1vZGVybiBkZXZpY2UgdHJlZSBwcmFjdGljZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG1vZGVybiBzeXN0ZW1zLiBOZXh0LCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGFwcHJvcHJpYXRlIG1haW50YWluZXJzIGFyZSBsaXN0ZWQgYW5kIGlmIHRoZXkndmUgYWxyZWFkeSByZXZpZXdlZCB0aGUgY29kZSwgb3IgaWYgdGhpcyBpcyBhbiBhcmVhIEkgbmVlZCB0byB0YWtlIHNwZWNpYWwgY2FyZSB3aXRoLlxuXG5UaGVuLCB0aGVyZSBhcmUgdGhlIHVzdWFsIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBlbnRyaWVzIGluIHRoZSBEU0EgZGlyZWN0b3J5IGFuZCB0aGUgYG1vdG9yY29tbWAgc3ViZGlyZWN0b3J5LCBzbyBpdCBsb29rcyBsaWtlIHRoaXMgZHJpdmVyIGlzIGJlaW5nIHByb3Blcmx5IGludGVncmF0ZWQuIEltcG9ydGFudGx5LCBJIHNlZSBhIHJlbmFtaW5nIG9mIGB5dDkyMXguY2AgYW5kIGB5dDkyMXguaGAgdG8gYGNoaXAuY2AgYW5kIGBjaGlwLmhgLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRyaXZlcidzIGNvcmUgbG9naWMgaGFzbid0IGNoYW5nZWQgYmVjYXVzZSB0aGlzIHJlbmFtaW5nIGNhbiBvZnRlbiBiZSBhIHNvdXJjZSBvZiBwcm9ibGVtcy4gSXQgYWxzbyBpbmNsdWRlcyBuZXcgYGxlZHMuYy9oYCBhbmQgYHNtaS5jL2hgIGZpbGVzIHdpdGhpbiB0aGUgYG1vdG9yY29tbWAgZGlyZWN0b3J5LCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZSBkcml2ZXIgbWF5IGluY2x1ZGUgbmV3IGZ1bmN0aW9uYWxpdGllcywgc3VjaCBhcyBMRURzIG9yIFNNSSBtYW5hZ2VtZW50LlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzICphY3R1YWxseSogYnJvdWdodCBpbnRvIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgYHl0OTIxeGAgaXMgcHJvYmVkL2luc3RhbnRpYXRlZC4gSSB3aWxsIG9wZW4gdXAgYGNoaXAuY2AgYW5kIGxvb2sgZm9yIG1vZHVsZSBvciBkcml2ZXIgcmVnaXN0cmF0aW9uLiBJJ2xsIGFsc28gZG8gYSBxdWljayBgZ3JlcGAgdGhyb3VnaCB0aGUgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9gIGRpcmVjdG9yeSB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGRpc2NvdmVycyB0aGlzIHNwZWNpZmljIHN3aXRjaCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBEU0EgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjA5LjA5NTE1OTM1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3ODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfLipfZHJpdmVyfHJlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwNzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwOC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTIwPXl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM4OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01NDg9c3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1NS1cXHQvKiBSZWFkaW5nIG9mIHl0OTIxeF9wb3J0OjptaWIgaXMgbm90IHByb3RlY3RlZCBieSBhIGxvY2sgYW5kIGl0J3MgdmFpblxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1NjpcXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU3LVxcdCAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gbWFrZSBhIHNuYXBzaG90IG9mIE1JQiBzdGF0cy5cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2OTI9c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MDQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcwNTpcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXFx1MDAyNnByaXYtXFx1MDAzZWRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzA2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDcyND1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2OTpcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MC19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00Nzc4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzg4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODktXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD05NjM9c3RydWN0IHl0OTIxeF9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTk3Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo5NzM6XFx0LyogcHJvdGVjdCB0aGUgYWNjZXNzIHRvIHRoZSBzd2l0Y2ggcmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtOTc0LVxcdHN0cnVjdCBtdXRleCByZWdfbG9jaztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTQxNT15dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NDYtXFx0fTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYzo1NDc6XFx0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jLTU0OC1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jOjU0OTpcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTUzOmVycl9yZWdpc3RlcjpcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01NTQtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM9NTg2PXN0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01OTQtXFx0XFx0aWYgKGxlZCkge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jOjU5NTpcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTk2LVxcdFxcdFxcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oPTMzPXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oLTM3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg6Mzg6LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg6Mzk6ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaC00MC0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaC00MS0gKlxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmg6NDI6ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgtNDMtICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OTowOS4xNDMwNDUxODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDY0Nzk1NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgRW52aXJvbm1lbnQncyBSZWFjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGFuZCBhc3NvY2lhdGVkIGhhcmR3YXJlLCB0aGUgeXQ5MjF4LCBpcyBldmVuIGFjY2Vzc2libGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IFwieXQ5MjF4XCIgKmlzKi4gQWgsIGl0J3MgYW4gTURJTyBkcml2ZXIuIFNwZWNpZmljYWxseSwgYG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlcjsgbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7YC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSBNRElPIGRldmljZXMsIGFuZCBzcGVjaWZpY2FsbHkgRFNBIHN3aXRjaGVzLCBwcm9iZWFibGUgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBlbXVsYXRlZCBoYXJkd2FyZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgb3Igd2l0aCBnZW5lcmljIHZpcnR1YWwgZGV2aWNlcz8gSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gZ2V0IHNvbWV0aGluZyBsaWtlIGEgTW90b3Jjb21tIFlUOTIxNSB0byBwcm9iZSB3aXRob3V0IG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBjdXN0b20gZGV2aWNlIHRyZWUgZm9yIGEgcGFydGljdWxhciBib2FyZC5cblxuTGV0J3MgZGlnIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBEU0EvTURJTyBkZXZpY2VzIGFyZSBwcm9iZWQuIERvIHRoZXkgKnJlcXVpcmUqIGEgcGh5c2ljYWwgTURJTyBidXMgYW5kIGEgRGV2aWNlIFRyZWUgKERUKSwgb3IgaXMgdGhlcmUgc29tZSBraW5kIG9mIG1vY2sgb3IgdmlydHVhbCBidXMgYXZhaWxhYmxlPyBIb2xkIG9uLCBsZXQncyBqdW1wIGJhY2sgdG8gU2VjdGlvbiAyIG9mIHRoZSBpbnN0cnVjdGlvbnMsIHdoaWNoIGhpZ2hsaWdodHMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhpcyBzZWN0aW9uOiB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAobWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgbmVlZCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIGdvb2QgY29tcGFyaXNvbiBwb2ludC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgRFNBIGRyaXZlcnMsIEkyQywgU1BJLCBNRElPIHN3aXRjaCBjaGlwcyBpbiBnZW5lcmFsPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgRFNBIHN3aXRjaCBkcml2ZXJzIGFyZSBldmFsdWF0ZWQgaW4gdGhlIHN5emthbGxlciB0cmlhZ2UgcHJvY2Vzcy5cblxuU28sIHRoZSBjb3JlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gdGhpczogQ2FuIE1ESU8gc3dpdGNoZXMgb3IgRFNBIHN3aXRjaGVzIChzcGVjaWZpY2FsbHksIHRob3NlIGxpa2UgdGhlIG9uZXMgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYCkgYmUgaW5zdGFudGlhdGVkIHdpdGhpbiBhIHN0YW5kYXJkIHN5emthbGxlciAvIFFFTVUgYW1kNjQgZW52aXJvbm1lbnQ/XG5cbkhvdyB3b3VsZCBhbiBNRElPIHN3aXRjaCBjaGlwIGxpa2UgdGhlIFlUOTIxNSBwcm9iZSBvbiBhbWQ2ND8gVGhpcyBpcyByZWFsbHkgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFRpbWUgdG8gZXhhbWluZSB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBpbnNwZWN0IGBjaGlwLmNgIGFyb3VuZCBgeXQ5MjF4X21kaW9fZHJpdmVyYCBhbmQgYHl0OTIxeF9tZGlvX3Byb2JlYCB0byBzZWUgaG93IGl0J3MgZG9uZS4gVGhhdCdsbCB0ZWxsIG1lIGlmIGl0ICpuZWVkcyogc29tZXRoaW5nIGJleW9uZCB3aGF0J3MgYXZhaWxhYmxlIGluIG15IHN0YW5kYXJkIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE3OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OToxNC4yMDc4NDM4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY5MDpcXHR9XFxuNDY5MTpcXHRcXG40NjkyOlxcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuNDY5MzpcXHR7XFxuNDY5NDpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbjQ2OTU6XFx0XFxuNDY5NjpcXHRcXHRpZiAoIXByaXYpXFxuNDY5NzpcXHRcXHRcXHRyZXR1cm47XFxuNDY5ODpcXHRcXG40Njk5OlxcdFxcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaS0tIFxcdTAwM2UgMDsgKSB7XFxuNDcwMDpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ3MDE6XFx0XFxuNDcwMjpcXHRcXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQpO1xcbjQ3MDM6XFx0XFx0fVxcbjQ3MDQ6XFx0XFxuNDcwNTpcXHRcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXFx1MDAyNnByaXYtXFx1MDAzZWRzKTtcXG40NzA2OlxcdFxcbjQ3MDc6XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZWFjbF9ibGtzKTsgaSsrKSB7XFxuNDcwODpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXFx1MDAzZWFjbF9ibGtzW2ldO1xcbjQ3MDk6XFx0XFxuNDcxMDpcXHRcXHRcXHRpZiAoIWFjbGJsaylcXG40NzExOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ3MTI6XFx0XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cXHUwMDNlcnVsZXMpOyBqKyspIHtcXG40NzEzOlxcdFxcdFxcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX3J1bGUgKmFjbHJ1bGUgPSBhY2xibGstXFx1MDAzZXJ1bGVzW2pdO1xcbjQ3MTQ6XFx0XFxuNDcxNTpcXHRcXHRcXHRcXHRpZiAoIWFjbHJ1bGUpXFxuNDcxNjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40NzE3OlxcdFxcdFxcdFxcdGt2ZnJlZShhY2xydWxlKTtcXG40NzE4OlxcdFxcdFxcdH1cXG40NzE5OlxcdFxcdFxcdGt2ZnJlZShhY2xibGspO1xcbjQ3MjA6XFx0XFx0fVxcbjQ3MjE6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ3MjI6XFx0fVxcbjQ3MjM6XFx0XFxuNDcyNDpcXHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG40NzI1OlxcdHtcXG40NzI2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuNDcyNzpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvO1xcbjQ3Mjg6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xcbjQ3Mjk6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xcbjQ3MzA6XFx0XFxuNDczMTpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuNDczMjpcXHRcXHRpZiAoIXByaXYpXFxuNDczMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzM0OlxcdFxcbjQ3MzU6XFx0XFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xcbjQ3MzY6XFx0XFx0aWYgKCFtZGlvKVxcbjQ3Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDczODpcXHRcXG40NzM5OlxcdFxcdG1kaW8tXFx1MDAzZWJ1cyA9IG1kaW9kZXYtXFx1MDAzZWJ1cztcXG40NzQwOlxcdFxcdG1kaW8tXFx1MDAzZWFkZHIgPSBtZGlvZGV2LVxcdTAwM2VhZGRyO1xcbjQ3NDE6XFx0XFx0bWRpby1cXHUwMDNlc3dpdGNoaWQgPSAwO1xcbjQ3NDI6XFx0XFxuNDc0MzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDc0NDpcXHRcXG40NzQ1OlxcdFxcdHByaXYtXFx1MDAzZXJlZ19vcHMgPSBcXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcXG40NzQ2OlxcdFxcdHByaXYtXFx1MDAzZXJlZ19jdHggPSBtZGlvO1xcbjQ3NDc6XFx0XFxuNDc0ODpcXHRcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpKyspIHtcXG40NzQ5OlxcdFxcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV07XFxuNDc1MDpcXHRcXG40NzUxOlxcdFxcdFxcdHBwLVxcdTAwM2VpbmRleCA9IGk7XFxuNDc1MjpcXHRcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cHAtXFx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xcbjQ3NTM6XFx0XFx0fVxcbjQ3NTQ6XFx0XFxuNDc1NTpcXHRcXHRkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG40NzU2OlxcdFxcdGRzLVxcdTAwM2VkZXYgPSBkZXY7XFxuNDc1NzpcXHRcXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuNDc2MDpcXHRcXHRkcy1cXHUwMDNlb3BzID0gXFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcXG40NzYxOlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcXG40NzYyOlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcXG40NzYzOlxcdFxcdGRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcXG40NzY0OlxcdFxcdGRzLVxcdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xcbjQ3NjU6XFx0XFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcXG40NzY2OlxcdFxcbjQ3Njc6XFx0XFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcXG40NzY4OlxcdFxcbjQ3Njk6XFx0XFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xcbjQ3NzA6XFx0fVxcbjQ3NzE6XFx0XFxuNDc3MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcXG40NzczOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG40Nzc0OlxcdFxcdHt9XFxuNDc3NTpcXHR9O1xcbjQ3NzY6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcXG40Nzc3OlxcdFxcbjQ3Nzg6XFx0c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuNDc3OTpcXHRcXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcXG40NzgwOlxcdFxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuNDc4MTpcXHRcXHQuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93bixcXG40NzgyOlxcdFxcdC5tZGlvZHJ2LmRyaXZlciA9IHtcXG40NzgzOlxcdFxcdFxcdC5uYW1lID0gWVQ5MjFYX05BTUUsXFxuNDc4NDpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXFxuNDc4NTpcXHRcXHR9LFxcbjQ3ODY6XFx0fTtcXG40Nzg3OlxcdFxcbjQ3ODg6XFx0bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuNDc4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MTQuMjA4MDgxMTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzcwNjI3ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB5dDkyMXhfbWRpb19kcml2ZXJgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgbG9va3MgbGlrZSBpdCdzIGtleWVkIG9mZiB0aGUgYHl0OTIxeF9vZl9tYXRjaGAgT3BlbkZpcm13YXJlL0RldmljZVRyZWUgbm9kZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYG1vdG9yY29tbSx5dDkyMTVgIGRldmljZS4gIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgdGhpbmcgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgeDg2XzY0IG9yIGFtZDY0IFFFTVU/IEkgbWVhbiwgd2l0aG91dCBhIERldmljZVRyZWUgb3IgYSBwaHlzaWNhbCBNRElPIGJ1cyB3aXRoIHRoaXMgcGFydGljdWxhciBzd2l0Y2ggaG9va2VkIHVwP1xuXG5Ib2xkIG9uLi4uIGJlZm9yZSBJIGdvIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGFwcGx5IFNlY3Rpb24gMiBvZiB0aGUgdHJpYWdlIHBoaWxvc29waHkuICBUaGF0IFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgY2hlY2sgaXMgaW1wb3J0YW50LiBJdCBoaWdobGlnaHRzIHdoZW4gc29tZXRoaW5nIGlzICpub3QqIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuICBJIG5lZWQgdG8gc2VlIGlmIGl0IGZhbGxzIHVuZGVyIGFueSBvZiB0aG9zZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIGtleSBoZXJlIGlzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiICBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLlxuXG5Ob3csIERTQSBzd2l0Y2hlcyBhcmUgcGh5c2ljYWwsIHJpZ2h0PyBFdGhlcm5ldCBzd2l0Y2ggY2hpcHMg4oCTIHRoaW5ncyBsaWtlIHRoZSBNYXJ2ZWxsIG12ODhlNnh4eCwgdGhlIE1vdG9yY29tbSBZVDkyMTUgKHRoZSBvbmUgd2UncmUgZGVhbGluZyB3aXRoKSwgdGhlIFJlYWx0ZWsgUlRMODM2NiwgTWljcm9jaGlwIEtTWiwgZXRjLiBUaGV5IGdldCB3aXJlZCBpbiB2aWEgTURJTywgU1BJLCBvciBtZW1vcnktbWFwcGVkIEkvTywgdHlwaWNhbGx5IG9uIGVtYmVkZGVkIGJvYXJkcyDigJMgQVJNLCBNSVBTLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIHdpdGggRGV2aWNlVHJlZXMgZGVzY3JpYmluZyB0aGUgc3dpdGNoIGFuZCBpdHMgcG9ydHMuXG5cblNvLCB0aGUgcnViIGlzOiBvbiBhbWQ2NC9zdGFuZGFyZCBRRU1VLCB0aGVyZSdzIG5vIHZpcnR1YWwgTURJTyBidXMgd2l0aCBhIE1vdG9yY29tbSBZVDkyMTUgY2hpcCBhdHRhY2hlZC4gQmluZ28uICBUaGlzIHNjcmVhbXMgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIi4gIFRoZSBxdWVzdGlvbiBpczogY2FuIGEgdXNlci1zcGFjZSBwcm9jZXNzIGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcz8gIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIHN5c2ZzIGludGVyZmFjZSBvciBzb21lIHBzZXVkbyBpbnRlcmZhY2UgdG8gc3BpbiB1cCBNRElPIGRldmljZXMgb24gYW4gTURJTyBidXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Nzg5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDM6NDk6MTguNTc4NzEyODE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDMzOTc4NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19kcml2ZXJfcmVnaXN0ZXJ8bWRpb2J1c19yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExOTIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDk9TURJT1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1MS0gIGRldm1fbWRpb2J1c19hbGxvY19zaXplKClcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUyOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUzOiAgZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKClcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzU0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3Q9MTI9ZGV2aWNlICh0aGUgc2FtZSBvYmplY3RzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgdmlhXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3Q6MTM6YGBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKWBgKS4gTUFDLXNpZGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzIHN1Y2ggYXNcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q9Nz1UaGUgUEhZcyBvbiBhbiBNRElPIGJ1cyBbcGh5XSBhcmUgcHJvYmVkIGFuZCByZWdpc3RlcmVkIHVzaW5nXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0LTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTYtICAgZHJpdmVyIG5lZWRzLCBzZXR1cCB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUsIGFuZCByZWdpc3RlciB3aXRoIHRoZSBQQUwgdXNpbmdcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSdzIGEgcmVtb3ZlIGZ1bmN0aW9uIHRvIHVuZG8gYWxsIG9mXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jPTEwOT1zdGF0aWMgaW50IGVwODI0OGVfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMtMTMyLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM6MTMzOlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMtMTM0LVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYz0yMDc9c3RhdGljIGludCBncGlvX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYy0yNDMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM6MjQ0OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjgzLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTQ6XFx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmRzYV9sb29wX2Rydik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTE4Nz1zdGF0aWMgaW50IGdzd2lwX21kaW8oc3RydWN0IGdzd2lwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6MjE0OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MzIxPXN0YXRpYyBpbnQga3N6OTQ3N19wY3NfY3JlYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MzQyOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXFx1MDAzZWRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTIzMjE9aW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yMzkyLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjIzOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5NC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTY4NT1zdGF0aWMgaW50IGxhbjkzN3hfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo3NTY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwNzpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwOC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTIwPXl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM4OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQwOT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0NC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQ0NTpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTI0Mj1zdGF0aWMgaW50IG10NzYyOF9zZXR1cF9pbnRlcm5hbF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjEtXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jOjI2MjpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTI2Nz1zdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjkyLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjI5MzpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5NC1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTE0OT1zdGF0aWMgaW50IG5ldGNfcG9ydF9jcmVhdGVfZW1kaW9fYnVzKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjE4MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDEzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjEwMTQ6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jPTg3OD1zdGF0aWMgaW50IHZzYzk5NTNfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXFx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYzo5MDQ6XFx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTA1LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9MzU3PXN0YXRpYyBpbnQgYXI5MzMxX3N3X21idXNfaW5pdChzdHJ1Y3QgYXI5MzMxX3N3X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjM4MjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgzLVxcdG9mX25vZGVfcHV0KG1ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05NDc9cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODc6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC03LVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3JlYWx0ZWstbWRpby5oOjg6c3RhdGljIGlubGluZSBpbnQgcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC05LXtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaDoxMDpcXHRyZXR1cm4gbWRpb19kcml2ZXJfcmVnaXN0ZXIoZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0xMS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaD0yMD12b2lkIHJlYWx0ZWtfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmgtMjMtXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcmVhbHRlay1tZGlvLmg6MjQ6c3RhdGljIGlubGluZSBpbnQgcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9yZWFsdGVrLW1kaW8uaC0yNS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTMzNzM9c3RhdGljIGludCBydGw4MzY1bWJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMzc2LVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM6MzM3NzpcXHRyZXQgPSByZWFsdGVrX21kaW9fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZydGw4MzY1bWJfbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMzM3OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmM9MTg2Nj1zdGF0aWMgaW50IHJ0bDgzNjZyYl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYy0xODY5LVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jOjE4NzA6XFx0cmV0ID0gcmVhbHRla19tZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2cnRsODM2NnJiX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYy0xODcxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9NzQ9aW50IHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy05OS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTAwOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jPTExMTc9c3RhdGljIGludCBhNXBzd19wcm9iZV9tZGlvKHN0cnVjdCBhNXBzdyAqYTVwc3csIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0My1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExNDQ6XFx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQ1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzA5LS8qIEZyb20gc2phMTEwNV9tZGlvLmMgKi9cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzExLXZvaWQgc2phMTEwNV9tZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjctXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcXHRyYyA9IHNqYTExMDVfbWRpb2J1c19yZWdpc3Rlcihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2OS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzEyPXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdDFfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0My1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozNDQ6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0NS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozOTY6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDU4LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM9NDU5PXN0YXRpYyBpbnQgYXhfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYzo0Nzk6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDgwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTMyMT1zdGF0aWMgaW50IG93bF9lbWFjX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNDY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGlkZXYtXFx1MDAzZWRldiwgcHJpdi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM9MTI5MD1zdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYzoxMzA3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoZ3JldGgtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwOC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYz0zOTMxPXN0YXRpYyBpbnQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6NDAyNzpcXHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyOC1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9MTIxPXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9tZGlvX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYzoxNTg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTktXFx0aWYgKHJldCAhPSAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jPTEwNjE9c3RhdGljIGludCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjEyMjI6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihhdXAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTM0Mjg9c3RhdGljIGludCB4Z2JlX3BoeV9pbml0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cXHRzbnByaW50ZihtaWktXFx1MDAzZWlkLCBzaXplb2YobWlpLVxcdTAwM2VpZCksIFxcXCIlc1xcXCIsIGRldl9uYW1lKHBkYXRhLVxcdTAwM2VkZXYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MTg6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzIwOlxcdFxcdGRldl9lcnIocGRhdGEtXFx1MDAzZWRldiwgXFxcIm1kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MjEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM9OTg9aW50IHhnZV9tZGlvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTE4LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4MTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jOjExOTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG1paV9idXMgKm1kaW8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkxMzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTE0LVxcdFxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MjI6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz05Mzk9aW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5NTg6XFx0cmV0ID0geGdlbmVfbWRpb2J1c19yZWdpc3RlcihwZGF0YSwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlxcdGVycm9yID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3NC1cXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM6MTAxMTpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBheF9sb2NhbC1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz02ODc9c3RhdGljIGludCBhZzcxeHhfbWRpb19wcm9iZShzdHJ1Y3QgYWc3MXh4ICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI3LVxcdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6NzI4OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjktXFx0b2Zfbm9kZV9wdXQobW5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI2MDpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM9MjExPXN0cnVjdCBtaWlfYnVzICpiY21hX21kaW9fbWlpX3JlZ2lzdGVyKHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM6MjM2OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWlpX2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cXHRvZl9ub2RlX3B1dChucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjMzLVxcdFxcdHBoeV9uYW1lID0gXFxcImV4dGVybmFsIFJ2TUlJXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoyMzQ6XFx0XFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJ21heC1zcGVlZCdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzUtXFx0XFx0ICogUEhZIHByb3BlcnR5IGZvciB1cywgZWZmZWN0aXZlbHkgbGltaXRpbmcgdGhlIFBIWSBzdXBwb3J0ZWRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyNy1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MjIyODpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHNjLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyOS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYz0xNTA1PXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTU1ODpcXHRpID0gbWRpb2J1c19yZWdpc3Rlcih0cC1cXHUwMDNlbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTktXFx0aWYgKGkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMz1zdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDk3OnN0YXRpYyBpbnQgbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtYWNiICpicCwgc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDQtXFx0aWYgKG1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1OlxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTE5OlxcdFxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTIyOlxcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5OlxcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTYwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jPTExMDc9c3RhdGljIGludCBkbTkwNTFfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYm9hcmRfaW5mbyAqZGIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYzoxMTI1OlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGRiLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz0yNDIzPXN0YXRpYyBpbnQgdHNuZXBfbWRpb19pbml0KHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjI0NTU6XFx0cmV0dmFsID0gb2ZfbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtZGlvYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBwcml2LVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NzEtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYz0zNj1zdGF0aWMgaW50IGVuZXRjX3BjaV9tZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM6OTE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yNjY9c3RhdGljIGludCBlbmV0Y19tZGlvX3Byb2JlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyOTM6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MzA0Mj1zdGF0aWMgaW50IGZlY19lbmV0X21paV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMxNjE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXFx1MDAzZW1paV9idXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYz02NT1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2YpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYzoxMDY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTE0OT1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MTc2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jPTk3PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM6MTY3OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz00MDk9c3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjQ5NDpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyNi1cXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI3OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI4LVxcdGVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5OlxcdFxcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIGZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM9MTA5ND1zdGF0aWMgaW50IGhpeDVoZDJfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM6MTE4NjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM9MTIzPWludCBoY2xnZV9tYWNfbWRpb19jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IH4oMVUgXFx1MDAzY1xcdTAwM2MgbWFjLVxcdTAwM2VwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM9NDk1PXN0YXRpYyBpbnQgaG5zX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1ODQ6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVxcdH0gZWxzZSBpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXFx1MDAzZWRldi5md25vZGUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTItXFx0XFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTkzOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTk0LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IGVtYWNfZHRfbWRpb19wcm9iZShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXYtXFx1MDAzZW9mZGV2LVxcdTAwM2VuYW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM6MjU4NTpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNmRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZWRldiwgYnVzLCBtaWlfbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVxcdGlmIChyZXMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA4OC1cXHRhZGFwdGVyLVxcdTAwM2VtaWlfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjEwODk6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDkwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDItXFx0XFx0IHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcXHRpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtaWlfYnVzKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVxcdFxcdGVyciA9IC1FTlhJTztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM9MjgzPXN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXFx0LyogRm9yIHRoZSBwbGF0Zm9ybXMgbm90IHN1cHBvcnRpbmcgRFQvQUNQSSBmYWxsLWJhY2tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4MjpcXHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgzLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVxcdGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODYtXFx0ZWxzZVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OToyMC42ODIxMTU0NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Nzk5NTAzMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSB5dDkyMXggTURJTyBEcml2ZXIgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYHl0OTIxeF9tZGlvX2RyaXZlcmAsIHdoaWNoIGlzIGFuIE1ESU8gZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBzd2l0Y2ggY2hpcC4gSXQgaWRlbnRpZmllcyBpdHNlbGYgdmlhIHRoZSBcIm1vdG9yY29tbSx5dDkyMTVcIiBjb21wYXRpYmxlIHN0cmluZyBpbiB0aGUgRGV2aWNlIFRyZWUuIEkgcXVpY2tseSBnbGFuY2UgYXQgYG5ldC9kc2EvdGFnX3l0OTIxeC5jYCDigJMganVzdCBhIHF1aWNrIGNoZWNrIHNpbmNlIHRoZSBwYXRjaCBkaWRuJ3QgbW9kaWZ5IGl0LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0ICp3YXMqIG1vZGlmaWVkLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgRGV2aWNlIFRyZWUgYmluZGluZ3MsIHRoZSBNQUlOVEFJTkVSUyBmaWxlLCBhbmQgdGhlIERTQSBLY29uZmlnL01ha2VmaWxlLCBhbG9uZ3NpZGUgdGhlIGludHJvZHVjdGlvbiBvZiBgbGVkcy5jYCBhbmQgYHNtaS5jYCBmb3IgTEVEIHN1cHBvcnQgYW5kIFNNSSByZWdpc3RlciBhY2Nlc3MsIHJlc3BlY3RpdmVseSwgd2l0aGluIGEgbmV3IGBtb3RvcmNvbW1gIGRpcmVjdG9yeSB1bmRlciBgZHJpdmVycy9uZXQvZHNhL2AuIFRoZSBjb3JlIGRyaXZlciBjb2RlIGhhcyBiZWVuIHJlbmFtZWQgZnJvbSBgeXQ5MjF4LmNgIHRvIGBjaGlwLmNgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgb24gYW4gYW1kNjQgbWFjaGluZSB1c2luZyBRRU1VIG9yIHN5emthbGxlcj8gSXMgdGhlcmUgc29tZSB2aXJ0dWFsIG9yIGVtdWxhdGVkIGhhcmR3YXJlIG9yIG5ldGxpbmsvc3lzY2FsbCBpbnRlcmZhY2UgdGhhdCBjb3VsZCByZWFjaCB0aGVzZSBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYD8gSSBjaGVjayBpZiBgZHNhX2xvb3BgIG9yIGFueXRoaW5nIHNpbWlsYXIgd291bGQgdXNlIGl0LCBidXQgYGRzYV9sb29wLmNgIGhhcyBpdHMgb3duIHN3aXRjaCBvcGVyYXRpb25zLlxuXG5UaGUgcmVhbGl0eSBpcywgYHl0OTIxeGAgaXMgYSAqc3BlY2lmaWMqIGhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIFlUOTIxNSBBU0lDLiBJdCAqbmVlZHMqIHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUsIGNvbm5lY3RlZCB0byBhbiBNRElPIGJ1cywgYW5kIGRlc2NyaWJlZCBpbiB0aGUgRGV2aWNlIFRyZWUgd2l0aCB0aGF0IFwibW90b3Jjb21tLHl0OTIxNVwiIGNvbXBhdGlibGUgc3RyaW5nLiBXaXRob3V0IHRoZSByZWFsIFlUOTIxNSBBU0lDIHdpcmVkIHRvIGEgTURJTyBidXMgYW5kIGEgRFQgZGVzY3JpcHRpb24sIGB5dDkyMXhfbWRpb19wcm9iZSgpYCB3aWxsICpuZXZlciogYmUgY2FsbGVkLiBDb25zZXF1ZW50bHksIG5vbmUgb2YgdGhlIGZ1bmN0aW9ucyBpbiBgY2hpcC5jYCwgYGxlZHMuY2AsIG9yIGBzbWkuY2Ag4oCTIHdoaWNoIGFyZSBEU0EgY2FsbGJhY2tzIGFuZCBMRUQgY2xhc3NkZXYgY2FsbGJhY2tzIOKAkyB3aWxsIGV2ZXIgZXhlY3V0ZSBiZWNhdXNlIHRoZXkncmUgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIHByb2JlLlxuXG5UaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgY29tcGFyaXNvbiB0byBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucy4gVGhlIGRlc2NyaXB0aW9uIG9mIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIg4oCTIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUNzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIOKAkyBuYWlscyBpdC4gVGhpcyBkcml2ZXIgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cblNvLCAqV29ydGhGdXp6aW5nKiBpcyBmYWxzZS5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGFsbCByZXF1aXJlbWVudHMgYmVmb3JlIHNldHRpbmcgdGhlIHJlc3VsdHM6XG5cbjEuICAqV29ydGhGdXp6aW5nKjogRmFsc2VcbjIuICAqRW5hYmxlQ29uZmlncyo6IEVtcHR5IGxpc3QgKG9yIG51bGwgb3IgcmVsZXZhbnQgY29uZmlncywgc3VjaCBhcyBgTkVUX0RTQV9ZVDkyMVhgLCBgTkVUX0RTQV9ZVDkyMVhfTEVEU2Ag4oCTIHN5emthbGxlciBsaWtlcyBhbiBlbXB0eSBsaXN0L251bGwgZm9yIGZhbHNlKS5cbjMuICAqRm9jdXNTeW1ib2xzKjogRW1wdHkgbGlzdCBvciBudWxsXG40LiAgKlJlYXNvbmluZyo6IEEgY2xlYXIgZXhwbGFuYXRpb246IEl0J3MgYW4gTURJTy1jb25uZWN0ZWQgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIEFTSUMgZHJpdmVyLiBJdCdzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXG5cbkxvb2tzIGdvb2QuIE5vdyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzkzLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMzo0OToyOC40ODE2MjE1OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIGV0aGVybmV0IHN3aXRjaCBjaGlwIGRyaXZlciBhbmQgYWRkcyBMRUQgY29udHJvbCBzdXBwb3J0IGZvciBpdC4gVGhpcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSBpcyBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgZXRoZXJuZXQgc3dpdGNoIGNoaXAgYXR0YWNoZWQgdmlhIE1ESU8gYnVzIGFuZCBwcm9iZWQgdmlhIERldmljZSBUcmVlIChcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIgYW5kIGFkZHMgTEVEIGNvbnRyb2wgc3VwcG9ydCBmb3IgaXQuIFRoaXMgZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLykgaXMgZm9yIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGV0aGVybmV0IHN3aXRjaCBjaGlwIGF0dGFjaGVkIHZpYSBNRElPIGJ1cyBhbmQgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSAoXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAzOjQ5OjI4LjQ4MTY3NzE5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8fh9g[1] Phase: Running StartedAt: 2026-09-04 03:49:39 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fh9g[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-04 03:49:39 +0000 UTC FinishedAt: 2026-09-04 03:49:44 +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,}