Name: series-workflow6l74w Phase: Failed StartedAt: 2026-07-25 01:45:49 +0000 UTC FinishedAt: 2026-07-25 02:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l74w[0] Phase: Succeeded StartedAt: 2026-07-25 01:45:49 +0000 UTC FinishedAt: 2026-07-25 02:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l74w[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 01:45:49 +0000 UTC FinishedAt: 2026-07-25 02:33:04 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOWQzY2VjODU2NGMxZThiMDc5MGYxYzg4NTliMWU2MDY5ZDY3NjI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDI6MzE6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjcyZDJiZDA3ZjA4ODIuLmZiYWE1OTBhM2EyMmQzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzksNyAmIzQzOzE4MjM5LDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQmIzQzOz0gYjUzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pY3JvY2hpcC9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4mIzQzO1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBjaGlwLlxuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuJiM0MztcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICYjNDM7MTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3l0OTIxeC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLmRlNDE0MzA1NzkzMTNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuIFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9OQU1FXHRcJiMzNDt5dDkyMXhcJiMzNDtcbiYjNDM7XG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbiBcbkBAIC05MzgsNiAmIzQzOzk0MiwxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44NWM5YmIxMzllYWQ4OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDY0NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGR1dHk7XG4mIzQzO1xuJiM0MztcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4mIzQzO1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4mIzQzO1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbiYjNDM7XHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0KmN5Y2xlcCA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4mIzQzO1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuJiM0MztcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikge1xuJiM0MztcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4mIzQzO1x0KmR1dHlwID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4mIzQzO1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbiYjNDM7XHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4mIzQzO1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbiYjNDM7XHRcdFx0ICAgICBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuJiM0MztcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSkge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4mIzQzO1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbiYjNDM7XHRcdFx0aWYgKCFmbGFncylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxuJiM0MztcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbiYjNDM7XHRcdCpmbGFnc3AgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbiYjNDM7XHRcdFx0KmZsYWdzcCB8PSBtYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBhZGRyO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSAwO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGN0cmwgfD0gbWFwLVx1MDAzZW1hc2s7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmbGFncylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4mIzQzO1x0aWYgKGdyb3VwID09IDIpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbiYjNDM7XHR9XG4mIzQzO1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuJiM0MztcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuJiM0MztcdFx0XHRcdCAgIGRlbGF5X29mZik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRldmljZSAqIF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XG4mIzQzO1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0aWYgKCFkcCB8fCAhZHAtXHUwMDNldXNlcilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWRldjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1xuJiM0MztcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhO1xuJiM0MztcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuJiM0MztcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4mIzQzO1x0ZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuJiM0MztcdGJvb2wgZm9yY2VfaGlnaDtcbiYjNDM7XHRib29sIGZvcmNlX2xvdztcbiYjNDM7XHRpbnQgcG9sYXJpdHk7XG4mIzQzO1x0dTMyIGdyb3VwO1xuJiM0MztcdGJvb2wgb247XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZncm91cCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cJiMzNDssIGdyb3VwLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XG4mIzQzO1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtaGlnaFwmIzM0Oyk7XG4mIzQzO1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1sb3dcJiMzNDspO1xuJiM0MztcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XG4mIzQzO1xuJiM0MztcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFsZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuJiM0MztcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGxlZF9jZGV2ID0gXHUwMDI2bGVkLVx1MDAzZWNkZXY7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4mIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwmIzM0O25ldGRldlwmIzM0OztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwmIzM0Oy0ldTolMDJkOiUwMnVcJiMzNDssXG4mIzQzO1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4mIzQzO1x0XHQuZndub2RlID0gZndub2RlLFxuJiM0MztcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuJiM0MztcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbiYjNDM7XHR9O1xuJiM0MztcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvbGFyaXR5KSB7XG4mIzQzO1x0XHR1MzIgYml0ID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0XHQqaW52X21hc2twIHw9IGJpdDtcbiYjNDM7XHRcdGlmIChwb2xhcml0eSBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZWQpXG4mIzQzO1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHUzMiAqaW52X21hc2twLFxuJiM0MztcdFx0ICAgICAgIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbiYjNDM7XHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwmIzM0O2xlZHNcJiMzNDspO1xuJiM0MztcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7XG4mIzQzO1x0XHRpZiAocmVzKSB7XG4mIzQzO1x0XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KVxuJiM0MztcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdHUzMiBpbnZfY3RybCA9IDA7XG4mIzQzO1x0dTMyIGludl9tYXNrID0gMDtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcbiYjNDM7XHRcdGlmICghZHAtXHUwMDNlZG4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgXHUwMDI2aW52X21hc2ssIFx1MDAyNmludl9jdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHMgZm9yIHBvcnQgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBwb3J0LCByZXMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbiYjNDM7XHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChpbnZfbWFzaykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnZfY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRnb3RvIGVuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbiYjNDM7XG4mIzQzO2VuZDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpIHtcbiYjNDM7XHRcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICYjNDM7MSwxMjEgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0hcbiYjNDM7I2RlZmluZSBfWVRfTEVEU19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCAmIzQzOzEsMTU3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbWkuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4mIzQzO1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuJiM0MztcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCp2YWxwID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHR1MzIgdjtcbiYjNDM7XHR1MzIgdTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHUgPSB2O1xuJiM0MztcdHUgXHUwMDI2PSB+bWFzaztcbiYjNDM7XHR1IHw9IHZhbDtcbiYjNDM7XHRpZiAodSA9PSB2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHR1IHw9IHZhbHNbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCAmIzQzOzEsODggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSFxuJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lXG4mIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiYjNDM7ICpcbiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuJiM0MztcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMjozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgTURJTyBkZXZpY2UuIFNpbmNlIHRoZXJlIGlzIG5vIFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGFuZCBNRElPIGRldmljZXMgY2Fubm90IGJlIGFyYml0cmFyaWx5IGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZSAodW5saWtlIEkyQyksIHRoZSBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5ZDNjZWM4NTY0YzFlOGIwNzkwZjFjODg1OWIxZTYwNjlkNjc2MjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAwMjozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjcyZDJiZDA3ZjA4ODIuLmZiYWE1OTBhM2EyMmQzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTgyMzksNyAmIzQzOzE4MjM5LDcgQEAgTToJRGF2aWQgWWFuZyAmbHQ7bW15YW5nZmxAZ21haWwuY29tJmd0OwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCi1GOglkcml2ZXJzL25ldC9kc2EveXQ5MjF4LioKJiM0MztGOglkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLwogRjoJbmV0L2RzYS90YWdfeXQ5MjF4LmMKIAogTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MAogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWcmIzM0OwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnJiMzNDsKJiM0MzsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZyYjMzQ7CiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDsKQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTUKIAkgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyCiAJICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLgotCi1jb25maWcgTkVUX0RTQV9ZVDkyMVgKLQl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7Ci0Jc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAotCXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQppbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiBvYmoteQkJCQkmIzQzOz0gYjUzLwogb2JqLXkJCQkJJiM0Mzs9IGhpcnNjaG1hbm4vCiBvYmoteQkJCQkmIzQzOz0gbGFudGlxLwogb2JqLXkJCQkJJiM0Mzs9IG1pY3JvY2hpcC8KJiM0MztvYmoteQkJCQkmIzQzOz0gbW90b3Jjb21tLwogb2JqLXkJCQkJJiM0Mzs9IG12ODhlNnh4eC8KIG9iai15CQkJCSYjNDM7PSBteGw4NjJ4eC8KIG9iai15CQkJCSYjNDM7PSBuZXRjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwxNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWAomIzQzOwl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKJiM0MzsJc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKJiM0MzsJICBjaGlwLgomIzQzOwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTCiYjNDM7CWJvb2wgJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNSYjMzQ7CiYjNDM7CWRlZmF1bHQgeQomIzQzOwlkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CWRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVgKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKQEAgLTEzLDcgJiM0MzsxMyw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYnJpZGdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfaHNyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwpAQCAtMjYsNyAmIzQzOzI1LDkgQEAKICNpbmNsdWRlICZsdDtuZXQvaWVlZTgwMjFxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKIAotI2luY2x1ZGUgJiMzNDt5dDkyMXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKIAogc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0gewogCXt9CiB9OwogCi0jZGVmaW5lIFlUOTIxWF9OQU1FCSYjMzQ7eXQ5MjF4JiMzNDsKLQogI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRQk0MDk1CiAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKLQogLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4KICAqCiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwCkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKIAlyZXR1cm4gKGFkZHJbNF0gJmx0OyZsdDsgOCkgfCBhZGRyWzVdOwogfQogCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKLXsKLQl1MzIgdmFsOwotCWludCByZXM7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAotCQkJCXJlcyB8fCAodmFsICZhbXA7IG1hc2spID09ICp2YWxwLAotCQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAotCQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQkqdmFscCA9IHZhbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCWludCByZXM7Ci0JdTMyIHY7Ci0JdTMyIHU7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQl1ID0gdjsKLQl1ICZhbXA7PSB+bWFzazsKLQl1IHw9IHZhbDsKLQlpZiAodSA9PSB2KQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7Ci19Ci0KLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KLSAqCi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCi0gKi8KLQotc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKLXsKLQkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwotCSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7Ci0JKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKLQkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAotCQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCi0JCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQljb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsKLQl1MzIgdnNbNF07Ci0JaW50IHJlczsKLQotCUJVSUxEX0JVR19PTihudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKTsKLQotCXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQl1MzIgdSA9IHZzW2ldOwotCi0JCXUgJmFtcDs9IH5tYXNrc1tpXTsKLQkJdSB8PSB2YWxzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCWlmICh1ICE9IHZzW2ldKQotCQkJY2hhbmdlZCA9IHRydWU7Ci0KLQkJdnNbaV0gPSB1OwotCX0KLQotCWlmICghY2hhbmdlZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQkgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQotewotCXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7Ci19Ci0KIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKQogewogCXN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0OwpAQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJcmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg4Niw2ICYjNDM7NDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LSZndDtwb3J0cyk7IGktLSAmZ3Q7IDA7ICkgewogCQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaAppbmRleCA1NTUwNDY1MjY2Njk1Mi4uZGU0MTQzMDU3OTMxM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaApAQCAtODUwLDkgJiM0Mzs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7CiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNCQkoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSykKICNkZWZpbmUgWVQ5MjFYX1VERl9OVU0JCTgKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU0JMwomIzQzOwogLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovCiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTQkJCTExCiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9OQU1FCSYjMzQ7eXQ5MjF4JiMzNDsKJiM0MzsKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSAmbHQ7IDgpCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4ICZsdDs9IChwb3J0KSAmYW1wOyZhbXA7IChwb3J0KSAmbHQ7IDkpCiAKQEAgLTkzOCw2ICYjNDM7OTQyLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7CiAJc3RydWN0IHl0OTIxeF9taWIgbWliOwogCXU2NCByeF9mcmFtZXM7CiAJdTY0IHR4X2ZyYW1lczsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJdW5zaWduZWQgY2hhciBsZWRfZHV0eTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlOwomIzQzOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07CiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uODVjOWJiMTM5ZWFkODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYwpAQCAtMCwwICYjNDM7MSw2NDcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWxlZHMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsZWRzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS0mZ3Q7cG9ydCkKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktJmd0O2luZGV4XSkKJiM0MzsjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLSZndDtkcy5kZXYpCiYjNDM7CiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKQomIzQzO3sKJiM0MzsJc3dpdGNoIChncm91cCkgewomIzQzOwljYXNlIDA6CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKm9ucCA9ICh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzaywKJiM0MzsJCQkJICAgICAgY3RybCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsCiYjNDM7CQkJdW5zaWduZWQgY2hhciAqZHV0eXApCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0gewomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDYpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDQpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDMpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDIpLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5X3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eTsKJiM0MzsKJiM0MzsJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDsKJiM0MzsJY3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovCiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgJmFtcDtjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlcikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZm9yICg7IGN5Y2xlICZndDsgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyICZndDsmZ3Q7PSAxLCBjeWNsZSAmZ3Q7Jmd0Oz0gMSkKJiM0MzsJCWlmIChjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIgJmd0OyZndDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJKmN5Y2xlcCA9IGN5Y2xlOwomIzQzOwomIzQzOwlkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqCiYjNDM7CQkJCSAgICAgKG9uICZndDsgb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKQomIzQzOwkJaWYgKGkgPT0gMCB8fCBkdXR5X3JlcSAmZ3Q7PSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHsKJiM0MzsJCQlkdXR5ID0gZHV0eXNbaV07CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CWlmIChvbiAmZ3Q7IG9mZikKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5OwomIzQzOwkqZHV0eXAgPSBkdXR5OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CXVuc2lnbmVkIHNob3J0IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBjaGFyIGR1dHk7CiYjNDM7CWJvb2wgdXNlX2N5Y2xlOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmICghKm9ucCAmYW1wOyZhbXA7ICEqb2ZmcCkgewomIzQzOwkJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlpZiAoaSAhPSBncm91cCAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9kdXR5KSB7CiYjNDM7CQkJCWR1dHkgPSBwcC0mZ3Q7bGVkX2R1dHk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYm9vbCBjaGFuZ2VfY3ljbGU7CiYjNDM7CQlib29sIGNoYW5nZV9kdXR5OwomIzQzOwomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsICZhbXA7Y3ljbGUsICZhbXA7ZHV0eSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBjeWNsZSAmbHQ7IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJY2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlICZhbXA7JmFtcDsgY3ljbGUgIT0gcHAtJmd0O2xlZF9jeWNsZTsKJiM0MzsJCWNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC0mZ3Q7bGVkX2R1dHk7CiYjNDM7CQlpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KQomIzQzOwkJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07CiYjNDM7CQkJICAgICBpJiM0MzsmIzQzOykgewomIzQzOwkJCQlpZiAoaSA9PSBncm91cCB8fCAhcHAtJmd0O2xlZHNbaV0pCiYjNDM7CQkJCQljb250aW51ZTsKJiM0MzsJCQkJaWYgKChjaGFuZ2VfY3ljbGUgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2N5Y2xlKSB8fAomIzQzOwkJCQkgICAgKGNoYW5nZV9kdXR5ICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9kdXR5KSkKJiM0MzsJCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSB2YWwgJmFtcDsgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJaWYgKHZhbCAhPSBjdHJsKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJc3dpdGNoIChkdXR5ICZndDs9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOgomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkgewomIzQzOwlkZWZhdWx0OgomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKGR1dHkgJmx0OyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlpZiAodXNlX2N5Y2xlKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTsKJiM0MzsJfQomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSB2YWwgJmFtcDsgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8CiYjNDM7CQkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpOwomIzQzOwljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTsKJiM0MzsJaWYgKHVzZV9jeWNsZSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApOwomIzQzOwllbHNlCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IHVzZV9jeWNsZTsKJiM0MzsJaWYgKHVzZV9jeWNsZSkKJiM0MzsJCXBwLSZndDtsZWRfY3ljbGUgPSBjeWNsZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IHRydWU7CiYjNDM7CXBwLSZndDtsZWRfZHV0eSA9IGR1dHk7CiYjNDM7CiYjNDM7CSpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7CiYjNDM7CSpvZmZwID0gY3ljbGUgLSAqb25wOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MzIgbWFzazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tdID0gewomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLAomIzQzOwkgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRn0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfUlgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS30sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLAomIzQzOwkgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sCiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LAomIzQzOwkJCQlpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAoIWZsYWdzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgbWFwLSZndDtmbGFncykgPT0gbWFwLSZndDtmbGFncykgewomIzQzOwkJCWZsYWdzICZhbXA7PSB+bWFwLSZndDtmbGFnczsKJiM0MzsJCQlpZiAoIWZsYWdzKQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApCiYjNDM7ewomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT0KJiM0MzsJICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkgewomIzQzOwkJKmZsYWdzcCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgJmFtcDt2YWwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpmbGFnc3AgPSAwOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKHZhbCAmYW1wOyBtYXAtJmd0O21hc2spID09IG1hcC0mZ3Q7bWFzaykKJiM0MzsJCQkqZmxhZ3NwIHw9IG1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSAwOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IG1hcC0mZ3Q7ZmxhZ3MpID09IG1hcC0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmbGFncyAmYW1wOz0gfm1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CQkJY3RybCB8PSBtYXAtJmd0O21hc2s7CiYjNDM7CQkJaWYgKCFmbGFncykKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGZsYWdzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTsKJiM0MzsJaWYgKGdyb3VwID09IDIpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJfQomIzQzOwlhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmIChncm91cCAhPSAyKSB7CiYjNDM7CQltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwKJiM0MzsJCQkJCSAgICAgbWFzaywgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKJiM0MzsJCQkJICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBicmlnaHRuZXNzKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbiwKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBkZWxheV9vbiwKJiM0MzsJCQkJICAgZGVsYXlfb2ZmKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRldmljZSAqIF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwomIzQzOwlkcCA9IGRzYV90b19wb3J0KCZhbXA7cHJpdi0mZ3Q7ZHMsIHBwLSZndDtpbmRleCk7CiYjNDM7CWlmICghZHAgfHwgIWRwLSZndDt1c2VyKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiAmYW1wO2RwLSZndDt1c2VyLSZndDtkZXY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CiYjNDM7CWlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3MpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFnc3ApOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LAomIzQzOwkJIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CiYjNDM7CWNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07CiYjNDM7CWVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7CiYjNDM7CWJvb2wgZm9yY2VfaGlnaDsKJiM0MzsJYm9vbCBmb3JjZV9sb3c7CiYjNDM7CWludCBwb2xhcml0eTsKJiM0MzsJdTMyIGdyb3VwOwomIzQzOwlib29sIG9uOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2dyb3VwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CWlmIChncm91cCAmZ3Q7PSBZVDkyMVhfTEVEX0dST1VQX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXG4mIzM0OywgZ3JvdXAsIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJaWYgKHBwLSZndDtsZWRzW2dyb3VwXSkKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwomIzQzOwlmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWhpZ2gmIzM0Oyk7CiYjNDM7CWZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChmb3JjZV9oaWdoICZhbXA7JmFtcDsgZm9yY2VfbG93KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJcG9ydCwgZ3JvdXApOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJbGVkLSZndDtwb3J0ID0gcHA7CiYjNDM7CWxlZC0mZ3Q7Z3JvdXAgPSBncm91cDsKJiM0MzsKJiM0MzsJc3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBsZWQ7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJb24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OOwomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIExFRFNfREVGU1RBVEVfS0VFUDoKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCAmYW1wO29uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlsZWRfY2RldiA9ICZhbXA7bGVkLSZndDtjZGV2OwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzcyA9IG9uOwomIzQzOwlsZWRfY2Rldi0mZ3Q7bWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZzsKJiM0MzsJbGVkX2NkZXYtJmd0O2JsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDsKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciA9ICYjMzQ7bmV0ZGV2JiMzNDs7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgJiMzNDstJXU6JTAyZDolMDJ1JiMzNDssCiYjNDM7CQkgcHJpdi0mZ3Q7ZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTsKJiM0MzsJaW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXsKJiM0MzsJCS5md25vZGUgPSBmd25vZGUsCiYjNDM7CQkuZGV2aWNlbmFtZSA9IG5hbWUsCiYjNDM7CQkuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLAomIzQzOwl9OwomIzQzOwlyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgJmFtcDtpbml0X2RhdGEpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb2xhcml0eSkgewomIzQzOwkJdTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7CiYjNDM7CiYjNDM7CQkqaW52X21hc2twIHw9IGJpdDsKJiM0MzsJCWlmIChwb2xhcml0eSAmZ3Q7IDApCiYjNDM7CQkJKmludl9jdHJscCB8PSBiaXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKQomIzQzOwkJCWRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCAmYW1wO2xlZC0mZ3Q7Y2Rldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKSB7CiYjNDM7CQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgKmludl9tYXNrcCwKJiM0MzsJCSAgICAgICB1MzIgKmludl9jdHJscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7CiYjNDM7CWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJaWYgKCFsZWRzX25wKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksCiYjNDM7CQkJCSAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7CiYjNDM7CQlpZiAocmVzKSB7CiYjNDM7CQkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykKJiM0MzsJCXl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAmYW1wO3ByaXYtJmd0O2RzOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwl1MzIgaW52X2N0cmwgPSAwOwomIzQzOwl1MzIgaW52X21hc2sgPSAwOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHsKJiM0MzsJCWludCBwb3J0ID0gZHAtJmd0O2luZGV4OwomIzQzOwomIzQzOwkJaWYgKCFkcC0mZ3Q7ZG4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQsICZhbXA7aW52X21hc2ssICZhbXA7aW52X2N0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHMgZm9yIHBvcnQgJWQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJIHBvcnQsIHJlcyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJLyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy4KJiM0MzsJICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy4KJiM0MzsJICovCiYjNDM7CWlmIChpbnZfbWFzaykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLAomIzQzOwkJCQkJICAgICBpbnZfY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCWdvdG8gZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwljdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHwKJiM0MzsJICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpOwomIzQzOwomIzQzO2VuZDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKSB7CiYjNDM7CQl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOCQkJQklUKDIxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00JR0VOTUFTSygyMCwgMTkpCS8qIGN5Y2xlID0gNTEyICogeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00JCUdFTk1BU0soMTYsIDEzKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTQkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCkJCSgweGQwMDA0ICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTcsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTCUJJVCgxNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESQlCSVQoMTYpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KQkJKDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00JCUdFTk1BU0soMzEsIDMwKQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTQkJR0VOTUFTSygyOSwgMjgpCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUAlCSVQoMjcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00JCUdFTk1BU0soMjYsIDI1KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzMJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KQkJKDB4ZDAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycCkJCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE5LCA0ICogKGdycCkgJiM0MzsgMTgpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE3LCA0ICogKGdycCkgJiM0MzsgMTYpCS8qIGN5Y2xlID0gNTEyICZsdDsmbHQ7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE2KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LCQlCSVQoMTUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOSwlCSVQoMTQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LCUJJVCgxMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTAlCSVQoMTIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYJQklUKDExKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LCQlCSVQoMTApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTksJCUJJVCg5KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYCQlCSVQoOCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWAkJQklUKDcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0JCUJJVCg2KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0JCUJJVCg1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTQkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LCUJJVCgzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LCUJJVCgyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTksJQklUKDEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkwJCTB4ZDAxMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOSwkJR0VOTUFTSygyNSwgMjQpCS8qIGRlbGF5PyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPVwkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00JCUdFTk1BU0soMSwgMCkJLyogI2dycCAtIDEgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpCSgweGQwMTA0ICYjNDM7IDggKiAoMiAtIChncnApKSAmIzQzOyA0ICogKChwb3J0KSAvIDUpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFMJCTB4ZDAxYzQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVgkJMHhkMDFjOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpCUJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydCkJKDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyA1LCA2ICogKGdycCkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyAxLCA2ICogKGdycCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkpKQomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU4JNjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGCTUxMgomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVgJMjA0OAomIzQzOwomIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTQkJMjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKQkoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGdyb3VwOwomIzQzOwomIzQzOwlib29sIHVzZV9jeWNsZToxOwomIzQzOwlib29sIHVzZV9kdXR5OjE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzOwomIzQzOyNlbHNlCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwpAQCAtMCwwICYjNDM7MSwxNTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7d3JpdGUocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAomIzQzOwkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKJiM0MzsJCQkJWVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsCiYjNDM7CQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqdmFscCA9IHZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwl1MzIgdjsKJiM0MzsJdTMyIHU7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwl1ID0gdjsKJiM0MzsJdSAmYW1wOz0gfm1hc2s7CiYjNDM7CXUgfD0gdmFsOwomIzQzOwlpZiAodSA9PSB2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCiYjNDM7CQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksICZhbXA7dmFsc1tpXSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQl1IHw9IHZhbHNbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaApAQCAtMCwwICYjNDM7MSw4OCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX1NNSV9ICiYjNDM7I2RlZmluZSBfWVRfU01JX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywKJiM0MzsJCQkgICB1MzIgdmFsKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLgomIzQzOyAqCiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwomIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS4KJiM0MzsgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CSpsbyAmYW1wOz0gfmxvd2VyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7CiYjNDM7CSpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBMRUQgc3VwcG9ydCB0byB0aGUgTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIuIFRoZSBjb2RlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYC4gVGhlIHBhdGNoIHJlbmFtZXMgYSBmaWxlIGFuZCBpbnRyb2R1Y2VzIGBsZWRzLmNgIGFuZCBgc21pLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHRoaXMgaXMgZm9yIGEgKnNwZWNpZmljKiBzd2l0Y2ggY2hpcCwgdGhlIFlUOTIxNS4gVGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/CgpUeXBpY2FsbHksIHRoZXNlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIGRldmljZXMsIGhvb2tlZCB1cCB0aHJvdWdoIE1ESU8gb3IgU1BJLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgYXJlbiYjMzk7dCBlYXNpbHkgZW11bGF0ZWQgb3IgZnV6emVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi52ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2guLi4mIzM0Oy4gVGhpcyBzZWVtcyBsaWtlIGl0ICpjb3VsZCogZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnksIGFzIHRoaXMgaXMgYSBEU0Egc3dpdGNoIGNoaXAgY29tbXVuaWNhdGluZyB2aWEgTURJTy4KCkJ1dCwgSSBrbm93IE1ESU8gZGV2aWNlcyAqY2FuKiBiZSBmdXp6ZWQsIHRoZW9yZXRpY2FsbHkuIElzIGl0IHBvc3NpYmxlIHdpdGggKnRoaXMqIHBhcnRpY3VsYXIgY2hpcD8gVXN1YWxseSwgTURJTyBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgZHVtbXkgTURJTyBidXMgc2V0dXAuIFdhaXQsIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyICpoYXMqIHNvbWUgTURJTy9QSFkgZnV6emluZyBjYXBhYmlsaXRpZXMsIHRob3VnaCBtYXliZSBpdCYjMzk7cyB2ZXJ5IGxpbWl0ZWQgb3IgZXZlbiBub24tZXhpc3RlbnQuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cC4gVGhlIGluc3RydWN0aW9ucyBkb24mIzM5O3QgKmV4cGxpY2l0bHkqIGV4Y2x1ZGUgTURJTy9JMkMvU1BJIGRldmljZXMgdW5sZXNzIHRoZXkmIzM5O3JlIHRpZWQgdG8gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2guLi4mIzM0Oy4gQWxzbywgSSByZW1lbWJlciB0aGUgb3RoZXIgbGluZTogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uJiMzNDsuIENhbiAqdGhpcyogRFNBIHN3aXRjaCBiZSByZWFjaGVkIGluIFFFTVU/IFRoZXNlIHVzdWFsbHkgcmVxdWlyZSBEZXZpY2UgVHJlZSBub2RlcyB0byBiaW5kLiBDYW4gU3l6a2FsbGVyIGluamVjdCB0aG9zZSBub2RlcyB0aHJvdWdoIGBzeXpfZGV2bGlua2Agb3Igc2ltaWxhcj8gTm8sIHVzdWFsbHkgbm90LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgZGV2aWNlIHRyZWVzLCB0aG91Z2ggaXQgY2FuIGxvYWQgc29tZSBvdmVybGF5cyBpZiBjb25maWd1cmVkLgoKVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlZ2lzdGVycyBpdHNlbGYgYXMgYW4gTURJTyBkZXZpY2UuIEkgaGF2ZSB0byBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY2AgdG8gc2VlIGhvdyBpdCByZWdpc3RlcnMuIEFoLCBoZXJlIGl0IGlzOgoKYGBgYwpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHsKCS5tZGlvZHJ2LmRyaXZlciA9IHsKCQkubmFtZSA9IFlUOTIxWF9OQU1FLAoJCS5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCwKCX0sCgkucHJvYmUgID0geXQ5MjF4X21kaW9fcHJvYmUsCgkucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLAp9OwpgYGAKClNvIGl0JiMzOTtzIGFuIE1ESU8gZHJpdmVyLiBDYW4gYW4gTURJTyBkcml2ZXIgbGlrZSB0aGlzIGFjdHVhbGx5IGJlIHByb2JlZCBpbiBRRU1VICp3aXRob3V0KiBzcGVjaWZpYyBoYXJkd2FyZT8gVHlwaWNhbGx5LCBNRElPIGRldmljZXMgYXJlIHByb2JlZCB3aGVuIHRoZSBNRElPIGJ1cyBzY2FucyB0aGVtIG9yIHZpYSB0aGUgZGV2aWNlIHRyZWUuIFdpdGhvdXQgZWl0aGVyLCB0aGUgcHJvYmUgd29uJiMzOTt0IGJlIGNhbGxlZC4gQ291bGQgU3l6a2FsbGVyIHRyaWdnZXIgYSBwcm9iZSBzb21laG93LCBtYXliZSB0aHJvdWdoIG5ldGxpbmsgb3Igc3lzZnM/IFByb2JhYmx5IG5vdC4KCkJ1dCB3YWl0ISBUaGlzIHBhdGNoICphZGRzKiBMRUQgc3VwcG9ydCB0byB0aGUgRFNBIHN3aXRjaCEgTEVEcyBhcmUgZXhwb3NlZCB2aWEgdGhlIExFRCBzdWJzeXN0ZW0gYW5kIGAvc3lzL2NsYXNzL2xlZHMvYC4gSWYgdGhlIGRldmljZSAqaXMqIHByb2JlZCwgSSBzaG91bGQgYmUgYWJsZSB0byBjb250cm9sIHRoZSBMRURzIHZpYSBzeXNmcy4gKkJ1dCBjYW4gaXQgYmUgcHJvYmVkIGluIHRoZSBmaXJzdCBwbGFjZT8qCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBTeXprYWxsZXIgc3VwcG9ydCBmb3IgTURJTyBvciBEU0EuIEkmIzM5O2xsIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgeXQ5MjF4YCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIGRyaXZlciwgb3IgaWYgaXQmIzM5O3MgcHVyZWx5IGhhcmR3YXJlLWRlcGVuZGVudC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gYXNzZXNzaW5nIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjYxOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuTUFJTlRBSU5FUlM9MTgyNDA9UzpcdE1haW50YWluZWRcbk1BSU5UQUlORVJTOjE4MjQxOkY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuTUFJTlRBSU5FUlM6MTgyNDM6RjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG5NQUlOVEFJTkVSUy0xODI0NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6Mzp5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NDp5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZTo1Onl0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI6c3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMy1cdHVuc2lnbmVkIGludCBzaXplO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE6LyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWJcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyLSAqXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDYtICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OC1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk4LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTk6c3RydWN0IHl0OTIxeF9pbmZvIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwMC1cdGNvbnN0IGNoYXIgKm5hbWU7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA2LVx0dTE2IGludGVybmFsX21hc2s7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDc6XHQvKiBUT0RPOiBzZWUgY29tbWVudHMgaW4geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzKCkgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwOC1cdHUxNiBleHRlcm5hbF9tYXNrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE2NTpzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2Ni1cdHN0cnVjdCBtaWlfYnVzICpidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTgxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTgyOiNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTgzLSNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTE5MD1zdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE5NTpzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5Ni17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTc6XHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5OC1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyMzY6c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fd3JpdGUodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzNy17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyMzg6XHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzOS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzI6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfcmVnX29wcyB5dDkyMXhfcmVnX29wc19tZGlvID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjczOlx0LnJlYWQgPSB5dDkyMXhfcmVnX21kaW9fcmVhZCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3NDpcdC53cml0ZSA9IHl0OTIxeF9yZWdfbWRpb193cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3NS19O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3OTpzdGF0aWMgaW50IHl0OTIxeF9pbnRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjgyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjgzOlx0cmV0dXJuIHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJULFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg0LVx0XHRcdCAgICAgICBcdTAwMjZ2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTI4Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyODg6eXQ5MjF4X2ludGlmX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yOTUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyOTY6XHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI5Ny1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzAzLVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMwNDpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA1LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwNi1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMwNzpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDgtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMxMTpcdHJlcyA9IHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEyLVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMy1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMxNDpcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfSU5UX01CVVNfRElOLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzE1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zMjY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI3Onl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzI4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMzM6XHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMzNC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQwLVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfV1JJVEU7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDE6XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0Mi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDQ6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9JTlRfTUJVU19ET1VULCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ1LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0Ni1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM0NzpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDgtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1MC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1MTpcdHJldHVybiB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Mi19XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTQ6c3RhdGljIGludCB5dDkyMXhfbWJ1c19pbnRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTUte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzU2Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzU3LVx0dTE2IHZhbDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNjMtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzY0Olx0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgcmVnLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzY1LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM3Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNzM6eXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNzQte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mzc1Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzc2LVx0aW50IHJlcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zODEtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzgyOlx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIHJlZywgZGF0YSk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zODMtXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9Mzg4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM4OTp5dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDEtXHRtYnVzLVx1MDAzZXByaXYgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDAyOlx0bWJ1cy1cdTAwM2VyZWFkID0geXQ5MjF4X21idXNfaW50X3JlYWQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDM6XHRtYnVzLVx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfaW50X3dyaXRlO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA0LVx0bWJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE2OnN0YXRpYyBpbnQgeXQ5MjF4X2V4dGlmX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTktXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjA6XHRyZXR1cm4geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjEtXHRcdFx0ICAgICAgIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDI0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNTp5dDkyMXhfZXh0aWZfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQzMi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQzMzpcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDM0LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDAtXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9UWVBFX0MyMiB8IFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0MTpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQyLVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0My1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0NDpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDUtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0ODpcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ5LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MC1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1MTpcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfRVhUX01CVVNfRElOLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUyLVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDY0Onl0OTIxeF9leHRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjktXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzA6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3LVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfVFlQRV9DMjIgfCBZVDkyMVhfTUJVU19DVFJMX1dSSVRFO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc4Olx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfRVhUX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzktXHRpZiAocmVzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgwLVx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDgxOlx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX01CVVNfRE9VVCwgdmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4Mi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0ODQ6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0ODg6XHRyZXR1cm4geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODktfVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDkwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDkxOnN0YXRpYyBpbnQgeXQ5MjF4X21idXNfZXh0X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDkyLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5MzpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5NC1cdHUxNiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDk3LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5ODpcdHJlcyA9IHl0OTIxeF9leHRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5OS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MDY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTA3Onl0OTIxeF9tYnVzX2V4dF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTA4LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUwOTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxMC1cdGludCByZXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTEyLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUxMzpcdHJlcyA9IHl0OTIxeF9leHRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTE0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUxOT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MjA6eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUyMS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTMzLVx0LyogVE9ETzogYzQ1PyAqL1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM0Olx0bWJ1cy1cdTAwM2VyZWFkID0geXQ5MjF4X21idXNfZXh0X3JlYWQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MzU6XHRtYnVzLVx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfZXh0X3dyaXRlO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM2LVx0bWJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTQ3LS8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU0ODpzdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTQ5LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1MDpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTUxLVx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTUyOlx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1My1cdGludCByZXMgPSAwO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU0LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTU1Olx0LyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCYjMzk7cyB2YWluXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTYtXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTYyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTYzOlx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NjQ6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTY1LVx0XHR1MzIgcmVnID0gWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgJiM0MzsgZGVzYy1cdTAwM2VvZmZzZXQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTY5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTcwOlx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2YWwwKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU3MS1cdFx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01ODItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1ODM6XHRcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCBcdTAwMjZ2YWwxKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU4NC1cdFx0XHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwNzpzdGF0aWMgdm9pZCB5dDkyMXhfcG9sbF9taWIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjA4LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwOTpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9wb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjEwLVx0XHRcdFx0XHRcdCAgICBtaWJfcmVhZC53b3JrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9ICh2b2lkICopKHBwIC0gcHAtXHUwMDNlaW5kZXgpIC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMjpcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjEzLVx0dW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxNy1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTg6XHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTktXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjI2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2Mjc6eXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjI4LVx0XHQgICAgICAgdWludDhfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MzM6XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYzNDpcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjQxPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDI6eXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY0My17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDQ6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDU6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NjpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDctXHRzaXplX3Qgajtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDktXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjUwOlx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjUxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1My1cdGogPSAwO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjU0Olx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTU6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjU2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY2NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY2NTpzdGF0aWMgaW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NjYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY3MjpcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjczOlx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz02ODI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4Mzp5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODQtXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODUte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg2Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg3Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODg6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjkwLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY5MTpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY5Mi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz03MTg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcxOTp5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzIwLVx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzIxLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyMjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyMzpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzI0Olx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyNi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3Mjc6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjgtXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzM0LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgeXQ5MjF4X3Jtb25fcmFuZ2VzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MzYtXHR7IDAsIDY0IH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzQ2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NDc6eXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzQ4LVx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTAte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUxOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUyOlx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTM6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU0LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU1LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1NjpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1Ny1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1OTpcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NjAtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzgzPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODQ6eXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzg1LVx0XHQgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc4Ni17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODc6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODg6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4OTpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03OTAtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODE5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4MjA6eXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyMS1cdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjIte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODIzOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI0Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4MjU6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI2LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI3LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyODpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyOS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04MzU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODM2Onl0OTIxeF9zZXRfZWVlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg0OS1cdGlmICghIW5ld19tYXNrICE9ICEhcHJpdi1cdTAwM2VlZWVfcG9ydHNfbWFzaykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODUwOlx0XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfRlVOQyxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1MS1cdFx0XHRcdFx0ICAgICBZVDkyMVhfUE9OX1NUUkFQX0VFRSwgISFuZXdfbWFzayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODUzLVx0XHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NTQ6XHRcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX1BPTl9TVFJBUF9WQUwsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTUtXHRcdFx0XHRcdCAgICAgWVQ5MjFYX1BPTl9TVFJBUF9FRUUsICEhbmV3X21hc2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2Mi1cdC8qIEVuYWJsZSAvIGRpc2FibGUgcG9ydCBFRUUgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg2MzpcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRV9DVFJMLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY0LVx0XHRcdFx0ICAgICBZVDkyMVhfRUVFX0NUUkxfRU5uKHBvcnQpLCBlbmFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2Ni1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg2NzpcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRW5fVkFMKHBvcnQpLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY4LVx0XHRcdFx0ICAgICBZVDkyMVhfRUVFX1ZBTF9EQVRBLCBlbmFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTg3NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NzY6eXQ5MjF4X2RzYV9zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODc3LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg3ODpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg3OS1cdGludCByZXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgxLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4MjpcdHJlcyA9IHl0OTIxeF9zZXRfZWVlKHByaXYsIHBvcnQsIGUpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4ODpzdGF0aWMgaW50IHl0OTIxeF9tdHVfZmV0Y2goc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODk1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg5Njp5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbmV3X210dSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg5Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTAyOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAzLVx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTEtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTEyOlx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTUFDbl9GUkFNRShwb3J0KSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxMy1cdFx0XHRcdCAgICAgWVQ5MjFYX01BQ19GUkFNRV9TSVpFX00sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTE5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTIwOnN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9wb3J0X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkyMS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTUzPXN0YXRpYyB1NjQgdG9rZW4yYnVyc3QodTMyIHRva2VuLCBpbnQgdW5pdCwgaW50IEMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTU3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTU4OnN0cnVjdCB5dDkyMXhfbWFya2VyIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1OS1cdHUzMiBjaXI7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTY5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MDp5dDkyMXhfbWFya2VyX3RmbShzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyLCB1NjQgcmF0ZSwgdTY0IGJ1cnN0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTcxLVx0XHQgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNsb3RfbnMsIHUzMiBjaXJfbWF4LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTcyOlx0XHQgIHUzMiBjYnNfbWF4LCBpbnQgdW5pdF9tYXgsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzMtXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3Ny1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3ODpcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzktXHR1NjQgYnVyc3RfZXN0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk5OS1cdGVsc2VcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwMDA6XHRcdGJ1cnN0X3N1ZyAmIzQzOz0gRVRIX0hMRU4gJiM0MzsgeXQ5MjF4X210dV9mZXRjaChwcml2LCBwb3J0KSAmIzQzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTAwMS1cdFx0XHQgICAgIEVUSF9GQ1NfTEVOO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTEwNTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA2MDp5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2Uoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcixcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjEtXHRcdFx0IGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNjI6XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDczLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA3NDpcdHJldHVybiB5dDkyMXhfbWFya2VyX3RmbShtYXJrZXIsIHJhdGUsIGJ1cnN0LCBmbGFncyxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNzUtXHRcdFx0XHQgcHJpdi1cdTAwM2VtZXRlcl9zbG90X25zLCBZVDkyMVhfTUVURVJfQ0lSX01BWCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDgwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODE6eXQ5MjF4X21hcmtlcl90Zm1fc2hhcGUoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODI6XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4My1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg0LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODU6XHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg2LVx0XHRcdFx0IHByaXYtXHUwMDNlcG9ydF9zaGFwZV9zbG90X25zLCBZVDkyMVhfU0hBUEVfQ0lSX01BWCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDkxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwOTI6eXQ5MjF4X3BvbGljZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDkzLVx0XHQgICAgICAgY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTEyNz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI4Onl0OTIxeF9tZXRlcl9jb25maWcoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI5Olx0XHQgICAgY29uc3Qgc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExMzAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNDctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTQ4Olx0cmV0dXJuIHl0OTIxeF9yZWc5Nl93cml0ZShwcml2LCBZVDkyMVhfTUVURVJuX0NUUkwoaWQpLCBjdHJscyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTQ5LX1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTUxOnN0YXRpYyB2b2lkIHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1Mi17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTUzOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1NC1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU3LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNTg6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9QT1JUbl9NRVRFUihwb3J0KSwgMCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU5LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExNjY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE2Nzp5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNjgtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTcwLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzE6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcyOlx0c3RydWN0IHl0OTIxeF9tYXJrZXIgbWFya2VyO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3My1cdHUzMiBjdHJsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTc2Olx0cmVzID0geXQ5MjF4X3BvbGljZV92YWxpZGF0ZShwb2xpY2UsIE5VTEwsIE5VTEwsIGV4dGFjayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc3LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4MDpcdHJlcyA9IHl0OTIxeF9tYXJrZXJfdGZtX3BvbGljZShcdTAwMjZtYXJrZXIsIHBvbGljZSwgMCwgcHJpdiwgcG9ydCwgZXh0YWNrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODEtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODQtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4NTpcdHJlcyA9IHl0OTIxeF9tZXRlcl9jb25maWcocHJpdiwgcG9ydCAmIzQzOyBZVDkyMVhfTUVURVJfTlVNLCBcdTAwMjZtYXJrZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4Ni1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4OS1cdGN0cmwgPSBZVDkyMVhfUE9SVF9NRVRFUl9JRChwb3J0KSB8IFlUOTIxWF9QT1JUX01FVEVSX0VOO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE5MDpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX01FVEVSKHBvcnQpLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExOTEtZW5kOlxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTAxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgRFNBIERyaXZlciBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8mIzM0OyBUaGUgY29kZSByZWdpc3RlcnMgYW4gTURJTyBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYC4gU3BlY2lmaWNhbGx5LCBgeXQ5MjF4X21kaW9fZHJpdmVyYCBpcyByZWdpc3RlcmVkLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgc3l6a2FsbGVyJiMzOTtzIGxpbWl0YXRpb25zLiBJdCBkb2VzbiYjMzk7dCBoYXZlIGEgYnVpbHQtaW4gbWV0aG9kIHRvIGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzLCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlLCBvciBtYXliZSBzb21lIERldmljZSBUcmVlIG1hZ2ljLiBXaGlsZSBzeXprYWxsZXIgc3VwcG9ydHMgdGhpbmdzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBldGMuLCBkb2VzIGl0IHN1cHBvcnQgTURJTyBkZXZpY2VzPyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9uIGZvciBEU0Egb3IgTURJTyBkaXJlY3RseS4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCBhbmQgc2VhcmNoIGluIGBzeXMvbGludXgvYCBmb3IgYHl0OTIxeGAsIG9yIGNoZWNrIHRoZSBzeXprYWxsZXIgY29uZmlncyBmb3IgYENPTkZJR19ORVRfRFNBX1lUOTIxWGAuCgpCdXQsIHdhaXQgYSBtaW51dGUsIHRoZSBpbnN0cnVjdGlvbnMgaGVyZSBzcGVjaWZ5IHRoYXQgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBhIERTQSBzd2l0Y2ggZHJpdmVyIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gRFNBIGRyaXZlcnMgYXJlIG9mdGVuIHBsYXRmb3JtLXNwZWNpZmljIG9yIGRlcGVuZCBvbiBNRElPL0kyQy9TUEkgaW50ZXJmYWNlcy4gUUVNVSBkZWZpbml0ZWx5IGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIE1vdG9yY29tbSBZVDkyMTUgaGFyZHdhcmUuIEJ1dCwgY2FuIEkgaW5zdGFudGlhdGUgYSBEU0Egc3dpdGNoIHZpYSBhIGR1bW15IE1ESU8gYnVzPyBUaGVyZSYjMzk7cyBgZHNhX2xvb3BgLCB3aGljaCBpcyBhIGR1bW15IERTQSBzd2l0Y2gsIGJ1dCBgeXQ5MjF4YCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4KCkhvdyBjYW4gSSBwcm9iZSBgeXQ5MjF4YCBpbiBRRU1VPyBObyB3YXkuIEl0IHJlcXVpcmVzIGFuIE1ESU8gYnVzIGFuZCBhIERldmljZSBUcmVlIG5vZGUgbWF0Y2hpbmcgYG1vdG9yY29tbSx5dDkyMXhgLCBhbmQgYXMgZmFyIGFzIEkga25vdywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGluamVjdCBhcmJpdHJhcnkgRGV2aWNlIFRyZWUgbm9kZXMuIFNvLCBubyBsdWNrIHRoZXJlLgoKSGFuZyBvbi4uLiB0aGUgcGF0Y2ggYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gVGhpcyBpcyBhICpzaW11bGF0ZWQqIHBhdGNoLiBPa2F5LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgcGF0Y2ggYWdhaW4uIEl0IGFkZHMgTEVEIHN1cHBvcnQgdG8gdGhlIGB5dDkyMXhgIGRyaXZlci4gSG1tLCBpcyBpdCBwb3NzaWJsZSB0aGF0IHN5emthbGxlciAqY2FuKiByZWFjaCB0aGlzPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgeXQ5MjF4YCBpcyBhIHJlYWwgZHJpdmVyIGluIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gZXhlY3V0ZSB0aGUgYWRkZWQgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCBjb2RlLgoKSWYgSSBjYW4mIzM5O3QgcmVhY2ggdGhpcyBjb2RlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgc3dpdGNoIGNoaXAgdGhhdCYjMzk7cyAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLCBpdCYjMzk7cyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgb25lIG1vcmUgdGltZSBpZiB0aGVyZSYjMzk7cyAqYW55KiBRRU1VIGVtdWxhdGlvbiBmb3IgYHl0OTIxeGAuLi4ganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIE5vcGUuIFZlcmRpY3Q6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdG9yY29tbSx5dDkyMXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuTUFJTlRBSU5FUlM9MTgyNDA9UzpcdE1haW50YWluZWRcbk1BSU5UQUlORVJTOjE4MjQxOkY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NjI4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBgbW90b3Jjb21tLHl0OTIxeGAgRHJpdmVyKioKCk9rYXksIHNvIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGlzIGBtb3RvcmNvbW0seXQ5MjF4YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBkcml2ZXI/IFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gUUVNVSBhbmQgbGFjayB2aXJ0dWFsIGNvdW50ZXJwYXJ0cywgY2FuJiMzOTt0IGJlIGZ1enplZCBieSBzeXprYWxsZXIgYmVjYXVzZSB0aGV5IG5lZWQgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTttIHRoaW5raW5nLCBjb3VsZCBzeXprYWxsZXIgcGVyaGFwcyBwcm9iZSBNRElPIGRyaXZlcnMgYnkgcmVnaXN0ZXJpbmcgYSBkdW1teSBidXMgYW5kIGRldmljZT8gVGhhdCYjMzk7cyBhIHBvc3NpYmlsaXR5LCBidXQgSSBrbm93IHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBNRElPIGZ1enplci4KCkxldCBtZSBjaGVjay4gSSBuZWVkIHRvIGZpbmQgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uLiBJIGNhbiYjMzk7dCByZWFkIHRoZSBkZXNjcmlwdGlvbnMgZGlyZWN0bHksIGJ1dCBJIGNhbiYjMzk7dCB1c2UgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBtZGlvYCBpbiBgc3lzL2xpbnV4L2AgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IG5vcm1hbGx5IGZ1enogYXJiaXRyYXJ5IE1ESU8gaGFyZHdhcmUgZHJpdmVycyBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGRldmljZSB0cmVlIG5vZGVzIGZvciBiaW5kaW5nLiBXaGF0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgSTJDIG9yIFNQST8gU2FtZSBwcm9ibGVtOiBkZXZpY2UgdHJlZSBvciBib2FyZCBpbmZvIGlzIHJlcXVpcmVkLiBBbmQgd2hhdCBhYm91dCBQQ0k/IFBDSSBkcml2ZXJzICpjYW4qIGJlIHByb2JlZCBpZiBRRU1VIGVtdWxhdGVzIHRoZSBQQ0kgZGV2aWNlLCBidXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGB5dDkyMXhgLgoKV2FpdCwgSSBqdXN0IHJlYWxpemVkLCBgeXQ5MjF4YCAqaXMqIGFuIE1ESU8gZHJpdmVyLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHsKCS5tZGlvZHJ2LmRyaXZlciA9IHsKCQkubmFtZSA9IFlUOTIxWF9OQU1FLAoJCS5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCwKCX0sCgkucHJvYmUgID0geXQ5MjF4X21kaW9fcHJvYmUsCgkucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLAp9OwpgYGAKClRoaXMgY29uZmlybXMgaXQuIFNpbmNlIGl0JiMzOTtzIGFuIE1ESU8gZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBzd2l0Y2gsIGFuZCB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgTW90b3Jjb21tIFlUOTIxNSwgdGhlIGBwcm9iZWAgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byBpbnN0YW50aWF0ZSBhbiBNRElPIGRldmljZSBmcm9tIHVzZXJzcGFjZS4gYFNJT0NTTUlJUkVHYCBleGlzdHMsIGJ1dCB0aGF0JiMzOTtzIGZvciByZWFkaW5nL3dyaXRpbmcgcmVnaXN0ZXJzLCBub3QgY3JlYXRpbmcgZGV2aWNlcy4gVW5saWtlIEkyQywgTURJTyBkb2VzbiYjMzk7dCBoYXZlIGEgYC9zeXMvYnVzL21kaW9fYnVzL2RldmljZXMvbmV3X2RldmljZWAgZm9yIGNyZWF0aW5nIGRldmljZXMuIFdhaXQsIGRvZXMgTURJTyBoYXZlIHNvbWV0aGluZyBzaW1pbGFyPyBMZXQgbWUgY2hlY2sgaWYgdGhlIE1ESU8gYnVzIGhhcyBgbmV3X2RldmljZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXdfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgZm9yIE1ESU8gQnVzIERyaXZlciBDb25maWd1cmF0aW9uKioKCkhtbSwgbm8gc2lnbiBvZiBgbmV3X2RldmljZWAgYmVpbmcgZGVmaW5lZCBvciB1c2VkIGRpcmVjdGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aGVyZS4gSXQgc3VnZ2VzdHMgdGhlIE1ESU8gYnVzIGl0c2VsZiwgdGhlIGZ1bmRhbWVudGFsIGluZnJhc3RydWN0dXJlIGZvciBhY2Nlc3NpbmcgUEhZcywgbWlnaHQgYmUgaGFuZGxpbmcgdGhlIGRldmljZSBjcmVhdGlvbi4gR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIE1ESU8gYnVzIGRyaXZlciBpbXBsZW1lbnRhdGlvbiwgYW5kIHBvdGVudGlhbGx5LCB0aGUgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgcmVzcG9uc2libGUgZm9yIGF0dGFjaGluZyBuZXcgUEhZIGRldmljZXMgdG8gdGhlIGJ1cy4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBgbmV3X2RldmljZWAgbG9naWMsIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgd2lsbCByZXNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5mdXp6YWJsZSBEcml2ZXI6IFlUOTIxeCoqCgpPa2F5LCBzbyBpdCYjMzk7cyBjbGVhcjogdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyB3YXkgdG8gaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlcXVpcmVkIGJ5IHRoZSBgeXQ5MjF4YCBkcml2ZXIsIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1lYW5zIEkgY2FuJiMzOTt0IGV2ZW4gKmJlZ2luKiB0byBwcm9iZSB0aGlzIGRyaXZlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXaXRob3V0IGRlZGljYXRlZCBoYXJkd2FyZSBvciBhIHZlcnkgc3BlY2lmaWMgUUVNVSBzZXR1cCB3aXRoIGVtdWxhdGlvbiBvZiB0aGUgTW90b3Jjb21tIFlUOTIxNSAod2hpY2ggZG9lc24mIzM5O3QgZXhpc3QpLCB0aGlzIGRyaXZlciBpcyBzaW1wbHkgdW5yZWFjaGFibGUuIFNpbmNlIGZ1enppbmcgcmVsaWVzIG9uIGVudmlyb25tZW50IHJlYWNoYWJpbGl0eSwgdGhpcyBpcyBhIGNsZWFyIHJvYWRibG9jay4KCkxldCBtZSBqdXN0IHJlZnJlc2ggdGhlIGluc3RydWN0aW9ucyBpbiBteSBtaW5kOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlIGVtdWxhdGlvbnMuJiMzNDsKClllcCwgaXQmIzM5O3MgYSBwZXJmZWN0IGZpdC4gVGhpcyBgeXQ5MjF4YCBkcml2ZXIgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBNRElPIGRyaXZlciBmb3IgYSBEU0Egc3dpdGNoIGNoaXAuIEl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBoYXJkd2FyZSBhbmQganVzdCAqY2FuJiMzOTt0KiBiZSBwcm9iZWQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gR2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKSSYjMzk7bGwganVzdCBkb3VibGUtY2hlY2sgdGhhdCBpdCBpcyBhbiBNRElPIGRyaXZlci4gSnVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBjb25maXJtZWQhIEkmIzM5O20gZ29vZCB0byBnbyB3aXRoIHRoZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3NzA9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzcyOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3My1cdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzgyOm1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4OTQKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBEcml2ZXIgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBkcml2ZXIuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IHRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgdGhpcyBkcml2ZXIsIGFuZCBiYXNlZCBvbiBteSBwcmlvciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLCB0aGUgY29tcGxleGl0aWVzIG9mIHRoZSBzeXN0ZW0gaXQgaXMgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGZ1enppbmcgYXQgdGhpcyBzdGFnZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gbWFraW5nIGEgY2FsbCBoZXJlLiBVc2luZyBgc2V0LXJlc3VsdHNgLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQmFzaWNhbGx5LCBJ4oCZbSBzYXlpbmcgdGhhdCBiYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGlzIGRyaXZlciBhbmQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncywgZnV6emluZyBpdCBpc24mIzM5O3QgbGlrZWx5IHRvIHlpZWxkIHNpZ25pZmljYW50IHJlc3VsdHMgKmF0IHRoaXMganVuY3R1cmUqLiBGdXJ0aGVyIGRvd24gdGhlIGxpbmUsIGRlcGVuZGluZyBvbiBmaW5kaW5ncywgdGhlIGRyaXZlciBtYXkgYmVjb21lIHJlbGV2YW50IHRvIGZ1enosIGJ1dCBmb3Igbm93LCBJJiMzOTtsbCBwYXNzIG9uIHRoZSBmdXp6IGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMTo1Ni44Mzg1OTc1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODEwMzU5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBNRElPIGRldmljZS4gU2luY2UgdGhlcmUgaXMgbm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgYW5kIE1ESU8gZGV2aWNlcyBjYW5ub3QgYmUgYXJiaXRyYXJpbHkgaW5zdGFudGlhdGVkIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDKSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCBpdHMgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMTo1Ni44Mzg2MDU5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTkyODAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZDNjZWM4NTY0YzFlOGIwNzkwZjFjODg1OWIxZTYwNjlkNjc2MjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDI6MzE6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGI3MmQyYmQwN2YwODgyLi5mYmFhNTkwYTNhMjJkMyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4MjM5LDcgKzE4MjM5LDcgQEAgTTpcXHREYXZpZCBZYW5nIFxcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG4tRjpcXHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcXG4rRjpcXHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xcbiBGOlxcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXFxuIFxcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1xcXCJcXG4gXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxcIlxcbitcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcXFwiXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXFxcIlxcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxcbiBcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XFxuIFxcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcXG4gXFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxcbi1cXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuLVxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4tXFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcXG4tXFx0aGVscFxcbi1cXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4tXFx0ICBjaGlwLlxcbiBlbmRtZW51XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5AQCAtMTQsMTEgKzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGI1My9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBoaXJzY2htYW5uL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGxhbnRpcS9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtaWNyb2NoaXAvXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gbW90b3Jjb21tL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG12ODhlNnh4eC9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBteGw4NjJ4eC9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBuZXRjL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXG5AQCAtMCwwICsxLDE3IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4rXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4rXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbitcXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbitcXHQgIGNoaXAuXFxuK1xcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xcbitcXHRib29sIFxcXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVxcXCJcXG4rXFx0ZGVmYXVsdCB5XFxuK1xcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcXG4rXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxcbitcXHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmUyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcXG5AQCAtMCwwICsxLDUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4reXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbkBAIC0xMyw3ICsxMyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2hzci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuQEAgLTI2LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMXEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwieXQ5MjF4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4gXFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbiBcXHR7fVxcbiB9O1xcbiBcXG4tI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuLVxcbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXFx0NDA5NVxcbiBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1xcdDEwMDAwXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1xcdDEwMDAwMFxcbi1cXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cXG4gICpcXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbiBcXHRyZXR1cm4gKGFkZHJbNF0gXFx1MDAzY1xcdTAwM2MgOCkgfCBhZGRyWzVdO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2V3cml0ZShwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4te1xcbi1cXHR1MzIgdmFsO1xcbi1cXHRpbnQgcmVzO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuLVxcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuLVxcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbi1cXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdCp2YWxwID0gdmFsO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFx0dTMyIHY7XFxuLVxcdHUzMiB1O1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnYpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0dSA9IHY7XFxuLVxcdHUgXFx1MDAyNj0gfm1hc2s7XFxuLVxcdHUgfD0gdmFsO1xcbi1cXHRpZiAodSA9PSB2KVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcXG4tfVxcbi1cXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxcbi0gKlxcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXFxuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cXG4tICovXFxuLVxcbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxcbi17XFxuLVxcdCpsbyBcXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmhpIFxcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xcbi1cXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuLVxcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXFxuLVxcdFxcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0dSB8PSB2YWxzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxcbiB7XFxuIFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbkBAIC00Nzg2LDYgKzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0aWYgKHJlcylcXG4gXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiRmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxcXG5cXFwiLCByZXMpO1xcbisjZW5kaWZcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00ODg2LDYgKzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFx0aWYgKCFwcml2KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xcbisjZW5kaWZcXG4rXFxuIFxcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaS0tIFxcdTAwM2UgMDsgKSB7XFxuIFxcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbnNpbWlsYXJpdHkgaW5kZXggOTklXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLmRlNDE0MzA1NzkzMTNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuQEAgLTg1MCw5ICs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XFxuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cXHRcXHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVxcdFxcdDhcXG4gXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cXHQzXFxuK1xcbiAvKiA4IGludGVybmFsICsgMiBleHRlcm5hbCArIDEgbWN1ICovXFxuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXFx0XFx0XFx0MTFcXG4gXFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbitcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCBcXHUwMDNjPSAocG9ydCkgXFx1MDAyNlxcdTAwMjYgKHBvcnQpIFxcdTAwM2MgOSlcXG4gXFxuQEAgLTkzOCw2ICs5NDIsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcXG4gXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbiBcXHR1NjQgcnhfZnJhbWVzO1xcbiBcXHR1NjQgdHhfZnJhbWVzO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODVjOWJiMTM5ZWFkODlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5AQCAtMCwwICsxLDY0NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bGVkcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cXHUwMDNlcG9ydClcXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVxcdTAwM2VpbmRleF0pXFxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXFx1MDAzZWRzLmRldilcXG4rXFxuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcXG4re1xcbitcXHRzd2l0Y2ggKGdyb3VwKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCpvbnAgPSAodmFsIFxcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY3RybCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgY2hhciAqZHV0eXApXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eTtcXG4rXFxuK1xcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XFxuK1xcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXFxuK1xcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRmb3IgKDsgY3ljbGUgXFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2U9IDEsIGN5Y2xlIFxcdTAwM2VcXHUwMDNlPSAxKVxcbitcXHRcXHRpZiAoY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHQqY3ljbGVwID0gY3ljbGU7XFxuK1xcbitcXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXFxuK1xcdFxcdFxcdFxcdCAgICAgKG9uIFxcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxcbitcXHRcXHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFxcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XFxuK1xcdFxcdFxcdGR1dHkgPSBkdXR5c1tpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0aWYgKG9uIFxcdTAwM2Ugb2ZmKVxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcXG4rXFx0KmR1dHlwID0gZHV0eTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZHV0eTtcXG4rXFx0Ym9vbCB1c2VfY3ljbGU7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghKm9ucCBcXHUwMDI2XFx1MDAyNiAhKm9mZnApIHtcXG4rXFx0XFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSsrKVxcbitcXHRcXHRcXHRpZiAoaSAhPSBncm91cCBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSB7XFxuK1xcdFxcdFxcdFxcdGR1dHkgPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfY3ljbGU7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2R1dHk7XFxuK1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXFx1MDAyNmN5Y2xlLCBcXHUwMDI2ZHV0eSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBjeWNsZSBcXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgY3ljbGUgIT0gcHAtXFx1MDAzZWxlZF9jeWNsZTtcXG4rXFx0XFx0Y2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcXG4rXFx0XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcXG4rXFx0XFx0XFx0ICAgICBpKyspIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGkgPT0gZ3JvdXAgfHwgIXBwLVxcdTAwM2VsZWRzW2ldKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0aWYgKChjaGFuZ2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9jeWNsZSkgfHxcXG4rXFx0XFx0XFx0XFx0ICAgIChjaGFuZ2VfZHV0eSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdGlmICh2YWwgIT0gY3RybCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdHN3aXRjaCAoZHV0eSBcXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAoZHV0eSBcXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xcbitcXHR9XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxcbitcXHRcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdHBwLVxcdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IHRydWU7XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eSA9IGR1dHk7XFxuK1xcbitcXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xcbitcXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIG1hc2s7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCh2YWwgXFx1MDAyNiBtYXAtXFx1MDAzZW1hc2spID09IG1hcC1cXHUwMDNlbWFzaylcXG4rXFx0XFx0XFx0KmZsYWdzcCB8PSBtYXAtXFx1MDAzZWZsYWdzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGN0cmwgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRjdHJsIHw9IG1hcC1cXHUwMDNlbWFzaztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcXG4rXFx0aWYgKGdyb3VwID09IDIpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdH1cXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbWFzaywgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuK1xcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZGVsYXlfb24sXFxuK1xcdFxcdFxcdFxcdCAgIGRlbGF5X29mZik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChcXHUwMDI2cHJpdi1cXHUwMDNlZHMsIHBwLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghZHAgfHwgIWRwLVxcdTAwM2V1c2VyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcbitcXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2Z3JvdXApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoZ3JvdXAgXFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXFxcblxcXCIsIGdyb3VwLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0aWYgKHBwLVxcdTAwM2VsZWRzW2dyb3VwXSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1sb3dcXFwiKTtcXG4rXFx0aWYgKGZvcmNlX2hpZ2ggXFx1MDAyNlxcdTAwMjYgZm9yY2VfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcXG4rXFxuK1xcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbGVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0bGVkLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdGxlZC1cXHUwMDNlZ3JvdXAgPSBncm91cDtcXG4rXFxuK1xcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcXHUwMDI2b24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRldmljZW5hbWUgPSBuYW1lLFxcbitcXHRcXHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxcbitcXHR9O1xcbitcXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXFx1MDAyNmluaXRfZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKHBvbGFyaXR5KSB7XFxuK1xcdFxcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xcbitcXG4rXFx0XFx0Kmludl9tYXNrcCB8PSBiaXQ7XFxuK1xcdFxcdGlmIChwb2xhcml0eSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdCppbnZfY3RybHAgfD0gYml0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXG4rXFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRpZiAobGVkKVxcbitcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgKmludl9tYXNrcCxcXG4rXFx0XFx0ICAgICAgIHUzMiAqaW52X2N0cmxwKVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuK1xcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdGlmICghbGVkc19ucClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7XFxuK1xcdFxcdGlmIChyZXMpIHtcXG4rXFx0XFx0XFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKVxcbitcXHRcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTMyIGludl9jdHJsID0gMDtcXG4rXFx0dTMyIGludl9tYXNrID0gMDtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBwb3J0LCByZXMpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxcbitcXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGludl9tYXNrKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnZfY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcXG4rXFx0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKSB7XFxuK1xcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMTo1OC4wMjk1NDk2MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzYxOTM5NzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgTURJTyBkZXZpY2UuIFNpbmNlIHRoZXJlIGlzIG5vIFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGFuZCBNRElPIGRldmljZXMgY2Fubm90IGJlIGFyYml0cmFyaWx5IGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZSAodW5saWtlIEkyQyksIHRoZSBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTlkM2NlYzg1NjRjMWU4YjA3OTBmMWM4ODU5YjFlNjA2OWQ2NzYyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDAyOjMxOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjcyZDJiZDA3ZjA4ODIuLmZiYWE1OTBhM2EyMmQzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzksNyArMTgyMzksNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbitGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1wiXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXCJcbitcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcIlxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCJcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuLVx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuLVx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0Jcbi1cdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuLVx0ICBjaGlwLlxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5AQCAtMTQsMTEgKzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4gb2JqLXlcdFx0XHRcdCs9IGI1My9cbiBvYmoteVx0XHRcdFx0Kz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0Kz0gbGFudGlxL1xuIG9iai15XHRcdFx0XHQrPSBtaWNyb2NoaXAvXG4rb2JqLXlcdFx0XHRcdCs9IG1vdG9yY29tbS9cbiBvYmoteVx0XHRcdFx0Kz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQrPSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbmV0Yy9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCArMSwxNyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuK1x0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuK1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBjaGlwLlxuK1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4rXHRib29sIFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcIlxuK1x0ZGVmYXVsdCB5XG4rXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4rXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbitcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgKzEsNSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uNTUzZWZhY2Q0ZjVlZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyArMTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ5dDkyMXguaFwiXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgKzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbitcdGlmIChyZXMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cIiwgcmVzKTtcbisjZW5kaWZcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgKzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiBcdGlmICghcHJpdilcbiBcdFx0cmV0dXJuO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuKyNlbmRpZlxuK1xuIFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDU1NTA0NjUyNjY2OTUyLi5kZTQxNDMwNTc5MzEzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC04NTAsOSArODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVx0M1xuK1xuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuK1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG4gXG5AQCAtOTM4LDYgKzk0MiwxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjg1YzliYjEzOWVhZDg5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2NDcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBtYXNrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXG4rfTtcbitcbitzdGF0aWMgYm9vbFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpZiAoIWZsYWdzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbitcdFx0XHQqZmxhZ3NwIHw9IG1hcC1cdTAwM2VmbGFncztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGZsYWdzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuK1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbitcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuK1x0Ym9vbCBmb3JjZV9oaWdoO1xuK1x0Ym9vbCBmb3JjZV9sb3c7XG4rXHRpbnQgcG9sYXJpdHk7XG4rXHR1MzIgZ3JvdXA7XG4rXHRib29sIG9uO1xuK1x0aW50IHJlcztcbitcbitcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwicmVnXCIsIFx1MDAyNmdyb3VwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cIiwgZ3JvdXAsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWhpZ2hcIik7XG4rXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCJhY3RpdmUtbG93XCIpO1xuK1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xuK1xuK1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbGVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4rXHRkZWZhdWx0OlxuK1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcdTAwMjZvbik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuK1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuK1x0fTtcbitcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAocG9sYXJpdHkpIHtcbitcdFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4rXG4rXHRcdCppbnZfbWFza3AgfD0gYml0O1xuK1x0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4rXHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKVxuK1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHR9XG4rXG4rXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdGlmIChsZWQpIHtcbitcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTMyICppbnZfbWFza3AsXG4rXHRcdCAgICAgICB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0aWYgKCFsZWRzX25wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcbitcdFx0XHRcdCAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7XG4rXHRcdGlmIChyZXMpIHtcbitcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0KyspXG4rXHRcdHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpO1xuK31cbitcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1x0dTMyIGludl9jdHJsID0gMDtcbitcdHUzMiBpbnZfbWFzayA9IDA7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbitcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcbitcdFx0aWYgKCFkcC1cdTAwM2VkbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChwcml2LCBwb3J0LCBcdTAwMjZpbnZfbWFzaywgXHUwMDI2aW52X2N0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXG5cIixcbitcdFx0XHRcdCBwb3J0LCByZXMpO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4rXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuK1x0ICovXG4rXHRpZiAoaW52X21hc2spIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuK1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIGVuZDtcbitcdH1cbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XG4rXG4rZW5kOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJlcykge1xuK1x0XHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4rXHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgKzEsMTIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTEVEU19IXG4rI2RlZmluZSBfWVRfTEVEU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTlx0XHRcdEJJVCgyMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVx0XHRHRU5NQVNLKDE2LCAxMylcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXHRcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcdEJJVCgxNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXHRcdEdFTk1BU0soMjksIDI4KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXHRcdEdFTk1BU0soMjYsIDI1KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcdFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1x0XHRCSVQoMTUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXHRCSVQoMTIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcdFx0QklUKDkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cdFx0QklUKDYpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXHRCSVQoMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcdFx0MHhkMDFjOFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApKSlcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcdDUxMlxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbitcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4rc3RydWN0IHl0OTIxeF9sZWQge1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgY2hhciBncm91cDtcbitcbitcdGJvb2wgdXNlX2N5Y2xlOjE7XG4rXHRib29sIHVzZV9kdXR5OjE7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCArMSwxNTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4rXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4rXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCp2YWxwID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4re1xuK1x0aW50IHJlcztcbitcdHUzMiB2O1xuK1x0dTMyIHU7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHR1ID0gdjtcbitcdHUgXHUwMDI2PSB+bWFzaztcbitcdHUgfD0gdmFsO1xuK1x0aWYgKHUgPT0gdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0dSB8PSB2YWxzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICsxLDg4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfU01JX0hcbisjZGVmaW5lIF9ZVF9TTUlfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4rXHRcdFx0ICAgdTMyIHZhbCk7XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuK31cbitcbisvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4rICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuKyAqXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuKyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbisgKi9cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbit7XG4rXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbitcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbitcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuK1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4rfVxuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzE6NTguMDI5NTUxMzk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNTQxMjgxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQncyBhZGRpbmcgTEVEIHN1cHBvcnQgdG8gdGhlIE1vdG9yY29tbSBZVDkyMTUgRXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyLiBUaGUgY29kZSBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AuIFRoZSBwYXRjaCByZW5hbWVzIGEgZmlsZSBhbmQgaW50cm9kdWNlcyBgbGVkcy5jYCBhbmQgYHNtaS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB0aGlzIGlzIGZvciBhICpzcGVjaWZpYyogc3dpdGNoIGNoaXAsIHRoZSBZVDkyMTUuIFRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBkcml2ZXIgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VP1xuXG5UeXBpY2FsbHksIHRoZXNlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIGRldmljZXMsIGhvb2tlZCB1cCB0aHJvdWdoIE1ESU8gb3IgU1BJLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgYXJlbid0IGVhc2lseSBlbXVsYXRlZCBvciBmdXp6ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnMsIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLnZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC4uLlwiLiBUaGlzIHNlZW1zIGxpa2UgaXQgKmNvdWxkKiBmYWxsIGludG8gdGhhdCBjYXRlZ29yeSwgYXMgdGhpcyBpcyBhIERTQSBzd2l0Y2ggY2hpcCBjb21tdW5pY2F0aW5nIHZpYSBNRElPLlxuXG5CdXQsIEkga25vdyBNRElPIGRldmljZXMgKmNhbiogYmUgZnV6emVkLCB0aGVvcmV0aWNhbGx5LiBJcyBpdCBwb3NzaWJsZSB3aXRoICp0aGlzKiBwYXJ0aWN1bGFyIGNoaXA/IFVzdWFsbHksIE1ESU8gZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkLCB1bmxlc3MgdGhlcmUncyBzb21lIGtpbmQgb2YgZHVtbXkgTURJTyBidXMgc2V0dXAuIFdhaXQsIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyICpoYXMqIHNvbWUgTURJTy9QSFkgZnV6emluZyBjYXBhYmlsaXRpZXMsIHRob3VnaCBtYXliZSBpdCdzIHZlcnkgbGltaXRlZCBvciBldmVuIG5vbi1leGlzdGVudC5cblxuT2theSwgbGV0J3MgYmFjayB1cC4gVGhlIGluc3RydWN0aW9ucyBkb24ndCAqZXhwbGljaXRseSogZXhjbHVkZSBNRElPL0kyQy9TUEkgZGV2aWNlcyB1bmxlc3MgdGhleSdyZSB0aWVkIHRvIFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLi4uXCIuIEFsc28sIEkgcmVtZW1iZXIgdGhlIG90aGVyIGxpbmU6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiLiBDYW4gKnRoaXMqIERTQSBzd2l0Y2ggYmUgcmVhY2hlZCBpbiBRRU1VPyBUaGVzZSB1c3VhbGx5IHJlcXVpcmUgRGV2aWNlIFRyZWUgbm9kZXMgdG8gYmluZC4gQ2FuIFN5emthbGxlciBpbmplY3QgdGhvc2Ugbm9kZXMgdGhyb3VnaCBgc3l6X2RldmxpbmtgIG9yIHNpbWlsYXI/IE5vLCB1c3VhbGx5IG5vdC4gU3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgZGV2aWNlIHRyZWVzLCB0aG91Z2ggaXQgY2FuIGxvYWQgc29tZSBvdmVybGF5cyBpZiBjb25maWd1cmVkLlxuXG5UaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVnaXN0ZXJzIGl0c2VsZiBhcyBhbiBNRElPIGRldmljZS4gSSBoYXZlIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCB0byBzZWUgaG93IGl0IHJlZ2lzdGVycy4gQWgsIGhlcmUgaXQgaXM6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuXHQubWRpb2Rydi5kcml2ZXIgPSB7XG5cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcblx0XHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXG5cdH0sXG5cdC5wcm9iZSAgPSB5dDkyMXhfbWRpb19wcm9iZSxcblx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcbn07XG5gYGBcblxuU28gaXQncyBhbiBNRElPIGRyaXZlci4gQ2FuIGFuIE1ESU8gZHJpdmVyIGxpa2UgdGhpcyBhY3R1YWxseSBiZSBwcm9iZWQgaW4gUUVNVSAqd2l0aG91dCogc3BlY2lmaWMgaGFyZHdhcmU/IFR5cGljYWxseSwgTURJTyBkZXZpY2VzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgc2NhbnMgdGhlbSBvciB2aWEgdGhlIGRldmljZSB0cmVlLiBXaXRob3V0IGVpdGhlciwgdGhlIHByb2JlIHdvbid0IGJlIGNhbGxlZC4gQ291bGQgU3l6a2FsbGVyIHRyaWdnZXIgYSBwcm9iZSBzb21laG93LCBtYXliZSB0aHJvdWdoIG5ldGxpbmsgb3Igc3lzZnM/IFByb2JhYmx5IG5vdC5cblxuQnV0IHdhaXQhIFRoaXMgcGF0Y2ggKmFkZHMqIExFRCBzdXBwb3J0IHRvIHRoZSBEU0Egc3dpdGNoISBMRURzIGFyZSBleHBvc2VkIHZpYSB0aGUgTEVEIHN1YnN5c3RlbSBhbmQgYC9zeXMvY2xhc3MvbGVkcy9gLiBJZiB0aGUgZGV2aWNlICppcyogcHJvYmVkLCBJIHNob3VsZCBiZSBhYmxlIHRvIGNvbnRyb2wgdGhlIExFRHMgdmlhIHN5c2ZzLiAqQnV0IGNhbiBpdCBiZSBwcm9iZWQgaW4gdGhlIGZpcnN0IHBsYWNlPypcblxuSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBleGlzdGluZyBTeXprYWxsZXIgc3VwcG9ydCBmb3IgTURJTyBvciBEU0EuIEknbGwgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIGB5dDkyMXhgIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSBpZiB0aGVyZSdzIGEgdmlydHVhbCBkcml2ZXIsIG9yIGlmIGl0J3MgcHVyZWx5IGhhcmR3YXJlLWRlcGVuZGVudC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gYXNzZXNzaW5nIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAyOjMyOjEwLjM4MzY4MjkxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjgwNDI4MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI2MTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zLS0tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuLS1cXG5NQUlOVEFJTkVSUz0xODI0MD1TOlxcdE1haW50YWluZWRcXG5NQUlOVEFJTkVSUzoxODI0MTpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XFx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cXG5NQUlOVEFJTkVSUzoxODI0MzpGOlxcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXFxuTUFJTlRBSU5FUlMtMTgyNDQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjM6eXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZTo0Onl0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjU6eXQ5MjF4LW9ianMgKz0gc21pLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyOnN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMzLVxcdHVuc2lnbmVkIGludCBzaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE6LyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWJcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDYtICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4LVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTk6c3RydWN0IHl0OTIxeF9pbmZvIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDAtXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNi1cXHR1MTYgaW50ZXJuYWxfbWFzaztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDc6XFx0LyogVE9ETzogc2VlIGNvbW1lbnRzIGluIHl0OTIxeF9kc2FfcGh5bGlua19nZXRfY2FwcygpICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4LVxcdHUxNiBleHRlcm5hbF9tYXNrO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xNjQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTY1OnN0cnVjdCB5dDkyMXhfcmVnX21kaW8ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2Ni1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTgxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE4MjojZGVmaW5lIHRvX3l0OTIxeF9wcml2KF9kcykgY29udGFpbmVyX29mX2NvbnN0KF9kcywgc3RydWN0IHl0OTIxeF9wcml2LCBkcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xODMtI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cXHUwMDNlZHMuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTkwPXN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTk1OnN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5Ni17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTk3OlxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5OC1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjIzNjpzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb193cml0ZSh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzNy17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM4OlxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzOS1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjcxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3MjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9yZWdfb3BzIHl0OTIxeF9yZWdfb3BzX21kaW8gPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjczOlxcdC5yZWFkID0geXQ5MjF4X3JlZ19tZGlvX3JlYWQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjc0OlxcdC53cml0ZSA9IHl0OTIxeF9yZWdfbWRpb193cml0ZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzUtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3OC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzk6c3RhdGljIGludCB5dDkyMXhfaW50aWZfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyODM6XFx0cmV0dXJuIHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJULFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4NC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0yODc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI4ODp5dDkyMXhfaW50aWZfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI5NS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyOTY6XFx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjk3LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDMtXFx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDQ6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfSU5UX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA1LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA2LVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzA3OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA4LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzExOlxcdHJlcyA9IHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMi1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMy1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMxNDpcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0RJTiwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzE1LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zMjY9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyNzp5dDkyMXhfaW50aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMzMzpcXHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0MC1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9XUklURTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDE6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfSU5UX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQ0OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0RPVVQsIHZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ1LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ2LVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQ3OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ4LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzUxOlxcdHJldHVybiB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTItfVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1My1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTQ6c3RhdGljIGludCB5dDkyMXhfbWJ1c19pbnRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzU1LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTY6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTctXFx0dTE2IHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM2My1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzY0OlxcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzY1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MzcyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNzM6eXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzc0LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNzU6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNzYtXFx0aW50IHJlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM4MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzgyOlxcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM4My1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mzg5Onl0OTIxeF9tYnVzX2ludF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwMS1cXHRtYnVzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDI6XFx0bWJ1cy1cXHUwMDNlcmVhZCA9IHl0OTIxeF9tYnVzX2ludF9yZWFkO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwMzpcXHRtYnVzLVxcdTAwM2V3cml0ZSA9IHl0OTIxeF9tYnVzX2ludF93cml0ZTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDQtXFx0bWJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQxNjpzdGF0aWMgaW50IHl0OTIxeF9leHRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE5LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyMDpcXHRyZXR1cm4geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDIxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI1Onl0OTIxeF9leHRpZl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWcsIHUxNiAqdmFscClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQzMzpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MzQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0MC1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9UWVBFX0MyMiB8IFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDE6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfRVhUX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDQ0OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ1LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDQ4OlxcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0OS1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MC1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RJTiwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUyLVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2NDp5dDkyMXhfZXh0aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY5LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MDpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzEtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3Ny1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9UWVBFX0MyMiB8IFlUOTIxWF9NQlVTX0NUUkxfV1JJVEU7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc4OlxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3OS1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4MC1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19ET1VULCB2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4Mi1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4My1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4NDpcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4NS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4ODpcXHRyZXR1cm4geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg5LX1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDkxOnN0YXRpYyBpbnQgeXQ5MjF4X21idXNfZXh0X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Mi17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDkzOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDk0LVxcdHUxNiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5ODpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfcmVhZChwcml2LCBwb3J0LCByZWcsIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5OS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUwNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTA3Onl0OTIxeF9tYnVzX2V4dF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUwOC17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTA5OlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTEwLVxcdGludCByZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTItXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUxMzpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfd3JpdGUocHJpdiwgcG9ydCwgcmVnLCBkYXRhKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTQtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MTk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUyMDp5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUyMS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzMtXFx0LyogVE9ETzogYzQ1PyAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUzNDpcXHRtYnVzLVxcdTAwM2VyZWFkID0geXQ5MjF4X21idXNfZXh0X3JlYWQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM1OlxcdG1idXMtXFx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfZXh0X3dyaXRlO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzNi1cXHRtYnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NDctLyogUmVhZCBhbmQgaGFuZGxlIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuIE1JQiBidWZmZXIgbXVzdCBiZSB6ZXJvZWQgYmVmb3JlLiAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU0ODpzdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0OS17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTUwOlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTUxLVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTI6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1My1cXHRpbnQgcmVzID0gMDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTU1OlxcdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQncyB2YWluXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU2LVxcdCAqIHRvIGtlZXAgaXRzIGNvbnNpc3RlbmN5LCBzaW5jZSB3ZSBoYXZlIHRvIHJlYWQgcmVnaXN0ZXJzIG9uZSBieSBvbmVcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NjM6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NjQ6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2NS1cXHRcXHR1MzIgcmVnID0gWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyBkZXNjLVxcdTAwM2VvZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NjktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTcwOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2YWwwKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NzEtXFx0XFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU4Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1ODM6XFx0XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQsIFxcdTAwMjZ2YWwxKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01ODQtXFx0XFx0XFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MDc6c3RhdGljIHZvaWQgeXQ5MjF4X3BvbGxfbWliKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MDgte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwOTpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gY29udGFpbmVyX29mX2NvbnN0KHdvcmssIHN0cnVjdCB5dDkyMXhfcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1pYl9yZWFkLndvcmspO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMTpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSAodm9pZCAqKShwcCAtIHBwLVxcdTAwM2VpbmRleCkgLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMjpcXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTMtXFx0dW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjE3LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTg6XFx0cmVzID0geXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxOS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTYyNj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYyNzp5dDkyMXhfZHNhX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjI4LVxcdFxcdCAgICAgICB1aW50OF90ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYzMzpcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYzNDpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjM1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjQxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQyOnl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQzLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDQ6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NTpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NjpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ3LVxcdHNpemVfdCBqO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ5LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTA6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1MS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1My1cXHRqID0gMDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTQ6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTU6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY2NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NjU6c3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY2Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjcyOlxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjczOlxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz02ODI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODM6eXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODUte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4NjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg3OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg4OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjkwLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2OTE6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY5Mi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTcxOD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcxOTp5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjEte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyMjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzIzOlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzI0OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzI2LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3Mjc6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyOC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTczNC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSB5dDkyMXhfcm1vbl9yYW5nZXNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MzYtXFx0eyAwLCA2NCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzQ2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzQ3Onl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NDgtXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzUwLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTE6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MjpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MzpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1NS1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzU2OlxcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU4LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1OTpcXHQqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc2MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTc4Mz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4NDp5dDkyMXhfZHNhX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzg1LVxcdFxcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc4Ni17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg3OlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODg6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODk6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTgxOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyMDp5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyMS1cXHRcXHRcXHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODIyLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4MjM6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyNDpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyNTpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyNy1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI4OlxcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04MzU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgzNjp5dDkyMXhfc2V0X2VlZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NDktXFx0aWYgKCEhbmV3X21hc2sgIT0gISFwcml2LVxcdTAwM2VlZWVfcG9ydHNfbWFzaykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg1MDpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfRlVOQyxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTEtXFx0XFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfUE9OX1NUUkFQX0VFRSwgISFuZXdfbWFzayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTMtXFx0XFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfUE9OX1NUUkFQX1ZBTCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTUtXFx0XFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfUE9OX1NUUkFQX0VFRSwgISFuZXdfbWFzayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjItXFx0LyogRW5hYmxlIC8gZGlzYWJsZSBwb3J0IEVFRSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg2MzpcXHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9FRUVfQ1RSTCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjQtXFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfRUVFX0NUUkxfRU5uKHBvcnQpLCBlbmFibGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY2LVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODY3OlxcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRW5fVkFMKHBvcnQpLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2OC1cXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9FRUVfVkFMX0RBVEEsIGVuYWJsZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04NzU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg3Njp5dDkyMXhfZHNhX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODc3LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Nzg6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg3OS1cXHRpbnQgcmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgxLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4ODI6XFx0cmVzID0geXQ5MjF4X3NldF9lZWUocHJpdiwgcG9ydCwgZSk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4ODpzdGF0aWMgaW50IHl0OTIxeF9tdHVfZmV0Y2goc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODk1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4OTY6eXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODk3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5MDI6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMy1cXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTExLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5MTI6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTUFDbl9GUkFNRShwb3J0KSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTMtXFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfTUFDX0ZSQU1FX1NJWkVfTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxOS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5MjA6c3RhdGljIGludCB5dDkyMXhfZHNhX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkyMS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz05NTM9c3RhdGljIHU2NCB0b2tlbjJidXJzdCh1MzIgdG9rZW4sIGludCB1bml0LCBpbnQgQylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NTg6c3RydWN0IHl0OTIxeF9tYXJrZXIge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1OS1cXHR1MzIgY2lyO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTY5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NzA6eXQ5MjF4X21hcmtlcl90Zm0oc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzEtXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzbG90X25zLCB1MzIgY2lyX21heCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NzI6XFx0XFx0ICB1MzIgY2JzX21heCwgaW50IHVuaXRfbWF4LCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3My1cXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3Ny1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTc4OlxcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTc5LVxcdHU2NCBidXJzdF9lc3Q7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OTktXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwMDA6XFx0XFx0YnVyc3Rfc3VnICs9IEVUSF9ITEVOICsgeXQ5MjF4X210dV9mZXRjaChwcml2LCBwb3J0KSArXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTAwMS1cXHRcXHRcXHQgICAgIEVUSF9GQ1NfTEVOO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA1OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA2MDp5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2Uoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcixcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDYxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA2MjpcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjMtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNzMtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA3NDpcXHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA3NS1cXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlbWV0ZXJfc2xvdF9ucywgWVQ5MjFYX01FVEVSX0NJUl9NQVgsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDgwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgxOnl0OTIxeF9tYXJrZXJfdGZtX3NoYXBlKHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIsIHU2NCByYXRlLCB1NjQgYnVyc3QsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA4MjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4My1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4NC17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA4NTpcXHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4Ni1cXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcG9ydF9zaGFwZV9zbG90X25zLCBZVDkyMVhfU0hBUEVfQ0lSX01BWCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTEwOTE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwOTI6eXQ5MjF4X3BvbGljZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA5My1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTI3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI4Onl0OTIxeF9tZXRlcl9jb25maWcoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTEyOTpcXHRcXHQgICAgY29uc3Qgc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNDctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE0ODpcXHRyZXR1cm4geXQ5MjF4X3JlZzk2X3dyaXRlKHByaXYsIFlUOTIxWF9NRVRFUm5fQ1RSTChpZCksIGN0cmxzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTQ5LX1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUwLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNTE6c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1Mi17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MzpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1NC1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU3LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTU4OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX01FVEVSKHBvcnQpLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU5LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTE2Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE2Nzp5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTY4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTcwLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcxOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcyOlxcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG1hcmtlcjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTczLVxcdHUzMiBjdHJsO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3NS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTc2OlxcdHJlcyA9IHl0OTIxeF9wb2xpY2VfdmFsaWRhdGUocG9saWNlLCBOVUxMLCBOVUxMLCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzctXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4MDpcXHRyZXMgPSB5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2UoXFx1MDAyNm1hcmtlciwgcG9saWNlLCAwLCBwcml2LCBwb3J0LCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODEtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODQtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODU6XFx0cmVzID0geXQ5MjF4X21ldGVyX2NvbmZpZyhwcml2LCBwb3J0ICsgWVQ5MjFYX01FVEVSX05VTSwgXFx1MDAyNm1hcmtlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4Ni1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4OS1cXHRjdHJsID0gWVQ5MjFYX1BPUlRfTUVURVJfSUQocG9ydCkgfCBZVDkyMVhfUE9SVF9NRVRFUl9FTjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTkwOlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX01FVEVSKHBvcnQpLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTkxLWVuZDpcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjoxNC4wNjQxMTczMDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA2NzgxODE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIERTQSBEcml2ZXIgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzP1wiIFRoZSBjb2RlIHJlZ2lzdGVycyBhbiBNRElPIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgLiBTcGVjaWZpY2FsbHksIGB5dDkyMXhfbWRpb19kcml2ZXJgIGlzIHJlZ2lzdGVyZWQuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byB0aGluayBhYm91dCBzeXprYWxsZXIncyBsaW1pdGF0aW9ucy4gSXQgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4gbWV0aG9kIHRvIGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzLCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1kZXZpY2UsIG9yIG1heWJlIHNvbWUgRGV2aWNlIFRyZWUgbWFnaWMuIFdoaWxlIHN5emthbGxlciBzdXBwb3J0cyB0aGluZ3MgbGlrZSBgbWFjODAyMTFfaHdzaW1gLCBgdmttc2AsIGV0Yy4sIGRvZXMgaXQgc3VwcG9ydCBNRElPIGRldmljZXM/IEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgRFNBIG9yIE1ESU8gZGlyZWN0bHkuIEknbGwgcHJvYmFibHkgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCBhbmQgc2VhcmNoIGluIGBzeXMvbGludXgvYCBmb3IgYHl0OTIxeGAsIG9yIGNoZWNrIHRoZSBzeXprYWxsZXIgY29uZmlncyBmb3IgYENPTkZJR19ORVRfRFNBX1lUOTIxWGAuXG5cbkJ1dCwgd2FpdCBhIG1pbnV0ZSwgdGhlIGluc3RydWN0aW9ucyBoZXJlIHNwZWNpZnkgdGhhdCBpdCdzIGltcG9zc2libGUgdG8gcmVhY2ggYSBEU0Egc3dpdGNoIGRyaXZlciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIERTQSBkcml2ZXJzIGFyZSBvZnRlbiBwbGF0Zm9ybS1zcGVjaWZpYyBvciBkZXBlbmQgb24gTURJTy9JMkMvU1BJIGludGVyZmFjZXMuIFFFTVUgZGVmaW5pdGVseSBkb2Vzbid0IGVtdWxhdGUgdGhlIE1vdG9yY29tbSBZVDkyMTUgaGFyZHdhcmUuIEJ1dCwgY2FuIEkgaW5zdGFudGlhdGUgYSBEU0Egc3dpdGNoIHZpYSBhIGR1bW15IE1ESU8gYnVzPyBUaGVyZSdzIGBkc2FfbG9vcGAsIHdoaWNoIGlzIGEgZHVtbXkgRFNBIHN3aXRjaCwgYnV0IGB5dDkyMXhgIGlzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLlxuXG5Ib3cgY2FuIEkgcHJvYmUgYHl0OTIxeGAgaW4gUUVNVT8gTm8gd2F5LiBJdCByZXF1aXJlcyBhbiBNRElPIGJ1cyBhbmQgYSBEZXZpY2UgVHJlZSBub2RlIG1hdGNoaW5nIGBtb3RvcmNvbW0seXQ5MjF4YCwgYW5kIGFzIGZhciBhcyBJIGtub3csIHN5emthbGxlciBkb2Vzbid0IGluamVjdCBhcmJpdHJhcnkgRGV2aWNlIFRyZWUgbm9kZXMuIFNvLCBubyBsdWNrIHRoZXJlLlxuXG5IYW5nIG9uLi4uIHRoZSBwYXRjaCBhdXRob3IgaXMgYHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlYC4gVGhpcyBpcyBhICpzaW11bGF0ZWQqIHBhdGNoLiBPa2F5LCBsZXQncyBnbyBiYWNrIGFuZCBsb29rIGF0IHRoZSBwYXRjaCBhZ2Fpbi4gSXQgYWRkcyBMRUQgc3VwcG9ydCB0byB0aGUgYHl0OTIxeGAgZHJpdmVyLiBIbW0sIGlzIGl0IHBvc3NpYmxlIHRoYXQgc3l6a2FsbGVyICpjYW4qIHJlYWNoIHRoaXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB5dDkyMXhgIGlzIGEgcmVhbCBkcml2ZXIgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZXJlZm9yZSwgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGV4ZWN1dGUgdGhlIGFkZGVkIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgY29kZS5cblxuSWYgSSBjYW4ndCByZWFjaCB0aGlzIGNvZGUsIGl0J3MgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhIHBoeXNpY2FsIHN3aXRjaCBjaGlwIHRoYXQncyAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLCBpdCdzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gcmVhY2guIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBvbmUgbW9yZSB0aW1lIGlmIHRoZXJlJ3MgKmFueSogUUVNVSBlbXVsYXRpb24gZm9yIGB5dDkyMXhgLi4uIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLiBOb3BlLiBWZXJkaWN0OiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MDEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6MjUuMTMxOTM5OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNDg5NjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3RvcmNvbW0seXQ5MjF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zLS0tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuLS1cXG5NQUlOVEFJTkVSUz0xODI0MD1TOlxcdE1haW50YWluZWRcXG5NQUlOVEFJTkVSUzoxODI0MTpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XFx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6MzAuMTY2ODQ1MjgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2NzYzNzU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgYG1vdG9yY29tbSx5dDkyMXhgIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGlzIGBtb3RvcmNvbW0seXQ5MjF4YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBkcml2ZXI/IFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBRRU1VIGFuZCBsYWNrIHZpcnR1YWwgY291bnRlcnBhcnRzLCBjYW4ndCBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyIGJlY2F1c2UgdGhleSBuZWVkIGFjdHVhbCBoYXJkd2FyZS4gSSdtIHRoaW5raW5nLCBjb3VsZCBzeXprYWxsZXIgcGVyaGFwcyBwcm9iZSBNRElPIGRyaXZlcnMgYnkgcmVnaXN0ZXJpbmcgYSBkdW1teSBidXMgYW5kIGRldmljZT8gVGhhdCdzIGEgcG9zc2liaWxpdHksIGJ1dCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgTURJTyBmdXp6ZXIuXG5cbkxldCBtZSBjaGVjay4gSSBuZWVkIHRvIGZpbmQgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uLiBJIGNhbid0IHJlYWQgdGhlIGRlc2NyaXB0aW9ucyBkaXJlY3RseSwgYnV0IEkgY2FuJ3QgdXNlIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgbWRpb2AgaW4gYHN5cy9saW51eC9gIC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHN5emthbGxlciBkb2Vzbid0IG5vcm1hbGx5IGZ1enogYXJiaXRyYXJ5IE1ESU8gaGFyZHdhcmUgZHJpdmVycyBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGRldmljZSB0cmVlIG5vZGVzIGZvciBiaW5kaW5nLiBXaGF0IGlmIGl0J3MgcmVhY2hhYmxlIHZpYSBJMkMgb3IgU1BJPyBTYW1lIHByb2JsZW06IGRldmljZSB0cmVlIG9yIGJvYXJkIGluZm8gaXMgcmVxdWlyZWQuIEFuZCB3aGF0IGFib3V0IFBDST8gUENJIGRyaXZlcnMgKmNhbiogYmUgcHJvYmVkIGlmIFFFTVUgZW11bGF0ZXMgdGhlIFBDSSBkZXZpY2UsIGJ1dCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBgeXQ5MjF4YC5cblxuV2FpdCwgSSBqdXN0IHJlYWxpemVkLCBgeXQ5MjF4YCAqaXMqIGFuIE1ESU8gZHJpdmVyLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcblx0Lm1kaW9kcnYuZHJpdmVyID0ge1xuXHRcdC5uYW1lID0gWVQ5MjFYX05BTUUsXG5cdFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxuXHR9LFxuXHQucHJvYmUgID0geXQ5MjF4X21kaW9fcHJvYmUsXG5cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG59O1xuYGBgXG5cblRoaXMgY29uZmlybXMgaXQuIFNpbmNlIGl0J3MgYW4gTURJTyBkcml2ZXIgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHN3aXRjaCwgYW5kIHRoZXJlIGlzIG5vIFFFTVUgZW11bGF0aW9uIGZvciBNb3RvcmNvbW0gWVQ5MjE1LCB0aGUgYHByb2JlYCBmdW5jdGlvbiBpcyBuZXZlciBnb2luZyB0byBiZSBjYWxsZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU28gdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IHdheSB0byBpbnN0YW50aWF0ZSBhbiBNRElPIGRldmljZSBmcm9tIHVzZXJzcGFjZS4gYFNJT0NTTUlJUkVHYCBleGlzdHMsIGJ1dCB0aGF0J3MgZm9yIHJlYWRpbmcvd3JpdGluZyByZWdpc3RlcnMsIG5vdCBjcmVhdGluZyBkZXZpY2VzLiBVbmxpa2UgSTJDLCBNRElPIGRvZXNuJ3QgaGF2ZSBhIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzL25ld19kZXZpY2VgIGZvciBjcmVhdGluZyBkZXZpY2VzLiBXYWl0LCBkb2VzIE1ESU8gaGF2ZSBzb21ldGhpbmcgc2ltaWxhcj8gTGV0IG1lIGNoZWNrIGlmIHRoZSBNRElPIGJ1cyBoYXMgYG5ld19kZXZpY2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzYyOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjozOS4xMzQ1MDU1NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MzExMjEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjozOS4zMzM4MjQ4NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA2NTIxNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBmb3IgTURJTyBCdXMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5IbW0sIG5vIHNpZ24gb2YgYG5ld19kZXZpY2VgIGJlaW5nIGRlZmluZWQgb3IgdXNlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aGVyZS4gSXQgc3VnZ2VzdHMgdGhlIE1ESU8gYnVzIGl0c2VsZiwgdGhlIGZ1bmRhbWVudGFsIGluZnJhc3RydWN0dXJlIGZvciBhY2Nlc3NpbmcgUEhZcywgbWlnaHQgYmUgaGFuZGxpbmcgdGhlIGRldmljZSBjcmVhdGlvbi4gR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBNRElPIGJ1cyBkcml2ZXIgaW1wbGVtZW50YXRpb24sIGFuZCBwb3RlbnRpYWxseSwgdGhlIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIHJlc3BvbnNpYmxlIGZvciBhdHRhY2hpbmcgbmV3IFBIWSBkZXZpY2VzIHRvIHRoZSBidXMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGBuZXdfZGV2aWNlYCBsb2dpYywgb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCB3aWxsIHJlc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg4ODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjo0Mi43NDAzNTUwMzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTYzODAxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV3X2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6NDIuOTU2MDAyMzM0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTEzODI3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5mdXp6YWJsZSBEcml2ZXI6IFlUOTIxeCoqXG5cbk9rYXksIHNvIGl0J3MgY2xlYXI6IHRoZXJlJ3MgYWJzb2x1dGVseSBubyB3YXkgdG8gaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlcXVpcmVkIGJ5IHRoZSBgeXQ5MjF4YCBkcml2ZXIsIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1lYW5zIEkgY2FuJ3QgZXZlbiAqYmVnaW4qIHRvIHByb2JlIHRoaXMgZHJpdmVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgZGVkaWNhdGVkIGhhcmR3YXJlIG9yIGEgdmVyeSBzcGVjaWZpYyBRRU1VIHNldHVwIHdpdGggZW11bGF0aW9uIG9mIHRoZSBNb3RvcmNvbW0gWVQ5MjE1ICh3aGljaCBkb2Vzbid0IGV4aXN0KSwgdGhpcyBkcml2ZXIgaXMgc2ltcGx5IHVucmVhY2hhYmxlLiBTaW5jZSBmdXp6aW5nIHJlbGllcyBvbiBlbnZpcm9ubWVudCByZWFjaGFiaWxpdHksIHRoaXMgaXMgYSBjbGVhciByb2FkYmxvY2suXG5cbkxldCBtZSBqdXN0IHJlZnJlc2ggdGhlIGluc3RydWN0aW9ucyBpbiBteSBtaW5kOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlIGVtdWxhdGlvbnMuXCJcblxuWWVwLCBpdCdzIGEgcGVyZmVjdCBmaXQuIFRoaXMgYHl0OTIxeGAgZHJpdmVyIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgTURJTyBkcml2ZXIgZm9yIGEgRFNBIHN3aXRjaCBjaGlwLiBJdCdzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBoYXJkd2FyZSBhbmQganVzdCAqY2FuJ3QqIGJlIHByb2JlZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBHaXZlbiB0aGlzLCBJJ20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGl0IGlzIGFuIE1ESU8gZHJpdmVyLiBKdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIGNvbmZpcm1lZCEgSSdtIGdvb2QgdG8gZ28gd2l0aCB0aGUgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6NDcuNjA3MzkwMTg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2Mzg0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3MD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc3MjpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzczLVxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzgyOm1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAyOjMyOjQ3LjczMDAzNDc2OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE4ODY4Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPIERyaXZlciBhbmQgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBkcml2ZXIuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IHRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgdGhpcyBkcml2ZXIsIGFuZCBiYXNlZCBvbiBteSBwcmlvciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLCB0aGUgY29tcGxleGl0aWVzIG9mIHRoZSBzeXN0ZW0gaXQgaXMgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGZ1enppbmcgYXQgdGhpcyBzdGFnZSwgSSdtIGNvbmZpZGVudCBpbiBtYWtpbmcgYSBjYWxsIGhlcmUuIFVzaW5nIGBzZXQtcmVzdWx0c2AsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEJhc2ljYWxseSwgSeKAmW0gc2F5aW5nIHRoYXQgYmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhpcyBkcml2ZXIgYW5kIGl0cyByb2xlIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiB0aGluZ3MsIGZ1enppbmcgaXQgaXNuJ3QgbGlrZWx5IHRvIHlpZWxkIHNpZ25pZmljYW50IHJlc3VsdHMgKmF0IHRoaXMganVuY3R1cmUqLiBGdXJ0aGVyIGRvd24gdGhlIGxpbmUsIGRlcGVuZGluZyBvbiBmaW5kaW5ncywgdGhlIGRyaXZlciBtYXkgYmVjb21lIHJlbGV2YW50IHRvIGZ1enosIGJ1dCBmb3Igbm93LCBJJ2xsIHBhc3Mgb24gdGhlIGZ1enogY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODk0LCJPdXRwdXRUb2tlbnMiOjEwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAyOjMyOjUxLjY0ODkwNzIwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l74w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 01:45:49 +0000 UTC FinishedAt: 2026-07-25 02:32:53 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOWQzY2VjODU2NGMxZThiMDc5MGYxYzg4NTliMWU2MDY5ZDY3NjI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDI6MzE6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjcyZDJiZDA3ZjA4ODIuLmZiYWE1OTBhM2EyMmQzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzksNyAmIzQzOzE4MjM5LDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQmIzQzOz0gYjUzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pY3JvY2hpcC9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4mIzQzO1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBjaGlwLlxuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuJiM0MztcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICYjNDM7MTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3l0OTIxeC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLmRlNDE0MzA1NzkzMTNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuIFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9OQU1FXHRcJiMzNDt5dDkyMXhcJiMzNDtcbiYjNDM7XG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbiBcbkBAIC05MzgsNiAmIzQzOzk0MiwxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44NWM5YmIxMzllYWQ4OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDY0NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGR1dHk7XG4mIzQzO1xuJiM0MztcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4mIzQzO1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4mIzQzO1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbiYjNDM7XHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0KmN5Y2xlcCA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4mIzQzO1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuJiM0MztcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikge1xuJiM0MztcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4mIzQzO1x0KmR1dHlwID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4mIzQzO1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbiYjNDM7XHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4mIzQzO1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbiYjNDM7XHRcdFx0ICAgICBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuJiM0MztcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSkge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuJiM0MztcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4mIzQzO1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbiYjNDM7XHRcdFx0aWYgKCFmbGFncylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxuJiM0MztcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbiYjNDM7XHRcdCpmbGFnc3AgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbiYjNDM7XHRcdFx0KmZsYWdzcCB8PSBtYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBhZGRyO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSAwO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGN0cmwgfD0gbWFwLVx1MDAzZW1hc2s7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmbGFncylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4mIzQzO1x0aWYgKGdyb3VwID09IDIpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbiYjNDM7XHR9XG4mIzQzO1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuJiM0MztcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuJiM0MztcdFx0XHRcdCAgIGRlbGF5X29mZik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRldmljZSAqIF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XG4mIzQzO1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0aWYgKCFkcCB8fCAhZHAtXHUwMDNldXNlcilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWRldjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1xuJiM0MztcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3NwKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhO1xuJiM0MztcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuJiM0MztcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4mIzQzO1x0ZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuJiM0MztcdGJvb2wgZm9yY2VfaGlnaDtcbiYjNDM7XHRib29sIGZvcmNlX2xvdztcbiYjNDM7XHRpbnQgcG9sYXJpdHk7XG4mIzQzO1x0dTMyIGdyb3VwO1xuJiM0MztcdGJvb2wgb247XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZncm91cCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cJiMzNDssIGdyb3VwLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XG4mIzQzO1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtaGlnaFwmIzM0Oyk7XG4mIzQzO1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1sb3dcJiMzNDspO1xuJiM0MztcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XG4mIzQzO1xuJiM0MztcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFsZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuJiM0MztcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGxlZF9jZGV2ID0gXHUwMDI2bGVkLVx1MDAzZWNkZXY7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4mIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwmIzM0O25ldGRldlwmIzM0OztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwmIzM0Oy0ldTolMDJkOiUwMnVcJiMzNDssXG4mIzQzO1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4mIzQzO1x0XHQuZndub2RlID0gZndub2RlLFxuJiM0MztcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuJiM0MztcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbiYjNDM7XHR9O1xuJiM0MztcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvbGFyaXR5KSB7XG4mIzQzO1x0XHR1MzIgYml0ID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0XHQqaW52X21hc2twIHw9IGJpdDtcbiYjNDM7XHRcdGlmIChwb2xhcml0eSBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZWQpXG4mIzQzO1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHUzMiAqaW52X21hc2twLFxuJiM0MztcdFx0ICAgICAgIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbiYjNDM7XHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwmIzM0O2xlZHNcJiMzNDspO1xuJiM0MztcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7XG4mIzQzO1x0XHRpZiAocmVzKSB7XG4mIzQzO1x0XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KVxuJiM0MztcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdHUzMiBpbnZfY3RybCA9IDA7XG4mIzQzO1x0dTMyIGludl9tYXNrID0gMDtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcbiYjNDM7XHRcdGlmICghZHAtXHUwMDNlZG4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgXHUwMDI2aW52X21hc2ssIFx1MDAyNmludl9jdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHMgZm9yIHBvcnQgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBwb3J0LCByZXMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbiYjNDM7XHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChpbnZfbWFzaykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnZfY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRnb3RvIGVuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbiYjNDM7XG4mIzQzO2VuZDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpIHtcbiYjNDM7XHRcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICYjNDM7MSwxMjEgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0hcbiYjNDM7I2RlZmluZSBfWVRfTEVEU19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCAmIzQzOzEsMTU3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbWkuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4mIzQzO1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuJiM0MztcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCp2YWxwID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHR1MzIgdjtcbiYjNDM7XHR1MzIgdTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHUgPSB2O1xuJiM0MztcdHUgXHUwMDI2PSB+bWFzaztcbiYjNDM7XHR1IHw9IHZhbDtcbiYjNDM7XHRpZiAodSA9PSB2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHR1IHw9IHZhbHNbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCAmIzQzOzEsODggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSFxuJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lXG4mIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiYjNDM7ICpcbiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuJiM0MztcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMjozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgTURJTyBkZXZpY2UuIFNpbmNlIHRoZXJlIGlzIG5vIFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGFuZCBNRElPIGRldmljZXMgY2Fubm90IGJlIGFyYml0cmFyaWx5IGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZSAodW5saWtlIEkyQyksIHRoZSBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5ZDNjZWM4NTY0YzFlOGIwNzkwZjFjODg1OWIxZTYwNjlkNjc2MjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAwMjozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjcyZDJiZDA3ZjA4ODIuLmZiYWE1OTBhM2EyMmQzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTgyMzksNyAmIzQzOzE4MjM5LDcgQEAgTToJRGF2aWQgWWFuZyAmbHQ7bW15YW5nZmxAZ21haWwuY29tJmd0OwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCi1GOglkcml2ZXJzL25ldC9kc2EveXQ5MjF4LioKJiM0MztGOglkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLwogRjoJbmV0L2RzYS90YWdfeXQ5MjF4LmMKIAogTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MAogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWcmIzM0OwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnJiMzNDsKJiM0MzsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZyYjMzQ7CiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDsKQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTUKIAkgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyCiAJICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLgotCi1jb25maWcgTkVUX0RTQV9ZVDkyMVgKLQl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7Ci0Jc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAotCXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQppbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiBvYmoteQkJCQkmIzQzOz0gYjUzLwogb2JqLXkJCQkJJiM0Mzs9IGhpcnNjaG1hbm4vCiBvYmoteQkJCQkmIzQzOz0gbGFudGlxLwogb2JqLXkJCQkJJiM0Mzs9IG1pY3JvY2hpcC8KJiM0MztvYmoteQkJCQkmIzQzOz0gbW90b3Jjb21tLwogb2JqLXkJCQkJJiM0Mzs9IG12ODhlNnh4eC8KIG9iai15CQkJCSYjNDM7PSBteGw4NjJ4eC8KIG9iai15CQkJCSYjNDM7PSBuZXRjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwxNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWAomIzQzOwl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKJiM0MzsJc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKJiM0MzsJICBjaGlwLgomIzQzOwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTCiYjNDM7CWJvb2wgJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNSYjMzQ7CiYjNDM7CWRlZmF1bHQgeQomIzQzOwlkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CWRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVgKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKQEAgLTEzLDcgJiM0MzsxMyw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYnJpZGdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfaHNyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwpAQCAtMjYsNyAmIzQzOzI1LDkgQEAKICNpbmNsdWRlICZsdDtuZXQvaWVlZTgwMjFxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKIAotI2luY2x1ZGUgJiMzNDt5dDkyMXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKIAogc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0gewogCXt9CiB9OwogCi0jZGVmaW5lIFlUOTIxWF9OQU1FCSYjMzQ7eXQ5MjF4JiMzNDsKLQogI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRQk0MDk1CiAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKLQogLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4KICAqCiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwCkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKIAlyZXR1cm4gKGFkZHJbNF0gJmx0OyZsdDsgOCkgfCBhZGRyWzVdOwogfQogCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKLXsKLQl1MzIgdmFsOwotCWludCByZXM7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAotCQkJCXJlcyB8fCAodmFsICZhbXA7IG1hc2spID09ICp2YWxwLAotCQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAotCQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQkqdmFscCA9IHZhbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCWludCByZXM7Ci0JdTMyIHY7Ci0JdTMyIHU7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQl1ID0gdjsKLQl1ICZhbXA7PSB+bWFzazsKLQl1IHw9IHZhbDsKLQlpZiAodSA9PSB2KQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7Ci19Ci0KLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KLSAqCi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCi0gKi8KLQotc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKLXsKLQkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwotCSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7Ci0JKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKLQkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAotCQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCi0JCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQljb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsKLQl1MzIgdnNbNF07Ci0JaW50IHJlczsKLQotCUJVSUxEX0JVR19PTihudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKTsKLQotCXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQl1MzIgdSA9IHZzW2ldOwotCi0JCXUgJmFtcDs9IH5tYXNrc1tpXTsKLQkJdSB8PSB2YWxzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCWlmICh1ICE9IHZzW2ldKQotCQkJY2hhbmdlZCA9IHRydWU7Ci0KLQkJdnNbaV0gPSB1OwotCX0KLQotCWlmICghY2hhbmdlZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQkgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQotewotCXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7Ci19Ci0KIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKQogewogCXN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0OwpAQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJcmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg4Niw2ICYjNDM7NDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LSZndDtwb3J0cyk7IGktLSAmZ3Q7IDA7ICkgewogCQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaAppbmRleCA1NTUwNDY1MjY2Njk1Mi4uZGU0MTQzMDU3OTMxM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaApAQCAtODUwLDkgJiM0Mzs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7CiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNCQkoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSykKICNkZWZpbmUgWVQ5MjFYX1VERl9OVU0JCTgKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU0JMwomIzQzOwogLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovCiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTQkJCTExCiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9OQU1FCSYjMzQ7eXQ5MjF4JiMzNDsKJiM0MzsKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSAmbHQ7IDgpCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4ICZsdDs9IChwb3J0KSAmYW1wOyZhbXA7IChwb3J0KSAmbHQ7IDkpCiAKQEAgLTkzOCw2ICYjNDM7OTQyLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7CiAJc3RydWN0IHl0OTIxeF9taWIgbWliOwogCXU2NCByeF9mcmFtZXM7CiAJdTY0IHR4X2ZyYW1lczsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJdW5zaWduZWQgY2hhciBsZWRfZHV0eTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlOwomIzQzOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07CiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uODVjOWJiMTM5ZWFkODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYwpAQCAtMCwwICYjNDM7MSw2NDcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWxlZHMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsZWRzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS0mZ3Q7cG9ydCkKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktJmd0O2luZGV4XSkKJiM0MzsjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLSZndDtkcy5kZXYpCiYjNDM7CiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKQomIzQzO3sKJiM0MzsJc3dpdGNoIChncm91cCkgewomIzQzOwljYXNlIDA6CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKm9ucCA9ICh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzaywKJiM0MzsJCQkJICAgICAgY3RybCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsCiYjNDM7CQkJdW5zaWduZWQgY2hhciAqZHV0eXApCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0gewomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDYpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDQpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDMpLAomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZKDEsIDIpLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5X3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eTsKJiM0MzsKJiM0MzsJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDsKJiM0MzsJY3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovCiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgJmFtcDtjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlcikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZm9yICg7IGN5Y2xlICZndDsgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyICZndDsmZ3Q7PSAxLCBjeWNsZSAmZ3Q7Jmd0Oz0gMSkKJiM0MzsJCWlmIChjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIgJmd0OyZndDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJKmN5Y2xlcCA9IGN5Y2xlOwomIzQzOwomIzQzOwlkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqCiYjNDM7CQkJCSAgICAgKG9uICZndDsgb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKQomIzQzOwkJaWYgKGkgPT0gMCB8fCBkdXR5X3JlcSAmZ3Q7PSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHsKJiM0MzsJCQlkdXR5ID0gZHV0eXNbaV07CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CWlmIChvbiAmZ3Q7IG9mZikKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5OwomIzQzOwkqZHV0eXAgPSBkdXR5OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CXVuc2lnbmVkIHNob3J0IGN5Y2xlOwomIzQzOwl1bnNpZ25lZCBjaGFyIGR1dHk7CiYjNDM7CWJvb2wgdXNlX2N5Y2xlOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmICghKm9ucCAmYW1wOyZhbXA7ICEqb2ZmcCkgewomIzQzOwkJY3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlpZiAoaSAhPSBncm91cCAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9kdXR5KSB7CiYjNDM7CQkJCWR1dHkgPSBwcC0mZ3Q7bGVkX2R1dHk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYm9vbCBjaGFuZ2VfY3ljbGU7CiYjNDM7CQlib29sIGNoYW5nZV9kdXR5OwomIzQzOwomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsICZhbXA7Y3ljbGUsICZhbXA7ZHV0eSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBjeWNsZSAmbHQ7IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJY2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlICZhbXA7JmFtcDsgY3ljbGUgIT0gcHAtJmd0O2xlZF9jeWNsZTsKJiM0MzsJCWNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC0mZ3Q7bGVkX2R1dHk7CiYjNDM7CQlpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KQomIzQzOwkJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07CiYjNDM7CQkJICAgICBpJiM0MzsmIzQzOykgewomIzQzOwkJCQlpZiAoaSA9PSBncm91cCB8fCAhcHAtJmd0O2xlZHNbaV0pCiYjNDM7CQkJCQljb250aW51ZTsKJiM0MzsJCQkJaWYgKChjaGFuZ2VfY3ljbGUgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2N5Y2xlKSB8fAomIzQzOwkJCQkgICAgKGNoYW5nZV9kdXR5ICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9kdXR5KSkKJiM0MzsJCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSB2YWwgJmFtcDsgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJaWYgKHZhbCAhPSBjdHJsKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJc3dpdGNoIChkdXR5ICZndDs9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOgomIzQzOwkJWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkgewomIzQzOwlkZWZhdWx0OgomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKGR1dHkgJmx0OyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlpZiAodXNlX2N5Y2xlKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTsKJiM0MzsJfQomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSB2YWwgJmFtcDsgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8CiYjNDM7CQkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpOwomIzQzOwljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTsKJiM0MzsJaWYgKHVzZV9jeWNsZSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApOwomIzQzOwllbHNlCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IHVzZV9jeWNsZTsKJiM0MzsJaWYgKHVzZV9jeWNsZSkKJiM0MzsJCXBwLSZndDtsZWRfY3ljbGUgPSBjeWNsZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IHRydWU7CiYjNDM7CXBwLSZndDtsZWRfZHV0eSA9IGR1dHk7CiYjNDM7CiYjNDM7CSpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7CiYjNDM7CSpvZmZwID0gY3ljbGUgLSAqb25wOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MzIgbWFzazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tdID0gewomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLAomIzQzOwkgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRn0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfUlgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS30sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLAomIzQzOwkgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sCiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LAomIzQzOwkJCQlpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAoIWZsYWdzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgbWFwLSZndDtmbGFncykgPT0gbWFwLSZndDtmbGFncykgewomIzQzOwkJCWZsYWdzICZhbXA7PSB+bWFwLSZndDtmbGFnczsKJiM0MzsJCQlpZiAoIWZsYWdzKQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApCiYjNDM7ewomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT0KJiM0MzsJICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkgewomIzQzOwkJKmZsYWdzcCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgJmFtcDt2YWwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpmbGFnc3AgPSAwOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKHZhbCAmYW1wOyBtYXAtJmd0O21hc2spID09IG1hcC0mZ3Q7bWFzaykKJiM0MzsJCQkqZmxhZ3NwIHw9IG1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSAwOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IG1hcC0mZ3Q7ZmxhZ3MpID09IG1hcC0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmbGFncyAmYW1wOz0gfm1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CQkJY3RybCB8PSBtYXAtJmd0O21hc2s7CiYjNDM7CQkJaWYgKCFmbGFncykKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGZsYWdzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTsKJiM0MzsJaWYgKGdyb3VwID09IDIpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJfQomIzQzOwlhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmIChncm91cCAhPSAyKSB7CiYjNDM7CQltYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwKJiM0MzsJCQkJCSAgICAgbWFzaywgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKJiM0MzsJCQkJICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBicmlnaHRuZXNzKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbiwKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBkZWxheV9vbiwKJiM0MzsJCQkJICAgZGVsYXlfb2ZmKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRldmljZSAqIF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwomIzQzOwlkcCA9IGRzYV90b19wb3J0KCZhbXA7cHJpdi0mZ3Q7ZHMsIHBwLSZndDtpbmRleCk7CiYjNDM7CWlmICghZHAgfHwgIWRwLSZndDt1c2VyKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiAmYW1wO2RwLSZndDt1c2VyLSZndDtkZXY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CiYjNDM7CWlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3MpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFnc3ApOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LAomIzQzOwkJIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CiYjNDM7CWNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07CiYjNDM7CWVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7CiYjNDM7CWJvb2wgZm9yY2VfaGlnaDsKJiM0MzsJYm9vbCBmb3JjZV9sb3c7CiYjNDM7CWludCBwb2xhcml0eTsKJiM0MzsJdTMyIGdyb3VwOwomIzQzOwlib29sIG9uOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2dyb3VwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CWlmIChncm91cCAmZ3Q7PSBZVDkyMVhfTEVEX0dST1VQX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXG4mIzM0OywgZ3JvdXAsIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJaWYgKHBwLSZndDtsZWRzW2dyb3VwXSkKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwomIzQzOwlmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWhpZ2gmIzM0Oyk7CiYjNDM7CWZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChmb3JjZV9oaWdoICZhbXA7JmFtcDsgZm9yY2VfbG93KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJcG9ydCwgZ3JvdXApOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJbGVkLSZndDtwb3J0ID0gcHA7CiYjNDM7CWxlZC0mZ3Q7Z3JvdXAgPSBncm91cDsKJiM0MzsKJiM0MzsJc3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBsZWQ7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJb24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OOwomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIExFRFNfREVGU1RBVEVfS0VFUDoKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCAmYW1wO29uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlsZWRfY2RldiA9ICZhbXA7bGVkLSZndDtjZGV2OwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzcyA9IG9uOwomIzQzOwlsZWRfY2Rldi0mZ3Q7bWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZzsKJiM0MzsJbGVkX2NkZXYtJmd0O2JsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDsKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciA9ICYjMzQ7bmV0ZGV2JiMzNDs7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgJiMzNDstJXU6JTAyZDolMDJ1JiMzNDssCiYjNDM7CQkgcHJpdi0mZ3Q7ZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTsKJiM0MzsJaW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXsKJiM0MzsJCS5md25vZGUgPSBmd25vZGUsCiYjNDM7CQkuZGV2aWNlbmFtZSA9IG5hbWUsCiYjNDM7CQkuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLAomIzQzOwl9OwomIzQzOwlyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgJmFtcDtpbml0X2RhdGEpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb2xhcml0eSkgewomIzQzOwkJdTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7CiYjNDM7CiYjNDM7CQkqaW52X21hc2twIHw9IGJpdDsKJiM0MzsJCWlmIChwb2xhcml0eSAmZ3Q7IDApCiYjNDM7CQkJKmludl9jdHJscCB8PSBiaXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKQomIzQzOwkJCWRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCAmYW1wO2xlZC0mZ3Q7Y2Rldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKSB7CiYjNDM7CQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgKmludl9tYXNrcCwKJiM0MzsJCSAgICAgICB1MzIgKmludl9jdHJscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7CiYjNDM7CWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJaWYgKCFsZWRzX25wKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksCiYjNDM7CQkJCSAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7CiYjNDM7CQlpZiAocmVzKSB7CiYjNDM7CQkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykKJiM0MzsJCXl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAmYW1wO3ByaXYtJmd0O2RzOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwl1MzIgaW52X2N0cmwgPSAwOwomIzQzOwl1MzIgaW52X21hc2sgPSAwOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHsKJiM0MzsJCWludCBwb3J0ID0gZHAtJmd0O2luZGV4OwomIzQzOwomIzQzOwkJaWYgKCFkcC0mZ3Q7ZG4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQsICZhbXA7aW52X21hc2ssICZhbXA7aW52X2N0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHMgZm9yIHBvcnQgJWQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJIHBvcnQsIHJlcyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJLyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy4KJiM0MzsJICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy4KJiM0MzsJICovCiYjNDM7CWlmIChpbnZfbWFzaykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLAomIzQzOwkJCQkJICAgICBpbnZfY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCWdvdG8gZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwljdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHwKJiM0MzsJICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpOwomIzQzOwomIzQzO2VuZDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKSB7CiYjNDM7CQl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOCQkJQklUKDIxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00JR0VOTUFTSygyMCwgMTkpCS8qIGN5Y2xlID0gNTEyICogeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00JCUdFTk1BU0soMTYsIDEzKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTQkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCkJCSgweGQwMDA0ICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTcsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTCUJJVCgxNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESQlCSVQoMTYpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KQkJKDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00JCUdFTk1BU0soMzEsIDMwKQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTQkJR0VOTUFTSygyOSwgMjgpCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUAlCSVQoMjcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00JCUdFTk1BU0soMjYsIDI1KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzMJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KQkJKDB4ZDAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycCkJCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE5LCA0ICogKGdycCkgJiM0MzsgMTgpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE3LCA0ICogKGdycCkgJiM0MzsgMTYpCS8qIGN5Y2xlID0gNTEyICZsdDsmbHQ7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE2KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LCQlCSVQoMTUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOSwlCSVQoMTQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LCUJJVCgxMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTAlCSVQoMTIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYJQklUKDExKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LCQlCSVQoMTApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTksJCUJJVCg5KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYCQlCSVQoOCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWAkJQklUKDcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0JCUJJVCg2KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0JCUJJVCg1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTQkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LCUJJVCgzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LCUJJVCgyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTksJQklUKDEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkwJCTB4ZDAxMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOSwkJR0VOTUFTSygyNSwgMjQpCS8qIGRlbGF5PyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPVwkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00JCUdFTk1BU0soMSwgMCkJLyogI2dycCAtIDEgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpCSgweGQwMTA0ICYjNDM7IDggKiAoMiAtIChncnApKSAmIzQzOyA0ICogKChwb3J0KSAvIDUpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFMJCTB4ZDAxYzQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVgkJMHhkMDFjOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpCUJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydCkJKDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyA1LCA2ICogKGdycCkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyAxLCA2ICogKGdycCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkpKQomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU4JNjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGCTUxMgomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVgJMjA0OAomIzQzOwomIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTQkJMjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKQkoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGdyb3VwOwomIzQzOwomIzQzOwlib29sIHVzZV9jeWNsZToxOwomIzQzOwlib29sIHVzZV9kdXR5OjE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzOwomIzQzOyNlbHNlCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwpAQCAtMCwwICYjNDM7MSwxNTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7d3JpdGUocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAomIzQzOwkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKJiM0MzsJCQkJWVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsCiYjNDM7CQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqdmFscCA9IHZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwl1MzIgdjsKJiM0MzsJdTMyIHU7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwl1ID0gdjsKJiM0MzsJdSAmYW1wOz0gfm1hc2s7CiYjNDM7CXUgfD0gdmFsOwomIzQzOwlpZiAodSA9PSB2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCiYjNDM7CQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksICZhbXA7dmFsc1tpXSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQl1IHw9IHZhbHNbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaApAQCAtMCwwICYjNDM7MSw4OCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX1NNSV9ICiYjNDM7I2RlZmluZSBfWVRfU01JX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywKJiM0MzsJCQkgICB1MzIgdmFsKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLgomIzQzOyAqCiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwomIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS4KJiM0MzsgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CSpsbyAmYW1wOz0gfmxvd2VyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7CiYjNDM7CSpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBMRUQgc3VwcG9ydCB0byB0aGUgTW90b3Jjb21tIFlUOTIxNSBFdGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIuIFRoZSBjb2RlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYC4gVGhlIHBhdGNoIHJlbmFtZXMgYSBmaWxlIGFuZCBpbnRyb2R1Y2VzIGBsZWRzLmNgIGFuZCBgc21pLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHRoaXMgaXMgZm9yIGEgKnNwZWNpZmljKiBzd2l0Y2ggY2hpcCwgdGhlIFlUOTIxNS4gVGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/CgpUeXBpY2FsbHksIHRoZXNlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIGRldmljZXMsIGhvb2tlZCB1cCB0aHJvdWdoIE1ESU8gb3IgU1BJLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgYXJlbiYjMzk7dCBlYXNpbHkgZW11bGF0ZWQgb3IgZnV6emVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi52ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2guLi4mIzM0Oy4gVGhpcyBzZWVtcyBsaWtlIGl0ICpjb3VsZCogZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnksIGFzIHRoaXMgaXMgYSBEU0Egc3dpdGNoIGNoaXAgY29tbXVuaWNhdGluZyB2aWEgTURJTy4KCkJ1dCwgSSBrbm93IE1ESU8gZGV2aWNlcyAqY2FuKiBiZSBmdXp6ZWQsIHRoZW9yZXRpY2FsbHkuIElzIGl0IHBvc3NpYmxlIHdpdGggKnRoaXMqIHBhcnRpY3VsYXIgY2hpcD8gVXN1YWxseSwgTURJTyBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgZHVtbXkgTURJTyBidXMgc2V0dXAuIFdhaXQsIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyICpoYXMqIHNvbWUgTURJTy9QSFkgZnV6emluZyBjYXBhYmlsaXRpZXMsIHRob3VnaCBtYXliZSBpdCYjMzk7cyB2ZXJ5IGxpbWl0ZWQgb3IgZXZlbiBub24tZXhpc3RlbnQuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cC4gVGhlIGluc3RydWN0aW9ucyBkb24mIzM5O3QgKmV4cGxpY2l0bHkqIGV4Y2x1ZGUgTURJTy9JMkMvU1BJIGRldmljZXMgdW5sZXNzIHRoZXkmIzM5O3JlIHRpZWQgdG8gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2guLi4mIzM0Oy4gQWxzbywgSSByZW1lbWJlciB0aGUgb3RoZXIgbGluZTogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uJiMzNDsuIENhbiAqdGhpcyogRFNBIHN3aXRjaCBiZSByZWFjaGVkIGluIFFFTVU/IFRoZXNlIHVzdWFsbHkgcmVxdWlyZSBEZXZpY2UgVHJlZSBub2RlcyB0byBiaW5kLiBDYW4gU3l6a2FsbGVyIGluamVjdCB0aG9zZSBub2RlcyB0aHJvdWdoIGBzeXpfZGV2bGlua2Agb3Igc2ltaWxhcj8gTm8sIHVzdWFsbHkgbm90LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgZGV2aWNlIHRyZWVzLCB0aG91Z2ggaXQgY2FuIGxvYWQgc29tZSBvdmVybGF5cyBpZiBjb25maWd1cmVkLgoKVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlZ2lzdGVycyBpdHNlbGYgYXMgYW4gTURJTyBkZXZpY2UuIEkgaGF2ZSB0byBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY2AgdG8gc2VlIGhvdyBpdCByZWdpc3RlcnMuIEFoLCBoZXJlIGl0IGlzOgoKYGBgYwpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHsKCS5tZGlvZHJ2LmRyaXZlciA9IHsKCQkubmFtZSA9IFlUOTIxWF9OQU1FLAoJCS5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCwKCX0sCgkucHJvYmUgID0geXQ5MjF4X21kaW9fcHJvYmUsCgkucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLAp9OwpgYGAKClNvIGl0JiMzOTtzIGFuIE1ESU8gZHJpdmVyLiBDYW4gYW4gTURJTyBkcml2ZXIgbGlrZSB0aGlzIGFjdHVhbGx5IGJlIHByb2JlZCBpbiBRRU1VICp3aXRob3V0KiBzcGVjaWZpYyBoYXJkd2FyZT8gVHlwaWNhbGx5LCBNRElPIGRldmljZXMgYXJlIHByb2JlZCB3aGVuIHRoZSBNRElPIGJ1cyBzY2FucyB0aGVtIG9yIHZpYSB0aGUgZGV2aWNlIHRyZWUuIFdpdGhvdXQgZWl0aGVyLCB0aGUgcHJvYmUgd29uJiMzOTt0IGJlIGNhbGxlZC4gQ291bGQgU3l6a2FsbGVyIHRyaWdnZXIgYSBwcm9iZSBzb21laG93LCBtYXliZSB0aHJvdWdoIG5ldGxpbmsgb3Igc3lzZnM/IFByb2JhYmx5IG5vdC4KCkJ1dCB3YWl0ISBUaGlzIHBhdGNoICphZGRzKiBMRUQgc3VwcG9ydCB0byB0aGUgRFNBIHN3aXRjaCEgTEVEcyBhcmUgZXhwb3NlZCB2aWEgdGhlIExFRCBzdWJzeXN0ZW0gYW5kIGAvc3lzL2NsYXNzL2xlZHMvYC4gSWYgdGhlIGRldmljZSAqaXMqIHByb2JlZCwgSSBzaG91bGQgYmUgYWJsZSB0byBjb250cm9sIHRoZSBMRURzIHZpYSBzeXNmcy4gKkJ1dCBjYW4gaXQgYmUgcHJvYmVkIGluIHRoZSBmaXJzdCBwbGFjZT8qCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBTeXprYWxsZXIgc3VwcG9ydCBmb3IgTURJTyBvciBEU0EuIEkmIzM5O2xsIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgeXQ5MjF4YCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIGRyaXZlciwgb3IgaWYgaXQmIzM5O3MgcHVyZWx5IGhhcmR3YXJlLWRlcGVuZGVudC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gYXNzZXNzaW5nIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjYxOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuTUFJTlRBSU5FUlM9MTgyNDA9UzpcdE1haW50YWluZWRcbk1BSU5UQUlORVJTOjE4MjQxOkY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuTUFJTlRBSU5FUlM6MTgyNDM6RjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG5NQUlOVEFJTkVSUy0xODI0NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6Mzp5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NDp5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZTo1Onl0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI6c3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMy1cdHVuc2lnbmVkIGludCBzaXplO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE6LyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWJcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyLSAqXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDYtICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OC1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk4LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTk6c3RydWN0IHl0OTIxeF9pbmZvIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwMC1cdGNvbnN0IGNoYXIgKm5hbWU7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA2LVx0dTE2IGludGVybmFsX21hc2s7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDc6XHQvKiBUT0RPOiBzZWUgY29tbWVudHMgaW4geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzKCkgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwOC1cdHUxNiBleHRlcm5hbF9tYXNrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE2NTpzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2Ni1cdHN0cnVjdCBtaWlfYnVzICpidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTgxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTgyOiNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTgzLSNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTE5MD1zdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE5NTpzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5Ni17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTc6XHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5OC1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyMzY6c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fd3JpdGUodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzNy17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyMzg6XHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzOS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzI6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfcmVnX29wcyB5dDkyMXhfcmVnX29wc19tZGlvID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjczOlx0LnJlYWQgPSB5dDkyMXhfcmVnX21kaW9fcmVhZCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3NDpcdC53cml0ZSA9IHl0OTIxeF9yZWdfbWRpb193cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3NS19O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3OTpzdGF0aWMgaW50IHl0OTIxeF9pbnRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjgyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjgzOlx0cmV0dXJuIHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJULFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg0LVx0XHRcdCAgICAgICBcdTAwMjZ2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTI4Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyODg6eXQ5MjF4X2ludGlmX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yOTUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyOTY6XHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI5Ny1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzAzLVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMwNDpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA1LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwNi1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMwNzpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDgtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMxMTpcdHJlcyA9IHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEyLVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMy1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMxNDpcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfSU5UX01CVVNfRElOLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzE1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zMjY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI3Onl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzI4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMzM6XHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMzNC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQwLVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfV1JJVEU7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDE6XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0Mi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDQ6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9JTlRfTUJVU19ET1VULCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ1LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0Ni1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM0NzpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDgtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1MC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1MTpcdHJldHVybiB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Mi19XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTQ6c3RhdGljIGludCB5dDkyMXhfbWJ1c19pbnRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTUte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzU2Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzU3LVx0dTE2IHZhbDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNjMtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzY0Olx0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgcmVnLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzY1LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM3Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNzM6eXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNzQte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mzc1Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzc2LVx0aW50IHJlcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zODEtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzgyOlx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIHJlZywgZGF0YSk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zODMtXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9Mzg4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM4OTp5dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDEtXHRtYnVzLVx1MDAzZXByaXYgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDAyOlx0bWJ1cy1cdTAwM2VyZWFkID0geXQ5MjF4X21idXNfaW50X3JlYWQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDM6XHRtYnVzLVx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfaW50X3dyaXRlO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA0LVx0bWJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE2OnN0YXRpYyBpbnQgeXQ5MjF4X2V4dGlmX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTktXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjA6XHRyZXR1cm4geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjEtXHRcdFx0ICAgICAgIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDI0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNTp5dDkyMXhfZXh0aWZfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQzMi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQzMzpcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDM0LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDAtXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9UWVBFX0MyMiB8IFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0MTpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQyLVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0My1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0NDpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDUtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0ODpcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ5LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MC1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1MTpcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfRVhUX01CVVNfRElOLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUyLVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDY0Onl0OTIxeF9leHRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjktXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzA6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3LVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfVFlQRV9DMjIgfCBZVDkyMVhfTUJVU19DVFJMX1dSSVRFO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc4Olx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfRVhUX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzktXHRpZiAocmVzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgwLVx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDgxOlx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX01CVVNfRE9VVCwgdmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4Mi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0ODQ6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0ODg6XHRyZXR1cm4geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODktfVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDkwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDkxOnN0YXRpYyBpbnQgeXQ5MjF4X21idXNfZXh0X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDkyLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5MzpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5NC1cdHUxNiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDk3LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5ODpcdHJlcyA9IHl0OTIxeF9leHRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5OS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MDY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTA3Onl0OTIxeF9tYnVzX2V4dF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTA4LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUwOTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxMC1cdGludCByZXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTEyLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUxMzpcdHJlcyA9IHl0OTIxeF9leHRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTE0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUxOT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MjA6eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUyMS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTMzLVx0LyogVE9ETzogYzQ1PyAqL1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM0Olx0bWJ1cy1cdTAwM2VyZWFkID0geXQ5MjF4X21idXNfZXh0X3JlYWQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MzU6XHRtYnVzLVx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfZXh0X3dyaXRlO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM2LVx0bWJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTQ3LS8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU0ODpzdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTQ5LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1MDpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTUxLVx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTUyOlx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1My1cdGludCByZXMgPSAwO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU0LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTU1Olx0LyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCYjMzk7cyB2YWluXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTYtXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTYyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTYzOlx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NjQ6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTY1LVx0XHR1MzIgcmVnID0gWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgJiM0MzsgZGVzYy1cdTAwM2VvZmZzZXQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTY5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTcwOlx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2YWwwKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU3MS1cdFx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01ODItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1ODM6XHRcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCBcdTAwMjZ2YWwxKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU4NC1cdFx0XHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwNzpzdGF0aWMgdm9pZCB5dDkyMXhfcG9sbF9taWIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjA4LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwOTpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9wb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjEwLVx0XHRcdFx0XHRcdCAgICBtaWJfcmVhZC53b3JrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9ICh2b2lkICopKHBwIC0gcHAtXHUwMDNlaW5kZXgpIC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMjpcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjEzLVx0dW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxNy1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTg6XHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTktXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjI2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2Mjc6eXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjI4LVx0XHQgICAgICAgdWludDhfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MzM6XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYzNDpcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjQxPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDI6eXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY0My17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDQ6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDU6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NjpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDctXHRzaXplX3Qgajtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDktXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjUwOlx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjUxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1My1cdGogPSAwO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjU0Olx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTU6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjU2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY2NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY2NTpzdGF0aWMgaW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NjYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY3MjpcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjczOlx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz02ODI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4Mzp5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODQtXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODUte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg2Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg3Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODg6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjkwLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY5MTpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY5Mi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz03MTg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcxOTp5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzIwLVx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzIxLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyMjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyMzpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzI0Olx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyNi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3Mjc6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjgtXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzM0LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgeXQ5MjF4X3Jtb25fcmFuZ2VzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MzYtXHR7IDAsIDY0IH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzQ2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NDc6eXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzQ4LVx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTAte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUxOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUyOlx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTM6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU0LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU1LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1NjpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1Ny1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1OTpcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NjAtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzgzPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODQ6eXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzg1LVx0XHQgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc4Ni17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODc6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODg6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4OTpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03OTAtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODE5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4MjA6eXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyMS1cdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjIte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODIzOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI0Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4MjU6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI2LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI3LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyODpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyOS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04MzU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODM2Onl0OTIxeF9zZXRfZWVlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg0OS1cdGlmICghIW5ld19tYXNrICE9ICEhcHJpdi1cdTAwM2VlZWVfcG9ydHNfbWFzaykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODUwOlx0XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfRlVOQyxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1MS1cdFx0XHRcdFx0ICAgICBZVDkyMVhfUE9OX1NUUkFQX0VFRSwgISFuZXdfbWFzayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODUzLVx0XHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NTQ6XHRcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX1BPTl9TVFJBUF9WQUwsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTUtXHRcdFx0XHRcdCAgICAgWVQ5MjFYX1BPTl9TVFJBUF9FRUUsICEhbmV3X21hc2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2Mi1cdC8qIEVuYWJsZSAvIGRpc2FibGUgcG9ydCBFRUUgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg2MzpcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRV9DVFJMLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY0LVx0XHRcdFx0ICAgICBZVDkyMVhfRUVFX0NUUkxfRU5uKHBvcnQpLCBlbmFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2Ni1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg2NzpcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRW5fVkFMKHBvcnQpLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY4LVx0XHRcdFx0ICAgICBZVDkyMVhfRUVFX1ZBTF9EQVRBLCBlbmFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTg3NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NzY6eXQ5MjF4X2RzYV9zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODc3LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg3ODpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg3OS1cdGludCByZXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgxLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4MjpcdHJlcyA9IHl0OTIxeF9zZXRfZWVlKHByaXYsIHBvcnQsIGUpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4ODpzdGF0aWMgaW50IHl0OTIxeF9tdHVfZmV0Y2goc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODk1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg5Njp5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbmV3X210dSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg5Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTAyOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAzLVx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTEtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTEyOlx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTUFDbl9GUkFNRShwb3J0KSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxMy1cdFx0XHRcdCAgICAgWVQ5MjFYX01BQ19GUkFNRV9TSVpFX00sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTE5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTIwOnN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9wb3J0X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkyMS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTUzPXN0YXRpYyB1NjQgdG9rZW4yYnVyc3QodTMyIHRva2VuLCBpbnQgdW5pdCwgaW50IEMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTU3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTU4OnN0cnVjdCB5dDkyMXhfbWFya2VyIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1OS1cdHUzMiBjaXI7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTY5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MDp5dDkyMXhfbWFya2VyX3RmbShzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyLCB1NjQgcmF0ZSwgdTY0IGJ1cnN0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTcxLVx0XHQgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNsb3RfbnMsIHUzMiBjaXJfbWF4LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTcyOlx0XHQgIHUzMiBjYnNfbWF4LCBpbnQgdW5pdF9tYXgsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzMtXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3Ny1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3ODpcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzktXHR1NjQgYnVyc3RfZXN0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk5OS1cdGVsc2VcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwMDA6XHRcdGJ1cnN0X3N1ZyAmIzQzOz0gRVRIX0hMRU4gJiM0MzsgeXQ5MjF4X210dV9mZXRjaChwcml2LCBwb3J0KSAmIzQzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTAwMS1cdFx0XHQgICAgIEVUSF9GQ1NfTEVOO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTEwNTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA2MDp5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2Uoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcixcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjEtXHRcdFx0IGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNjI6XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDczLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA3NDpcdHJldHVybiB5dDkyMXhfbWFya2VyX3RmbShtYXJrZXIsIHJhdGUsIGJ1cnN0LCBmbGFncyxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNzUtXHRcdFx0XHQgcHJpdi1cdTAwM2VtZXRlcl9zbG90X25zLCBZVDkyMVhfTUVURVJfQ0lSX01BWCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDgwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODE6eXQ5MjF4X21hcmtlcl90Zm1fc2hhcGUoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODI6XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4My1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg0LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODU6XHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg2LVx0XHRcdFx0IHByaXYtXHUwMDNlcG9ydF9zaGFwZV9zbG90X25zLCBZVDkyMVhfU0hBUEVfQ0lSX01BWCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDkxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwOTI6eXQ5MjF4X3BvbGljZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDkzLVx0XHQgICAgICAgY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTEyNz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI4Onl0OTIxeF9tZXRlcl9jb25maWcoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI5Olx0XHQgICAgY29uc3Qgc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExMzAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNDctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTQ4Olx0cmV0dXJuIHl0OTIxeF9yZWc5Nl93cml0ZShwcml2LCBZVDkyMVhfTUVURVJuX0NUUkwoaWQpLCBjdHJscyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTQ5LX1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTUxOnN0YXRpYyB2b2lkIHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1Mi17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTUzOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1NC1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU3LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNTg6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9QT1JUbl9NRVRFUihwb3J0KSwgMCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU5LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExNjY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE2Nzp5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNjgtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTcwLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzE6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcyOlx0c3RydWN0IHl0OTIxeF9tYXJrZXIgbWFya2VyO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3My1cdHUzMiBjdHJsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTc2Olx0cmVzID0geXQ5MjF4X3BvbGljZV92YWxpZGF0ZShwb2xpY2UsIE5VTEwsIE5VTEwsIGV4dGFjayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc3LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4MDpcdHJlcyA9IHl0OTIxeF9tYXJrZXJfdGZtX3BvbGljZShcdTAwMjZtYXJrZXIsIHBvbGljZSwgMCwgcHJpdiwgcG9ydCwgZXh0YWNrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODEtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODQtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4NTpcdHJlcyA9IHl0OTIxeF9tZXRlcl9jb25maWcocHJpdiwgcG9ydCAmIzQzOyBZVDkyMVhfTUVURVJfTlVNLCBcdTAwMjZtYXJrZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4Ni1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4OS1cdGN0cmwgPSBZVDkyMVhfUE9SVF9NRVRFUl9JRChwb3J0KSB8IFlUOTIxWF9QT1JUX01FVEVSX0VOO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE5MDpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX01FVEVSKHBvcnQpLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExOTEtZW5kOlxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTAxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgRFNBIERyaXZlciBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8mIzM0OyBUaGUgY29kZSByZWdpc3RlcnMgYW4gTURJTyBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYC4gU3BlY2lmaWNhbGx5LCBgeXQ5MjF4X21kaW9fZHJpdmVyYCBpcyByZWdpc3RlcmVkLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgc3l6a2FsbGVyJiMzOTtzIGxpbWl0YXRpb25zLiBJdCBkb2VzbiYjMzk7dCBoYXZlIGEgYnVpbHQtaW4gbWV0aG9kIHRvIGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzLCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlLCBvciBtYXliZSBzb21lIERldmljZSBUcmVlIG1hZ2ljLiBXaGlsZSBzeXprYWxsZXIgc3VwcG9ydHMgdGhpbmdzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBldGMuLCBkb2VzIGl0IHN1cHBvcnQgTURJTyBkZXZpY2VzPyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9uIGZvciBEU0Egb3IgTURJTyBkaXJlY3RseS4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCBhbmQgc2VhcmNoIGluIGBzeXMvbGludXgvYCBmb3IgYHl0OTIxeGAsIG9yIGNoZWNrIHRoZSBzeXprYWxsZXIgY29uZmlncyBmb3IgYENPTkZJR19ORVRfRFNBX1lUOTIxWGAuCgpCdXQsIHdhaXQgYSBtaW51dGUsIHRoZSBpbnN0cnVjdGlvbnMgaGVyZSBzcGVjaWZ5IHRoYXQgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBhIERTQSBzd2l0Y2ggZHJpdmVyIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gRFNBIGRyaXZlcnMgYXJlIG9mdGVuIHBsYXRmb3JtLXNwZWNpZmljIG9yIGRlcGVuZCBvbiBNRElPL0kyQy9TUEkgaW50ZXJmYWNlcy4gUUVNVSBkZWZpbml0ZWx5IGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIE1vdG9yY29tbSBZVDkyMTUgaGFyZHdhcmUuIEJ1dCwgY2FuIEkgaW5zdGFudGlhdGUgYSBEU0Egc3dpdGNoIHZpYSBhIGR1bW15IE1ESU8gYnVzPyBUaGVyZSYjMzk7cyBgZHNhX2xvb3BgLCB3aGljaCBpcyBhIGR1bW15IERTQSBzd2l0Y2gsIGJ1dCBgeXQ5MjF4YCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4KCkhvdyBjYW4gSSBwcm9iZSBgeXQ5MjF4YCBpbiBRRU1VPyBObyB3YXkuIEl0IHJlcXVpcmVzIGFuIE1ESU8gYnVzIGFuZCBhIERldmljZSBUcmVlIG5vZGUgbWF0Y2hpbmcgYG1vdG9yY29tbSx5dDkyMXhgLCBhbmQgYXMgZmFyIGFzIEkga25vdywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGluamVjdCBhcmJpdHJhcnkgRGV2aWNlIFRyZWUgbm9kZXMuIFNvLCBubyBsdWNrIHRoZXJlLgoKSGFuZyBvbi4uLiB0aGUgcGF0Y2ggYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gVGhpcyBpcyBhICpzaW11bGF0ZWQqIHBhdGNoLiBPa2F5LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgcGF0Y2ggYWdhaW4uIEl0IGFkZHMgTEVEIHN1cHBvcnQgdG8gdGhlIGB5dDkyMXhgIGRyaXZlci4gSG1tLCBpcyBpdCBwb3NzaWJsZSB0aGF0IHN5emthbGxlciAqY2FuKiByZWFjaCB0aGlzPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgeXQ5MjF4YCBpcyBhIHJlYWwgZHJpdmVyIGluIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gZXhlY3V0ZSB0aGUgYWRkZWQgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCBjb2RlLgoKSWYgSSBjYW4mIzM5O3QgcmVhY2ggdGhpcyBjb2RlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgc3dpdGNoIGNoaXAgdGhhdCYjMzk7cyAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLCBpdCYjMzk7cyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgb25lIG1vcmUgdGltZSBpZiB0aGVyZSYjMzk7cyAqYW55KiBRRU1VIGVtdWxhdGlvbiBmb3IgYHl0OTIxeGAuLi4ganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIE5vcGUuIFZlcmRpY3Q6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdG9yY29tbSx5dDkyMXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuTUFJTlRBSU5FUlM9MTgyNDA9UzpcdE1haW50YWluZWRcbk1BSU5UQUlORVJTOjE4MjQxOkY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NjI4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBgbW90b3Jjb21tLHl0OTIxeGAgRHJpdmVyKioKCk9rYXksIHNvIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGlzIGBtb3RvcmNvbW0seXQ5MjF4YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBkcml2ZXI/IFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gUUVNVSBhbmQgbGFjayB2aXJ0dWFsIGNvdW50ZXJwYXJ0cywgY2FuJiMzOTt0IGJlIGZ1enplZCBieSBzeXprYWxsZXIgYmVjYXVzZSB0aGV5IG5lZWQgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTttIHRoaW5raW5nLCBjb3VsZCBzeXprYWxsZXIgcGVyaGFwcyBwcm9iZSBNRElPIGRyaXZlcnMgYnkgcmVnaXN0ZXJpbmcgYSBkdW1teSBidXMgYW5kIGRldmljZT8gVGhhdCYjMzk7cyBhIHBvc3NpYmlsaXR5LCBidXQgSSBrbm93IHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBNRElPIGZ1enplci4KCkxldCBtZSBjaGVjay4gSSBuZWVkIHRvIGZpbmQgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uLiBJIGNhbiYjMzk7dCByZWFkIHRoZSBkZXNjcmlwdGlvbnMgZGlyZWN0bHksIGJ1dCBJIGNhbiYjMzk7dCB1c2UgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBtZGlvYCBpbiBgc3lzL2xpbnV4L2AgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IG5vcm1hbGx5IGZ1enogYXJiaXRyYXJ5IE1ESU8gaGFyZHdhcmUgZHJpdmVycyBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGRldmljZSB0cmVlIG5vZGVzIGZvciBiaW5kaW5nLiBXaGF0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgSTJDIG9yIFNQST8gU2FtZSBwcm9ibGVtOiBkZXZpY2UgdHJlZSBvciBib2FyZCBpbmZvIGlzIHJlcXVpcmVkLiBBbmQgd2hhdCBhYm91dCBQQ0k/IFBDSSBkcml2ZXJzICpjYW4qIGJlIHByb2JlZCBpZiBRRU1VIGVtdWxhdGVzIHRoZSBQQ0kgZGV2aWNlLCBidXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGB5dDkyMXhgLgoKV2FpdCwgSSBqdXN0IHJlYWxpemVkLCBgeXQ5MjF4YCAqaXMqIGFuIE1ESU8gZHJpdmVyLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHsKCS5tZGlvZHJ2LmRyaXZlciA9IHsKCQkubmFtZSA9IFlUOTIxWF9OQU1FLAoJCS5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCwKCX0sCgkucHJvYmUgID0geXQ5MjF4X21kaW9fcHJvYmUsCgkucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLAp9OwpgYGAKClRoaXMgY29uZmlybXMgaXQuIFNpbmNlIGl0JiMzOTtzIGFuIE1ESU8gZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBzd2l0Y2gsIGFuZCB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgTW90b3Jjb21tIFlUOTIxNSwgdGhlIGBwcm9iZWAgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byBpbnN0YW50aWF0ZSBhbiBNRElPIGRldmljZSBmcm9tIHVzZXJzcGFjZS4gYFNJT0NTTUlJUkVHYCBleGlzdHMsIGJ1dCB0aGF0JiMzOTtzIGZvciByZWFkaW5nL3dyaXRpbmcgcmVnaXN0ZXJzLCBub3QgY3JlYXRpbmcgZGV2aWNlcy4gVW5saWtlIEkyQywgTURJTyBkb2VzbiYjMzk7dCBoYXZlIGEgYC9zeXMvYnVzL21kaW9fYnVzL2RldmljZXMvbmV3X2RldmljZWAgZm9yIGNyZWF0aW5nIGRldmljZXMuIFdhaXQsIGRvZXMgTURJTyBoYXZlIHNvbWV0aGluZyBzaW1pbGFyPyBMZXQgbWUgY2hlY2sgaWYgdGhlIE1ESU8gYnVzIGhhcyBgbmV3X2RldmljZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXdfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgZm9yIE1ESU8gQnVzIERyaXZlciBDb25maWd1cmF0aW9uKioKCkhtbSwgbm8gc2lnbiBvZiBgbmV3X2RldmljZWAgYmVpbmcgZGVmaW5lZCBvciB1c2VkIGRpcmVjdGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aGVyZS4gSXQgc3VnZ2VzdHMgdGhlIE1ESU8gYnVzIGl0c2VsZiwgdGhlIGZ1bmRhbWVudGFsIGluZnJhc3RydWN0dXJlIGZvciBhY2Nlc3NpbmcgUEhZcywgbWlnaHQgYmUgaGFuZGxpbmcgdGhlIGRldmljZSBjcmVhdGlvbi4gR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIE1ESU8gYnVzIGRyaXZlciBpbXBsZW1lbnRhdGlvbiwgYW5kIHBvdGVudGlhbGx5LCB0aGUgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgcmVzcG9uc2libGUgZm9yIGF0dGFjaGluZyBuZXcgUEhZIGRldmljZXMgdG8gdGhlIGJ1cy4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBgbmV3X2RldmljZWAgbG9naWMsIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgd2lsbCByZXNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5mdXp6YWJsZSBEcml2ZXI6IFlUOTIxeCoqCgpPa2F5LCBzbyBpdCYjMzk7cyBjbGVhcjogdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyB3YXkgdG8gaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlcXVpcmVkIGJ5IHRoZSBgeXQ5MjF4YCBkcml2ZXIsIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1lYW5zIEkgY2FuJiMzOTt0IGV2ZW4gKmJlZ2luKiB0byBwcm9iZSB0aGlzIGRyaXZlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXaXRob3V0IGRlZGljYXRlZCBoYXJkd2FyZSBvciBhIHZlcnkgc3BlY2lmaWMgUUVNVSBzZXR1cCB3aXRoIGVtdWxhdGlvbiBvZiB0aGUgTW90b3Jjb21tIFlUOTIxNSAod2hpY2ggZG9lc24mIzM5O3QgZXhpc3QpLCB0aGlzIGRyaXZlciBpcyBzaW1wbHkgdW5yZWFjaGFibGUuIFNpbmNlIGZ1enppbmcgcmVsaWVzIG9uIGVudmlyb25tZW50IHJlYWNoYWJpbGl0eSwgdGhpcyBpcyBhIGNsZWFyIHJvYWRibG9jay4KCkxldCBtZSBqdXN0IHJlZnJlc2ggdGhlIGluc3RydWN0aW9ucyBpbiBteSBtaW5kOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlIGVtdWxhdGlvbnMuJiMzNDsKClllcCwgaXQmIzM5O3MgYSBwZXJmZWN0IGZpdC4gVGhpcyBgeXQ5MjF4YCBkcml2ZXIgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBNRElPIGRyaXZlciBmb3IgYSBEU0Egc3dpdGNoIGNoaXAuIEl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBoYXJkd2FyZSBhbmQganVzdCAqY2FuJiMzOTt0KiBiZSBwcm9iZWQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gR2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKSSYjMzk7bGwganVzdCBkb3VibGUtY2hlY2sgdGhhdCBpdCBpcyBhbiBNRElPIGRyaXZlci4gSnVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBjb25maXJtZWQhIEkmIzM5O20gZ29vZCB0byBnbyB3aXRoIHRoZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3NzA9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzcyOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3My1cdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzgyOm1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4OTQKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBEcml2ZXIgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBkcml2ZXIuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IHRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgdGhpcyBkcml2ZXIsIGFuZCBiYXNlZCBvbiBteSBwcmlvciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLCB0aGUgY29tcGxleGl0aWVzIG9mIHRoZSBzeXN0ZW0gaXQgaXMgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGZ1enppbmcgYXQgdGhpcyBzdGFnZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gbWFraW5nIGEgY2FsbCBoZXJlLiBVc2luZyBgc2V0LXJlc3VsdHNgLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQmFzaWNhbGx5LCBJ4oCZbSBzYXlpbmcgdGhhdCBiYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGlzIGRyaXZlciBhbmQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncywgZnV6emluZyBpdCBpc24mIzM5O3QgbGlrZWx5IHRvIHlpZWxkIHNpZ25pZmljYW50IHJlc3VsdHMgKmF0IHRoaXMganVuY3R1cmUqLiBGdXJ0aGVyIGRvd24gdGhlIGxpbmUsIGRlcGVuZGluZyBvbiBmaW5kaW5ncywgdGhlIGRyaXZlciBtYXkgYmVjb21lIHJlbGV2YW50IHRvIGZ1enosIGJ1dCBmb3Igbm93LCBJJiMzOTtsbCBwYXNzIG9uIHRoZSBmdXp6IGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMTo1Ni44Mzg1OTc1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODEwMzU5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBNRElPIGRldmljZS4gU2luY2UgdGhlcmUgaXMgbm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgYW5kIE1ESU8gZGV2aWNlcyBjYW5ub3QgYmUgYXJiaXRyYXJpbHkgaW5zdGFudGlhdGVkIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDKSwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCBpdHMgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMTo1Ni44Mzg2MDU5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTkyODAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZDNjZWM4NTY0YzFlOGIwNzkwZjFjODg1OWIxZTYwNjlkNjc2MjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDI6MzE6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGI3MmQyYmQwN2YwODgyLi5mYmFhNTkwYTNhMjJkMyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4MjM5LDcgKzE4MjM5LDcgQEAgTTpcXHREYXZpZCBZYW5nIFxcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcXG4tRjpcXHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcXG4rRjpcXHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xcbiBGOlxcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXFxuIFxcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1xcXCJcXG4gXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxcIlxcbitcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcXFwiXFxuIFxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXFxcIlxcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxcbiBcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XFxuIFxcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcXG4gXFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxcbi1cXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuLVxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4tXFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcXG4tXFx0aGVscFxcbi1cXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4tXFx0ICBjaGlwLlxcbiBlbmRtZW51XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5AQCAtMTQsMTEgKzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGI1My9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBoaXJzY2htYW5uL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGxhbnRpcS9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtaWNyb2NoaXAvXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gbW90b3Jjb21tL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG12ODhlNnh4eC9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBteGw4NjJ4eC9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBuZXRjL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXG5AQCAtMCwwICsxLDE3IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4rXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4rXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbitcXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbitcXHQgIGNoaXAuXFxuK1xcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xcbitcXHRib29sIFxcXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVxcXCJcXG4rXFx0ZGVmYXVsdCB5XFxuK1xcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcXG4rXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxcbitcXHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmUyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcXG5AQCAtMCwwICsxLDUgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4reXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbkBAIC0xMyw3ICsxMyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2hzci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuQEAgLTI2LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMXEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwieXQ5MjF4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4gXFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbiBcXHR7fVxcbiB9O1xcbiBcXG4tI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuLVxcbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXFx0NDA5NVxcbiBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1xcdDEwMDAwXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1xcdDEwMDAwMFxcbi1cXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cXG4gICpcXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbiBcXHRyZXR1cm4gKGFkZHJbNF0gXFx1MDAzY1xcdTAwM2MgOCkgfCBhZGRyWzVdO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2V3cml0ZShwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4te1xcbi1cXHR1MzIgdmFsO1xcbi1cXHRpbnQgcmVzO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuLVxcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuLVxcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbi1cXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdCp2YWxwID0gdmFsO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFx0dTMyIHY7XFxuLVxcdHUzMiB1O1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnYpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0dSA9IHY7XFxuLVxcdHUgXFx1MDAyNj0gfm1hc2s7XFxuLVxcdHUgfD0gdmFsO1xcbi1cXHRpZiAodSA9PSB2KVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcXG4tfVxcbi1cXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxcbi0gKlxcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXFxuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cXG4tICovXFxuLVxcbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxcbi17XFxuLVxcdCpsbyBcXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmhpIFxcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xcbi1cXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuLVxcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXFxuLVxcdFxcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0dSB8PSB2YWxzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxcbiB7XFxuIFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbkBAIC00Nzg2LDYgKzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0aWYgKHJlcylcXG4gXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiRmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxcXG5cXFwiLCByZXMpO1xcbisjZW5kaWZcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00ODg2LDYgKzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFx0aWYgKCFwcml2KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xcbisjZW5kaWZcXG4rXFxuIFxcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaS0tIFxcdTAwM2UgMDsgKSB7XFxuIFxcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbnNpbWlsYXJpdHkgaW5kZXggOTklXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLmRlNDE0MzA1NzkzMTNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuQEAgLTg1MCw5ICs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XFxuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cXHRcXHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVxcdFxcdDhcXG4gXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cXHQzXFxuK1xcbiAvKiA4IGludGVybmFsICsgMiBleHRlcm5hbCArIDEgbWN1ICovXFxuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXFx0XFx0XFx0MTFcXG4gXFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbitcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCBcXHUwMDNjPSAocG9ydCkgXFx1MDAyNlxcdTAwMjYgKHBvcnQpIFxcdTAwM2MgOSlcXG4gXFxuQEAgLTkzOCw2ICs5NDIsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcXG4gXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbiBcXHR1NjQgcnhfZnJhbWVzO1xcbiBcXHR1NjQgdHhfZnJhbWVzO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODVjOWJiMTM5ZWFkODlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5AQCAtMCwwICsxLDY0NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bGVkcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cXHUwMDNlcG9ydClcXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVxcdTAwM2VpbmRleF0pXFxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXFx1MDAzZWRzLmRldilcXG4rXFxuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcXG4re1xcbitcXHRzd2l0Y2ggKGdyb3VwKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCpvbnAgPSAodmFsIFxcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY3RybCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgY2hhciAqZHV0eXApXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eTtcXG4rXFxuK1xcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XFxuK1xcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXFxuK1xcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRmb3IgKDsgY3ljbGUgXFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2U9IDEsIGN5Y2xlIFxcdTAwM2VcXHUwMDNlPSAxKVxcbitcXHRcXHRpZiAoY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHQqY3ljbGVwID0gY3ljbGU7XFxuK1xcbitcXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXFxuK1xcdFxcdFxcdFxcdCAgICAgKG9uIFxcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxcbitcXHRcXHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFxcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XFxuK1xcdFxcdFxcdGR1dHkgPSBkdXR5c1tpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0aWYgKG9uIFxcdTAwM2Ugb2ZmKVxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcXG4rXFx0KmR1dHlwID0gZHV0eTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZHV0eTtcXG4rXFx0Ym9vbCB1c2VfY3ljbGU7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghKm9ucCBcXHUwMDI2XFx1MDAyNiAhKm9mZnApIHtcXG4rXFx0XFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSsrKVxcbitcXHRcXHRcXHRpZiAoaSAhPSBncm91cCBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSB7XFxuK1xcdFxcdFxcdFxcdGR1dHkgPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfY3ljbGU7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2R1dHk7XFxuK1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXFx1MDAyNmN5Y2xlLCBcXHUwMDI2ZHV0eSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBjeWNsZSBcXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgY3ljbGUgIT0gcHAtXFx1MDAzZWxlZF9jeWNsZTtcXG4rXFx0XFx0Y2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcXG4rXFx0XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcXG4rXFx0XFx0XFx0ICAgICBpKyspIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGkgPT0gZ3JvdXAgfHwgIXBwLVxcdTAwM2VsZWRzW2ldKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0aWYgKChjaGFuZ2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9jeWNsZSkgfHxcXG4rXFx0XFx0XFx0XFx0ICAgIChjaGFuZ2VfZHV0eSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdGlmICh2YWwgIT0gY3RybCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdHN3aXRjaCAoZHV0eSBcXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAoZHV0eSBcXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xcbitcXHR9XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxcbitcXHRcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdHBwLVxcdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IHRydWU7XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eSA9IGR1dHk7XFxuK1xcbitcXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xcbitcXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIG1hc2s7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCh2YWwgXFx1MDAyNiBtYXAtXFx1MDAzZW1hc2spID09IG1hcC1cXHUwMDNlbWFzaylcXG4rXFx0XFx0XFx0KmZsYWdzcCB8PSBtYXAtXFx1MDAzZWZsYWdzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGN0cmwgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRjdHJsIHw9IG1hcC1cXHUwMDNlbWFzaztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcXG4rXFx0aWYgKGdyb3VwID09IDIpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdH1cXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbWFzaywgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuK1xcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZGVsYXlfb24sXFxuK1xcdFxcdFxcdFxcdCAgIGRlbGF5X29mZik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChcXHUwMDI2cHJpdi1cXHUwMDNlZHMsIHBwLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghZHAgfHwgIWRwLVxcdTAwM2V1c2VyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcbitcXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2Z3JvdXApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoZ3JvdXAgXFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXFxcblxcXCIsIGdyb3VwLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0aWYgKHBwLVxcdTAwM2VsZWRzW2dyb3VwXSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1sb3dcXFwiKTtcXG4rXFx0aWYgKGZvcmNlX2hpZ2ggXFx1MDAyNlxcdTAwMjYgZm9yY2VfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcXG4rXFxuK1xcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbGVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0bGVkLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdGxlZC1cXHUwMDNlZ3JvdXAgPSBncm91cDtcXG4rXFxuK1xcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcXHUwMDI2b24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRldmljZW5hbWUgPSBuYW1lLFxcbitcXHRcXHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxcbitcXHR9O1xcbitcXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXFx1MDAyNmluaXRfZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKHBvbGFyaXR5KSB7XFxuK1xcdFxcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xcbitcXG4rXFx0XFx0Kmludl9tYXNrcCB8PSBiaXQ7XFxuK1xcdFxcdGlmIChwb2xhcml0eSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdCppbnZfY3RybHAgfD0gYml0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXG4rXFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRpZiAobGVkKVxcbitcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgKmludl9tYXNrcCxcXG4rXFx0XFx0ICAgICAgIHUzMiAqaW52X2N0cmxwKVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuK1xcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdGlmICghbGVkc19ucClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7XFxuK1xcdFxcdGlmIChyZXMpIHtcXG4rXFx0XFx0XFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKVxcbitcXHRcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTMyIGludl9jdHJsID0gMDtcXG4rXFx0dTMyIGludl9tYXNrID0gMDtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBwb3J0LCByZXMpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxcbitcXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGludl9tYXNrKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnZfY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcXG4rXFx0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKSB7XFxuK1xcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMTo1OC4wMjk1NDk2MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzYxOTM5NzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgTURJTyBkZXZpY2UuIFNpbmNlIHRoZXJlIGlzIG5vIFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGFuZCBNRElPIGRldmljZXMgY2Fubm90IGJlIGFyYml0cmFyaWx5IGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZSAodW5saWtlIEkyQyksIHRoZSBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTlkM2NlYzg1NjRjMWU4YjA3OTBmMWM4ODU5YjFlNjA2OWQ2NzYyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDAyOjMxOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjcyZDJiZDA3ZjA4ODIuLmZiYWE1OTBhM2EyMmQzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzksNyArMTgyMzksNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbitGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1wiXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXCJcbitcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcIlxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCJcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuLVx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuLVx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0Jcbi1cdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuLVx0ICBjaGlwLlxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5AQCAtMTQsMTEgKzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4gb2JqLXlcdFx0XHRcdCs9IGI1My9cbiBvYmoteVx0XHRcdFx0Kz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0Kz0gbGFudGlxL1xuIG9iai15XHRcdFx0XHQrPSBtaWNyb2NoaXAvXG4rb2JqLXlcdFx0XHRcdCs9IG1vdG9yY29tbS9cbiBvYmoteVx0XHRcdFx0Kz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQrPSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbmV0Yy9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCArMSwxNyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuK1x0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuK1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBjaGlwLlxuK1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4rXHRib29sIFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcIlxuK1x0ZGVmYXVsdCB5XG4rXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4rXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbitcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgKzEsNSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uNTUzZWZhY2Q0ZjVlZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyArMTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ5dDkyMXguaFwiXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgKzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbitcdGlmIChyZXMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cIiwgcmVzKTtcbisjZW5kaWZcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgKzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiBcdGlmICghcHJpdilcbiBcdFx0cmV0dXJuO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuKyNlbmRpZlxuK1xuIFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDU1NTA0NjUyNjY2OTUyLi5kZTQxNDMwNTc5MzEzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC04NTAsOSArODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVx0M1xuK1xuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuK1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG4gXG5AQCAtOTM4LDYgKzk0MiwxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjg1YzliYjEzOWVhZDg5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2NDcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBtYXNrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXG4rfTtcbitcbitzdGF0aWMgYm9vbFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpZiAoIWZsYWdzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbitcdFx0XHQqZmxhZ3NwIHw9IG1hcC1cdTAwM2VmbGFncztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGZsYWdzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuK1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbitcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuK1x0Ym9vbCBmb3JjZV9oaWdoO1xuK1x0Ym9vbCBmb3JjZV9sb3c7XG4rXHRpbnQgcG9sYXJpdHk7XG4rXHR1MzIgZ3JvdXA7XG4rXHRib29sIG9uO1xuK1x0aW50IHJlcztcbitcbitcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwicmVnXCIsIFx1MDAyNmdyb3VwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cIiwgZ3JvdXAsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWhpZ2hcIik7XG4rXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCJhY3RpdmUtbG93XCIpO1xuK1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xuK1xuK1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbGVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4rXHRkZWZhdWx0OlxuK1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcdTAwMjZvbik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuK1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuK1x0fTtcbitcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAocG9sYXJpdHkpIHtcbitcdFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4rXG4rXHRcdCppbnZfbWFza3AgfD0gYml0O1xuK1x0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4rXHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1xuK1x0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1xuK1x0XHRpZiAobGVkKVxuK1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHR9XG4rXG4rXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdGlmIChsZWQpIHtcbitcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTMyICppbnZfbWFza3AsXG4rXHRcdCAgICAgICB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0aWYgKCFsZWRzX25wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcbitcdFx0XHRcdCAgICAgICBpbnZfbWFza3AsIGludl9jdHJscCk7XG4rXHRcdGlmIChyZXMpIHtcbitcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0KyspXG4rXHRcdHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpO1xuK31cbitcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1x0dTMyIGludl9jdHJsID0gMDtcbitcdHUzMiBpbnZfbWFzayA9IDA7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbitcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcbitcdFx0aWYgKCFkcC1cdTAwM2VkbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChwcml2LCBwb3J0LCBcdTAwMjZpbnZfbWFzaywgXHUwMDI2aW52X2N0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXG5cIixcbitcdFx0XHRcdCBwb3J0LCByZXMpO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4rXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuK1x0ICovXG4rXHRpZiAoaW52X21hc2spIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuK1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRnb3RvIGVuZDtcbitcdH1cbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XG4rXG4rZW5kOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJlcykge1xuK1x0XHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4rXHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgKzEsMTIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTEVEU19IXG4rI2RlZmluZSBfWVRfTEVEU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTlx0XHRcdEJJVCgyMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVx0XHRHRU5NQVNLKDE2LCAxMylcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXHRcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcdEJJVCgxNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXHRcdEdFTk1BU0soMjksIDI4KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXHRcdEdFTk1BU0soMjYsIDI1KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcdFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1x0XHRCSVQoMTUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXHRCSVQoMTIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcdFx0QklUKDkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cdFx0QklUKDYpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXHRCSVQoMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcdFx0MHhkMDFjOFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApKSlcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcdDUxMlxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbitcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4rc3RydWN0IHl0OTIxeF9sZWQge1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgY2hhciBncm91cDtcbitcbitcdGJvb2wgdXNlX2N5Y2xlOjE7XG4rXHRib29sIHVzZV9kdXR5OjE7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCArMSwxNTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4rXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4rXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCp2YWxwID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4re1xuK1x0aW50IHJlcztcbitcdHUzMiB2O1xuK1x0dTMyIHU7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHR1ID0gdjtcbitcdHUgXHUwMDI2PSB+bWFzaztcbitcdHUgfD0gdmFsO1xuK1x0aWYgKHUgPT0gdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0dSB8PSB2YWxzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICsxLDg4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfU01JX0hcbisjZGVmaW5lIF9ZVF9TTUlfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4rXHRcdFx0ICAgdTMyIHZhbCk7XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuK31cbitcbisvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4rICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuKyAqXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuKyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbisgKi9cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbit7XG4rXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbitcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbitcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuK1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4rfVxuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzE6NTguMDI5NTUxMzk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNTQxMjgxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQncyBhZGRpbmcgTEVEIHN1cHBvcnQgdG8gdGhlIE1vdG9yY29tbSBZVDkyMTUgRXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyLiBUaGUgY29kZSBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AuIFRoZSBwYXRjaCByZW5hbWVzIGEgZmlsZSBhbmQgaW50cm9kdWNlcyBgbGVkcy5jYCBhbmQgYHNtaS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB0aGlzIGlzIGZvciBhICpzcGVjaWZpYyogc3dpdGNoIGNoaXAsIHRoZSBZVDkyMTUuIFRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBkcml2ZXIgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VP1xuXG5UeXBpY2FsbHksIHRoZXNlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIGRldmljZXMsIGhvb2tlZCB1cCB0aHJvdWdoIE1ESU8gb3IgU1BJLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgYXJlbid0IGVhc2lseSBlbXVsYXRlZCBvciBmdXp6ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnMsIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLnZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC4uLlwiLiBUaGlzIHNlZW1zIGxpa2UgaXQgKmNvdWxkKiBmYWxsIGludG8gdGhhdCBjYXRlZ29yeSwgYXMgdGhpcyBpcyBhIERTQSBzd2l0Y2ggY2hpcCBjb21tdW5pY2F0aW5nIHZpYSBNRElPLlxuXG5CdXQsIEkga25vdyBNRElPIGRldmljZXMgKmNhbiogYmUgZnV6emVkLCB0aGVvcmV0aWNhbGx5LiBJcyBpdCBwb3NzaWJsZSB3aXRoICp0aGlzKiBwYXJ0aWN1bGFyIGNoaXA/IFVzdWFsbHksIE1ESU8gZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkLCB1bmxlc3MgdGhlcmUncyBzb21lIGtpbmQgb2YgZHVtbXkgTURJTyBidXMgc2V0dXAuIFdhaXQsIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyICpoYXMqIHNvbWUgTURJTy9QSFkgZnV6emluZyBjYXBhYmlsaXRpZXMsIHRob3VnaCBtYXliZSBpdCdzIHZlcnkgbGltaXRlZCBvciBldmVuIG5vbi1leGlzdGVudC5cblxuT2theSwgbGV0J3MgYmFjayB1cC4gVGhlIGluc3RydWN0aW9ucyBkb24ndCAqZXhwbGljaXRseSogZXhjbHVkZSBNRElPL0kyQy9TUEkgZGV2aWNlcyB1bmxlc3MgdGhleSdyZSB0aWVkIHRvIFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLi4uXCIuIEFsc28sIEkgcmVtZW1iZXIgdGhlIG90aGVyIGxpbmU6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiLiBDYW4gKnRoaXMqIERTQSBzd2l0Y2ggYmUgcmVhY2hlZCBpbiBRRU1VPyBUaGVzZSB1c3VhbGx5IHJlcXVpcmUgRGV2aWNlIFRyZWUgbm9kZXMgdG8gYmluZC4gQ2FuIFN5emthbGxlciBpbmplY3QgdGhvc2Ugbm9kZXMgdGhyb3VnaCBgc3l6X2RldmxpbmtgIG9yIHNpbWlsYXI/IE5vLCB1c3VhbGx5IG5vdC4gU3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgZGV2aWNlIHRyZWVzLCB0aG91Z2ggaXQgY2FuIGxvYWQgc29tZSBvdmVybGF5cyBpZiBjb25maWd1cmVkLlxuXG5UaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVnaXN0ZXJzIGl0c2VsZiBhcyBhbiBNRElPIGRldmljZS4gSSBoYXZlIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCB0byBzZWUgaG93IGl0IHJlZ2lzdGVycy4gQWgsIGhlcmUgaXQgaXM6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuXHQubWRpb2Rydi5kcml2ZXIgPSB7XG5cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcblx0XHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXG5cdH0sXG5cdC5wcm9iZSAgPSB5dDkyMXhfbWRpb19wcm9iZSxcblx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcbn07XG5gYGBcblxuU28gaXQncyBhbiBNRElPIGRyaXZlci4gQ2FuIGFuIE1ESU8gZHJpdmVyIGxpa2UgdGhpcyBhY3R1YWxseSBiZSBwcm9iZWQgaW4gUUVNVSAqd2l0aG91dCogc3BlY2lmaWMgaGFyZHdhcmU/IFR5cGljYWxseSwgTURJTyBkZXZpY2VzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgc2NhbnMgdGhlbSBvciB2aWEgdGhlIGRldmljZSB0cmVlLiBXaXRob3V0IGVpdGhlciwgdGhlIHByb2JlIHdvbid0IGJlIGNhbGxlZC4gQ291bGQgU3l6a2FsbGVyIHRyaWdnZXIgYSBwcm9iZSBzb21laG93LCBtYXliZSB0aHJvdWdoIG5ldGxpbmsgb3Igc3lzZnM/IFByb2JhYmx5IG5vdC5cblxuQnV0IHdhaXQhIFRoaXMgcGF0Y2ggKmFkZHMqIExFRCBzdXBwb3J0IHRvIHRoZSBEU0Egc3dpdGNoISBMRURzIGFyZSBleHBvc2VkIHZpYSB0aGUgTEVEIHN1YnN5c3RlbSBhbmQgYC9zeXMvY2xhc3MvbGVkcy9gLiBJZiB0aGUgZGV2aWNlICppcyogcHJvYmVkLCBJIHNob3VsZCBiZSBhYmxlIHRvIGNvbnRyb2wgdGhlIExFRHMgdmlhIHN5c2ZzLiAqQnV0IGNhbiBpdCBiZSBwcm9iZWQgaW4gdGhlIGZpcnN0IHBsYWNlPypcblxuSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBleGlzdGluZyBTeXprYWxsZXIgc3VwcG9ydCBmb3IgTURJTyBvciBEU0EuIEknbGwgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIGB5dDkyMXhgIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSBpZiB0aGVyZSdzIGEgdmlydHVhbCBkcml2ZXIsIG9yIGlmIGl0J3MgcHVyZWx5IGhhcmR3YXJlLWRlcGVuZGVudC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gYXNzZXNzaW5nIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAyOjMyOjEwLjM4MzY4MjkxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjgwNDI4MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI2MTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zLS0tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuLS1cXG5NQUlOVEFJTkVSUz0xODI0MD1TOlxcdE1haW50YWluZWRcXG5NQUlOVEFJTkVSUzoxODI0MTpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XFx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cXG5NQUlOVEFJTkVSUzoxODI0MzpGOlxcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXFxuTUFJTlRBSU5FUlMtMTgyNDQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjM6eXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZTo0Onl0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjU6eXQ5MjF4LW9ianMgKz0gc21pLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyOnN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMzLVxcdHVuc2lnbmVkIGludCBzaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE6LyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWJcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDYtICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4LVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTk6c3RydWN0IHl0OTIxeF9pbmZvIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDAtXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNi1cXHR1MTYgaW50ZXJuYWxfbWFzaztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDc6XFx0LyogVE9ETzogc2VlIGNvbW1lbnRzIGluIHl0OTIxeF9kc2FfcGh5bGlua19nZXRfY2FwcygpICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4LVxcdHUxNiBleHRlcm5hbF9tYXNrO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xNjQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTY1OnN0cnVjdCB5dDkyMXhfcmVnX21kaW8ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2Ni1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTgxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE4MjojZGVmaW5lIHRvX3l0OTIxeF9wcml2KF9kcykgY29udGFpbmVyX29mX2NvbnN0KF9kcywgc3RydWN0IHl0OTIxeF9wcml2LCBkcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xODMtI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cXHUwMDNlZHMuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTkwPXN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTk1OnN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5Ni17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTk3OlxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5OC1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjIzNjpzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb193cml0ZSh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzNy17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM4OlxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTIzOS1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjcxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3MjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9yZWdfb3BzIHl0OTIxeF9yZWdfb3BzX21kaW8gPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjczOlxcdC5yZWFkID0geXQ5MjF4X3JlZ19tZGlvX3JlYWQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjc0OlxcdC53cml0ZSA9IHl0OTIxeF9yZWdfbWRpb193cml0ZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzUtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3OC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzk6c3RhdGljIGludCB5dDkyMXhfaW50aWZfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyODM6XFx0cmV0dXJuIHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJULFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4NC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0yODc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI4ODp5dDkyMXhfaW50aWZfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI5NS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyOTY6XFx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjk3LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDMtXFx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDQ6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfSU5UX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA1LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA2LVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzA3OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA4LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzExOlxcdHJlcyA9IHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMi1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMy1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMxNDpcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0RJTiwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzE1LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zMjY9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyNzp5dDkyMXhfaW50aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMzMzpcXHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0MC1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9XUklURTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDE6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfSU5UX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQ0OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0RPVVQsIHZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ1LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ2LVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQ3OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ4LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzUxOlxcdHJldHVybiB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTItfVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1My1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTQ6c3RhdGljIGludCB5dDkyMXhfbWJ1c19pbnRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzU1LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTY6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTctXFx0dTE2IHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM2My1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzY0OlxcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzY1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MzcyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNzM6eXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzc0LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNzU6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNzYtXFx0aW50IHJlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM4MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzgyOlxcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM4My1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mzg5Onl0OTIxeF9tYnVzX2ludF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwMS1cXHRtYnVzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDI6XFx0bWJ1cy1cXHUwMDNlcmVhZCA9IHl0OTIxeF9tYnVzX2ludF9yZWFkO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwMzpcXHRtYnVzLVxcdTAwM2V3cml0ZSA9IHl0OTIxeF9tYnVzX2ludF93cml0ZTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDQtXFx0bWJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQxNjpzdGF0aWMgaW50IHl0OTIxeF9leHRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE5LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyMDpcXHRyZXR1cm4geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDIxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI1Onl0OTIxeF9leHRpZl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWcsIHUxNiAqdmFscClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQzMzpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MzQtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0MC1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9UWVBFX0MyMiB8IFlUOTIxWF9NQlVTX0NUUkxfUkVBRDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDE6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfRVhUX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDQ0OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ1LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDQ4OlxcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0OS1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MC1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RJTiwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUyLVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2NDp5dDkyMXhfZXh0aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY5LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MDpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzEtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3Ny1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9UWVBFX0MyMiB8IFlUOTIxWF9NQlVTX0NUUkxfV1JJVEU7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc4OlxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3OS1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4MC1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19ET1VULCB2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4Mi1cXHRpZiAocmVzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4My1cXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4NDpcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4NS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4ODpcXHRyZXR1cm4geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg5LX1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDkxOnN0YXRpYyBpbnQgeXQ5MjF4X21idXNfZXh0X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Mi17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDkzOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDk0LVxcdHUxNiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5ODpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfcmVhZChwcml2LCBwb3J0LCByZWcsIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5OS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUwNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTA3Onl0OTIxeF9tYnVzX2V4dF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUwOC17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTA5OlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTEwLVxcdGludCByZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTItXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUxMzpcXHRyZXMgPSB5dDkyMXhfZXh0aWZfd3JpdGUocHJpdiwgcG9ydCwgcmVnLCBkYXRhKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTQtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MTk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUyMDp5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUyMS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzMtXFx0LyogVE9ETzogYzQ1PyAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUzNDpcXHRtYnVzLVxcdTAwM2VyZWFkID0geXQ5MjF4X21idXNfZXh0X3JlYWQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM1OlxcdG1idXMtXFx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfZXh0X3dyaXRlO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzNi1cXHRtYnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NDctLyogUmVhZCBhbmQgaGFuZGxlIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuIE1JQiBidWZmZXIgbXVzdCBiZSB6ZXJvZWQgYmVmb3JlLiAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU0ODpzdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0OS17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTUwOlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTUxLVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTI6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1My1cXHRpbnQgcmVzID0gMDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTU1OlxcdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQncyB2YWluXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU2LVxcdCAqIHRvIGtlZXAgaXRzIGNvbnNpc3RlbmN5LCBzaW5jZSB3ZSBoYXZlIHRvIHJlYWQgcmVnaXN0ZXJzIG9uZSBieSBvbmVcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NjM6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NjQ6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2NS1cXHRcXHR1MzIgcmVnID0gWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyBkZXNjLVxcdTAwM2VvZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NjktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTcwOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2YWwwKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NzEtXFx0XFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU4Mi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1ODM6XFx0XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQsIFxcdTAwMjZ2YWwxKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01ODQtXFx0XFx0XFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MDc6c3RhdGljIHZvaWQgeXQ5MjF4X3BvbGxfbWliKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MDgte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwOTpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gY29udGFpbmVyX29mX2NvbnN0KHdvcmssIHN0cnVjdCB5dDkyMXhfcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1pYl9yZWFkLndvcmspO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMTpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSAodm9pZCAqKShwcCAtIHBwLVxcdTAwM2VpbmRleCkgLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxMjpcXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTMtXFx0dW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjE3LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTg6XFx0cmVzID0geXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxOS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTYyNj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYyNzp5dDkyMXhfZHNhX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjI4LVxcdFxcdCAgICAgICB1aW50OF90ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYzMzpcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYzNDpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjM1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjQxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQyOnl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQzLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDQ6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NTpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NjpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ3LVxcdHNpemVfdCBqO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ5LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTA6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1MS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1My1cXHRqID0gMDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTQ6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NTU6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY2NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NjU6c3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY2Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjcyOlxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjczOlxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz02ODI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODM6eXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODUte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4NjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg3OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg4OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02ODktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjkwLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2OTE6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY5Mi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTcxOD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcxOTp5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjEte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyMjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzIzOlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzI0OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzI2LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3Mjc6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyOC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTczNC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSB5dDkyMXhfcm1vbl9yYW5nZXNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MzYtXFx0eyAwLCA2NCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzQ2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzQ3Onl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NDgtXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzUwLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTE6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MjpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MzpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1NS1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzU2OlxcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU4LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1OTpcXHQqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc2MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTc4Mz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4NDp5dDkyMXhfZHNhX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzg1LVxcdFxcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc4Ni17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg3OlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODg6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODk6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTgxOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyMDp5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyMS1cXHRcXHRcXHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODIyLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4MjM6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyNDpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyNTpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyNy1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI4OlxcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04MzU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgzNjp5dDkyMXhfc2V0X2VlZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NDktXFx0aWYgKCEhbmV3X21hc2sgIT0gISFwcml2LVxcdTAwM2VlZWVfcG9ydHNfbWFzaykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg1MDpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfRlVOQyxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTEtXFx0XFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfUE9OX1NUUkFQX0VFRSwgISFuZXdfbWFzayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTMtXFx0XFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfUE9OX1NUUkFQX1ZBTCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTUtXFx0XFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfUE9OX1NUUkFQX0VFRSwgISFuZXdfbWFzayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjItXFx0LyogRW5hYmxlIC8gZGlzYWJsZSBwb3J0IEVFRSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg2MzpcXHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9FRUVfQ1RSTCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjQtXFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfRUVFX0NUUkxfRU5uKHBvcnQpLCBlbmFibGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY2LVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODY3OlxcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRW5fVkFMKHBvcnQpLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2OC1cXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9FRUVfVkFMX0RBVEEsIGVuYWJsZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04NzU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg3Njp5dDkyMXhfZHNhX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODc3LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Nzg6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg3OS1cXHRpbnQgcmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgxLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4ODI6XFx0cmVzID0geXQ5MjF4X3NldF9lZWUocHJpdiwgcG9ydCwgZSk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODgzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4ODpzdGF0aWMgaW50IHl0OTIxeF9tdHVfZmV0Y2goc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODk1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4OTY6eXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODk3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5MDI6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMy1cXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTExLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5MTI6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTUFDbl9GUkFNRShwb3J0KSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTMtXFx0XFx0XFx0XFx0ICAgICBZVDkyMVhfTUFDX0ZSQU1FX1NJWkVfTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxOS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5MjA6c3RhdGljIGludCB5dDkyMXhfZHNhX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkyMS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz05NTM9c3RhdGljIHU2NCB0b2tlbjJidXJzdCh1MzIgdG9rZW4sIGludCB1bml0LCBpbnQgQylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NTg6c3RydWN0IHl0OTIxeF9tYXJrZXIge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1OS1cXHR1MzIgY2lyO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTY5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NzA6eXQ5MjF4X21hcmtlcl90Zm0oc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzEtXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzbG90X25zLCB1MzIgY2lyX21heCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NzI6XFx0XFx0ICB1MzIgY2JzX21heCwgaW50IHVuaXRfbWF4LCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3My1cXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3Ny1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6OTc4OlxcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTc5LVxcdHU2NCBidXJzdF9lc3Q7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OTktXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwMDA6XFx0XFx0YnVyc3Rfc3VnICs9IEVUSF9ITEVOICsgeXQ5MjF4X210dV9mZXRjaChwcml2LCBwb3J0KSArXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTAwMS1cXHRcXHRcXHQgICAgIEVUSF9GQ1NfTEVOO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA1OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA2MDp5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2Uoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcixcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDYxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA2MjpcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjMtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNzMtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA3NDpcXHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA3NS1cXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlbWV0ZXJfc2xvdF9ucywgWVQ5MjFYX01FVEVSX0NJUl9NQVgsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDgwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgxOnl0OTIxeF9tYXJrZXJfdGZtX3NoYXBlKHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIsIHU2NCByYXRlLCB1NjQgYnVyc3QsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA4MjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4My1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4NC17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA4NTpcXHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4Ni1cXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcG9ydF9zaGFwZV9zbG90X25zLCBZVDkyMVhfU0hBUEVfQ0lSX01BWCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTEwOTE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwOTI6eXQ5MjF4X3BvbGljZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA5My1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTI3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI4Onl0OTIxeF9tZXRlcl9jb25maWcoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTEyOTpcXHRcXHQgICAgY29uc3Qgc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlcilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNDctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE0ODpcXHRyZXR1cm4geXQ5MjF4X3JlZzk2X3dyaXRlKHByaXYsIFlUOTIxWF9NRVRFUm5fQ1RSTChpZCksIGN0cmxzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTQ5LX1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUwLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNTE6c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1Mi17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MzpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1NC1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU3LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTU4OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX01FVEVSKHBvcnQpLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU5LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTE2Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE2Nzp5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTY4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTcwLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcxOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcyOlxcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG1hcmtlcjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTczLVxcdHUzMiBjdHJsO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3NS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTc2OlxcdHJlcyA9IHl0OTIxeF9wb2xpY2VfdmFsaWRhdGUocG9saWNlLCBOVUxMLCBOVUxMLCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzctXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4MDpcXHRyZXMgPSB5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2UoXFx1MDAyNm1hcmtlciwgcG9saWNlLCAwLCBwcml2LCBwb3J0LCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODEtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODQtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODU6XFx0cmVzID0geXQ5MjF4X21ldGVyX2NvbmZpZyhwcml2LCBwb3J0ICsgWVQ5MjFYX01FVEVSX05VTSwgXFx1MDAyNm1hcmtlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4Ni1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4OS1cXHRjdHJsID0gWVQ5MjFYX1BPUlRfTUVURVJfSUQocG9ydCkgfCBZVDkyMVhfUE9SVF9NRVRFUl9FTjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTkwOlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX01FVEVSKHBvcnQpLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTkxLWVuZDpcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjoxNC4wNjQxMTczMDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA2NzgxODE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIERTQSBEcml2ZXIgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzP1wiIFRoZSBjb2RlIHJlZ2lzdGVycyBhbiBNRElPIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgLiBTcGVjaWZpY2FsbHksIGB5dDkyMXhfbWRpb19kcml2ZXJgIGlzIHJlZ2lzdGVyZWQuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byB0aGluayBhYm91dCBzeXprYWxsZXIncyBsaW1pdGF0aW9ucy4gSXQgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4gbWV0aG9kIHRvIGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzLCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1kZXZpY2UsIG9yIG1heWJlIHNvbWUgRGV2aWNlIFRyZWUgbWFnaWMuIFdoaWxlIHN5emthbGxlciBzdXBwb3J0cyB0aGluZ3MgbGlrZSBgbWFjODAyMTFfaHdzaW1gLCBgdmttc2AsIGV0Yy4sIGRvZXMgaXQgc3VwcG9ydCBNRElPIGRldmljZXM/IEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgRFNBIG9yIE1ESU8gZGlyZWN0bHkuIEknbGwgcHJvYmFibHkgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCBhbmQgc2VhcmNoIGluIGBzeXMvbGludXgvYCBmb3IgYHl0OTIxeGAsIG9yIGNoZWNrIHRoZSBzeXprYWxsZXIgY29uZmlncyBmb3IgYENPTkZJR19ORVRfRFNBX1lUOTIxWGAuXG5cbkJ1dCwgd2FpdCBhIG1pbnV0ZSwgdGhlIGluc3RydWN0aW9ucyBoZXJlIHNwZWNpZnkgdGhhdCBpdCdzIGltcG9zc2libGUgdG8gcmVhY2ggYSBEU0Egc3dpdGNoIGRyaXZlciB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIERTQSBkcml2ZXJzIGFyZSBvZnRlbiBwbGF0Zm9ybS1zcGVjaWZpYyBvciBkZXBlbmQgb24gTURJTy9JMkMvU1BJIGludGVyZmFjZXMuIFFFTVUgZGVmaW5pdGVseSBkb2Vzbid0IGVtdWxhdGUgdGhlIE1vdG9yY29tbSBZVDkyMTUgaGFyZHdhcmUuIEJ1dCwgY2FuIEkgaW5zdGFudGlhdGUgYSBEU0Egc3dpdGNoIHZpYSBhIGR1bW15IE1ESU8gYnVzPyBUaGVyZSdzIGBkc2FfbG9vcGAsIHdoaWNoIGlzIGEgZHVtbXkgRFNBIHN3aXRjaCwgYnV0IGB5dDkyMXhgIGlzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLlxuXG5Ib3cgY2FuIEkgcHJvYmUgYHl0OTIxeGAgaW4gUUVNVT8gTm8gd2F5LiBJdCByZXF1aXJlcyBhbiBNRElPIGJ1cyBhbmQgYSBEZXZpY2UgVHJlZSBub2RlIG1hdGNoaW5nIGBtb3RvcmNvbW0seXQ5MjF4YCwgYW5kIGFzIGZhciBhcyBJIGtub3csIHN5emthbGxlciBkb2Vzbid0IGluamVjdCBhcmJpdHJhcnkgRGV2aWNlIFRyZWUgbm9kZXMuIFNvLCBubyBsdWNrIHRoZXJlLlxuXG5IYW5nIG9uLi4uIHRoZSBwYXRjaCBhdXRob3IgaXMgYHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlYC4gVGhpcyBpcyBhICpzaW11bGF0ZWQqIHBhdGNoLiBPa2F5LCBsZXQncyBnbyBiYWNrIGFuZCBsb29rIGF0IHRoZSBwYXRjaCBhZ2Fpbi4gSXQgYWRkcyBMRUQgc3VwcG9ydCB0byB0aGUgYHl0OTIxeGAgZHJpdmVyLiBIbW0sIGlzIGl0IHBvc3NpYmxlIHRoYXQgc3l6a2FsbGVyICpjYW4qIHJlYWNoIHRoaXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB5dDkyMXhgIGlzIGEgcmVhbCBkcml2ZXIgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZXJlZm9yZSwgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGV4ZWN1dGUgdGhlIGFkZGVkIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgY29kZS5cblxuSWYgSSBjYW4ndCByZWFjaCB0aGlzIGNvZGUsIGl0J3MgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhIHBoeXNpY2FsIHN3aXRjaCBjaGlwIHRoYXQncyAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLCBpdCdzIHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gcmVhY2guIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBvbmUgbW9yZSB0aW1lIGlmIHRoZXJlJ3MgKmFueSogUUVNVSBlbXVsYXRpb24gZm9yIGB5dDkyMXhgLi4uIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLiBOb3BlLiBWZXJkaWN0OiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MDEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6MjUuMTMxOTM5OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNDg5NjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3RvcmNvbW0seXQ5MjF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zLS0tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuLS1cXG5NQUlOVEFJTkVSUz0xODI0MD1TOlxcdE1haW50YWluZWRcXG5NQUlOVEFJTkVSUzoxODI0MTpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbk1BSU5UQUlORVJTLTE4MjQyLUY6XFx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6MzAuMTY2ODQ1MjgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2NzYzNzU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgYG1vdG9yY29tbSx5dDkyMXhgIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGlzIGBtb3RvcmNvbW0seXQ5MjF4YC4gTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBkcml2ZXI/IFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBRRU1VIGFuZCBsYWNrIHZpcnR1YWwgY291bnRlcnBhcnRzLCBjYW4ndCBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyIGJlY2F1c2UgdGhleSBuZWVkIGFjdHVhbCBoYXJkd2FyZS4gSSdtIHRoaW5raW5nLCBjb3VsZCBzeXprYWxsZXIgcGVyaGFwcyBwcm9iZSBNRElPIGRyaXZlcnMgYnkgcmVnaXN0ZXJpbmcgYSBkdW1teSBidXMgYW5kIGRldmljZT8gVGhhdCdzIGEgcG9zc2liaWxpdHksIGJ1dCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgTURJTyBmdXp6ZXIuXG5cbkxldCBtZSBjaGVjay4gSSBuZWVkIHRvIGZpbmQgdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uLiBJIGNhbid0IHJlYWQgdGhlIGRlc2NyaXB0aW9ucyBkaXJlY3RseSwgYnV0IEkgY2FuJ3QgdXNlIHRoZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgbWRpb2AgaW4gYHN5cy9saW51eC9gIC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHN5emthbGxlciBkb2Vzbid0IG5vcm1hbGx5IGZ1enogYXJiaXRyYXJ5IE1ESU8gaGFyZHdhcmUgZHJpdmVycyBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGRldmljZSB0cmVlIG5vZGVzIGZvciBiaW5kaW5nLiBXaGF0IGlmIGl0J3MgcmVhY2hhYmxlIHZpYSBJMkMgb3IgU1BJPyBTYW1lIHByb2JsZW06IGRldmljZSB0cmVlIG9yIGJvYXJkIGluZm8gaXMgcmVxdWlyZWQuIEFuZCB3aGF0IGFib3V0IFBDST8gUENJIGRyaXZlcnMgKmNhbiogYmUgcHJvYmVkIGlmIFFFTVUgZW11bGF0ZXMgdGhlIFBDSSBkZXZpY2UsIGJ1dCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBgeXQ5MjF4YC5cblxuV2FpdCwgSSBqdXN0IHJlYWxpemVkLCBgeXQ5MjF4YCAqaXMqIGFuIE1ESU8gZHJpdmVyLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcblx0Lm1kaW9kcnYuZHJpdmVyID0ge1xuXHRcdC5uYW1lID0gWVQ5MjFYX05BTUUsXG5cdFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxuXHR9LFxuXHQucHJvYmUgID0geXQ5MjF4X21kaW9fcHJvYmUsXG5cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG59O1xuYGBgXG5cblRoaXMgY29uZmlybXMgaXQuIFNpbmNlIGl0J3MgYW4gTURJTyBkcml2ZXIgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHN3aXRjaCwgYW5kIHRoZXJlIGlzIG5vIFFFTVUgZW11bGF0aW9uIGZvciBNb3RvcmNvbW0gWVQ5MjE1LCB0aGUgYHByb2JlYCBmdW5jdGlvbiBpcyBuZXZlciBnb2luZyB0byBiZSBjYWxsZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU28gdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IHdheSB0byBpbnN0YW50aWF0ZSBhbiBNRElPIGRldmljZSBmcm9tIHVzZXJzcGFjZS4gYFNJT0NTTUlJUkVHYCBleGlzdHMsIGJ1dCB0aGF0J3MgZm9yIHJlYWRpbmcvd3JpdGluZyByZWdpc3RlcnMsIG5vdCBjcmVhdGluZyBkZXZpY2VzLiBVbmxpa2UgSTJDLCBNRElPIGRvZXNuJ3QgaGF2ZSBhIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzL25ld19kZXZpY2VgIGZvciBjcmVhdGluZyBkZXZpY2VzLiBXYWl0LCBkb2VzIE1ESU8gaGF2ZSBzb21ldGhpbmcgc2ltaWxhcj8gTGV0IG1lIGNoZWNrIGlmIHRoZSBNRElPIGJ1cyBoYXMgYG5ld19kZXZpY2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzYyOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjozOS4xMzQ1MDU1NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MzExMjEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjozOS4zMzM4MjQ4NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA2NTIxNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBmb3IgTURJTyBCdXMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5IbW0sIG5vIHNpZ24gb2YgYG5ld19kZXZpY2VgIGJlaW5nIGRlZmluZWQgb3IgdXNlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBiaXQgb2RkLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aGVyZS4gSXQgc3VnZ2VzdHMgdGhlIE1ESU8gYnVzIGl0c2VsZiwgdGhlIGZ1bmRhbWVudGFsIGluZnJhc3RydWN0dXJlIGZvciBhY2Nlc3NpbmcgUEhZcywgbWlnaHQgYmUgaGFuZGxpbmcgdGhlIGRldmljZSBjcmVhdGlvbi4gR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBNRElPIGJ1cyBkcml2ZXIgaW1wbGVtZW50YXRpb24sIGFuZCBwb3RlbnRpYWxseSwgdGhlIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIHJlc3BvbnNpYmxlIGZvciBhdHRhY2hpbmcgbmV3IFBIWSBkZXZpY2VzIHRvIHRoZSBidXMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGBuZXdfZGV2aWNlYCBsb2dpYywgb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCB3aWxsIHJlc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg4ODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMjozMjo0Mi43NDAzNTUwMzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTYzODAxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV3X2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6NDIuOTU2MDAyMzM0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTEzODI3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5mdXp6YWJsZSBEcml2ZXI6IFlUOTIxeCoqXG5cbk9rYXksIHNvIGl0J3MgY2xlYXI6IHRoZXJlJ3MgYWJzb2x1dGVseSBubyB3YXkgdG8gaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlcXVpcmVkIGJ5IHRoZSBgeXQ5MjF4YCBkcml2ZXIsIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1lYW5zIEkgY2FuJ3QgZXZlbiAqYmVnaW4qIHRvIHByb2JlIHRoaXMgZHJpdmVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgZGVkaWNhdGVkIGhhcmR3YXJlIG9yIGEgdmVyeSBzcGVjaWZpYyBRRU1VIHNldHVwIHdpdGggZW11bGF0aW9uIG9mIHRoZSBNb3RvcmNvbW0gWVQ5MjE1ICh3aGljaCBkb2Vzbid0IGV4aXN0KSwgdGhpcyBkcml2ZXIgaXMgc2ltcGx5IHVucmVhY2hhYmxlLiBTaW5jZSBmdXp6aW5nIHJlbGllcyBvbiBlbnZpcm9ubWVudCByZWFjaGFiaWxpdHksIHRoaXMgaXMgYSBjbGVhciByb2FkYmxvY2suXG5cbkxldCBtZSBqdXN0IHJlZnJlc2ggdGhlIGluc3RydWN0aW9ucyBpbiBteSBtaW5kOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlIGVtdWxhdGlvbnMuXCJcblxuWWVwLCBpdCdzIGEgcGVyZmVjdCBmaXQuIFRoaXMgYHl0OTIxeGAgZHJpdmVyIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgTURJTyBkcml2ZXIgZm9yIGEgRFNBIHN3aXRjaCBjaGlwLiBJdCdzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBoYXJkd2FyZSBhbmQganVzdCAqY2FuJ3QqIGJlIHByb2JlZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBHaXZlbiB0aGlzLCBJJ20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGl0IGlzIGFuIE1ESU8gZHJpdmVyLiBKdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIGNvbmZpcm1lZCEgSSdtIGdvb2QgdG8gZ28gd2l0aCB0aGUgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDI6MzI6NDcuNjA3MzkwMTg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2Mzg0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3MD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc3MjpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzczLVxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzgyOm1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3ODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAyOjMyOjQ3LjczMDAzNDc2OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE4ODY4Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPIERyaXZlciBhbmQgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBkcml2ZXIuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IHRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgdGhpcyBkcml2ZXIsIGFuZCBiYXNlZCBvbiBteSBwcmlvciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLCB0aGUgY29tcGxleGl0aWVzIG9mIHRoZSBzeXN0ZW0gaXQgaXMgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGZ1enppbmcgYXQgdGhpcyBzdGFnZSwgSSdtIGNvbmZpZGVudCBpbiBtYWtpbmcgYSBjYWxsIGhlcmUuIFVzaW5nIGBzZXQtcmVzdWx0c2AsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEJhc2ljYWxseSwgSeKAmW0gc2F5aW5nIHRoYXQgYmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhpcyBkcml2ZXIgYW5kIGl0cyByb2xlIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiB0aGluZ3MsIGZ1enppbmcgaXQgaXNuJ3QgbGlrZWx5IHRvIHlpZWxkIHNpZ25pZmljYW50IHJlc3VsdHMgKmF0IHRoaXMganVuY3R1cmUqLiBGdXJ0aGVyIGRvd24gdGhlIGxpbmUsIGRlcGVuZGluZyBvbiBmaW5kaW5ncywgdGhlIGRyaXZlciBtYXkgYmVjb21lIHJlbGV2YW50IHRvIGZ1enosIGJ1dCBmb3Igbm93LCBJJ2xsIHBhc3Mgb24gdGhlIGZ1enogY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODk0LCJPdXRwdXRUb2tlbnMiOjEwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAyOjMyOjUxLjY0ODkwNzIwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIE1ESU8gZGV2aWNlLiBTaW5jZSB0aGVyZSBpcyBubyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBhbmQgTURJTyBkZXZpY2VzIGNhbm5vdCBiZSBhcmJpdHJhcmlseSBpbnN0YW50aWF0ZWQgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMpLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l74w[1] Phase: Running StartedAt: 2026-07-25 02:33:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l74w[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 02:33:04 +0000 UTC FinishedAt: 2026-07-25 02:33:32 +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,}