Name: series-workflowj8w5n Phase: Failed StartedAt: 2026-07-27 05:44:21 +0000 UTC FinishedAt: 2026-07-27 06:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj8w5n[0] Phase: Succeeded StartedAt: 2026-07-27 05:44:21 +0000 UTC FinishedAt: 2026-07-27 06:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj8w5n[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 05:44:21 +0000 UTC FinishedAt: 2026-07-27 06:17: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+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2IyNGZjNzVhZDA1ODdjMjI5N2YxMGY0OTg2ODQ0YzZmNDJhOGZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDY6MTQ6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjBjZmYwMDk1M2RjYmUuLmY1MTI0Njc3NTNiYzI0IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTgyNDksNyAmIzQzOzE4MjQ5LDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQmIzQzOz0gYjUzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pY3JvY2hpcC9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4mIzQzO1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBjaGlwLlxuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuJiM0MztcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICYjNDM7MTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3l0OTIxeC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNWYzYjk5ZTE4OWM0MTIuLmU2ODE1Y2Y5Y2IzY2QwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICYjNDM7ODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXHQxMFxuJiM0MztcbiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzdlOGQ0ZjAwMDNmODFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICYjNDM7MSw2NjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChncm91cCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbiYjNDM7XHRib29sIHVzZV9jeWNsZTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4mIzQzO1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuJiM0MztcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4mIzQzO1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuJiM0MztcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4mIzQzO1x0XHRcdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbiYjNDM7XHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbiYjNDM7XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdGlmICh2YWwgIT0gY3RybCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4mIzQzO1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4mIzQzO1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbiYjNDM7XHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4mIzQzO1x0XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmZsYWdzcCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuJiM0MztcdFx0XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2ZHAtXHUwMDNldXNlci1cdTAwM2VkZXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcbiYjNDM7XHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4mIzQzO1x0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICppbnZfbWFza3AsIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0aW50IHBvbGFyaXR5O1xuJiM0MztcdHUzMiBncm91cDtcbiYjNDM7XHRib29sIG9uO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2Z3JvdXApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGlmIChncm91cCBcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBncm91cCwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBwLVx1MDAzZWxlZHNbZ3JvdXBdKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdGZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWhpZ2hcJiMzNDspO1xuJiM0MztcdGZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtbG93XCYjMzQ7KTtcbiYjNDM7XHRpZiAoZm9yY2VfaGlnaCBcdTAwMjZcdTAwMjYgZm9yY2VfbG93KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xuJiM0MztcbiYjNDM7XHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbGVkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0bGVkLVx1MDAzZXBvcnQgPSBwcDtcbiYjNDM7XHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcJiMzNDtuZXRkZXZcJiMzNDs7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcJiMzNDstJXU6JTAyZDolMDJ1XCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xuJiM0MztcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbiYjNDM7XHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbiYjNDM7XHRcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwb2xhcml0eSkge1xuJiM0MztcdFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4mIzQzO1xuJiM0MztcdFx0Kmludl9tYXNrcCB8PSBiaXQ7XG4mIzQzO1x0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdCppbnZfY3RybHAgfD0gYml0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0Ym9vbCBoYXNfbGVkcyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXHUwMDI2bGVkLVx1MDAzZWNkZXYpO1xuJiM0MztcdFx0XHRoYXNfbGVkcyA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhhc19sZWRzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHUzMiAqaW52X21hc2twLFxuJiM0MztcdFx0ICAgICAgIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4mIzQzO1x0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWxlZHNfbnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfTEVEX1BPUlRfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Tm8gTEVEcyBmb3IgcG9ydCAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW52X21hc2twLCBpbnZfY3RybHApO1xuJiM0MztcdFx0aWYgKHJlcykge1xuJiM0MztcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspXG4mIzQzO1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIGludl9jdHJsID0gMDtcbiYjNDM7XHR1MzIgaW52X21hc2sgPSAwO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkcC1cdTAwM2VkbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChwcml2LCBwb3J0LCBcdTAwMjZpbnZfbWFzaywgXHUwMDI2aW52X2N0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHBvcnQsIHJlcyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuJiM0MztcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGludl9tYXNrKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGdvdG8gZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbiYjNDM7XHRjdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpO1xuJiM0MztcbiYjNDM7ZW5kOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcykge1xuJiM0MztcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX0xFRFNfSFxuJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICYjNDM7IDE4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxNikpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuJiM0MztcbiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4mIzQzO1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlOjE7XG4mIzQzO1x0Ym9vbCB1c2VfZHV0eToxO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7XG4mIzQzOyNlbHNlXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICYjNDM7MSwxNTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbiYjNDM7XHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4mIzQzO1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4mIzQzO1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0KnZhbHAgPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdHUzMiB2O1xuJiM0MztcdHUzMiB1O1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0dSA9IHY7XG4mIzQzO1x0dSBcdTAwMjY9IH5tYXNrO1xuJiM0MztcdHUgfD0gdmFsO1xuJiM0MztcdGlmICh1ID09IHYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdHUgfD0gdmFsc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX1NNSV9IXG4mIzQzOyNkZWZpbmUgX1lUX1NNSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWwpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4mIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4mIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbiYjNDM7e1xuJiM0MztcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciAoTW90b3Jjb21tIFlUOTIxNSkgY29ubmVjdGVkIHZpYSBNRElPLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgYSBzcGVjaWZpYyBjaGlwIElEIGR1cmluZyBpbml0aWFsaXphdGlvbikgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzdiMjRmYzc1YWQwNTg3YzIyOTdmMTBmNDk4Njg0NGM2ZjQyYThmZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDA2OjE0OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA2MGNmZjAwOTUzZGNiZS4uZjUxMjQ2Nzc1M2JjMjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xODI0OSw3ICYjNDM7MTgyNDksNyBAQCBNOglEYXZpZCBZYW5nICZsdDttbXlhbmdmbEBnbWFpbC5jb20mZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKLUY6CWRyaXZlcnMvbmV0L2RzYS95dDkyMXguKgomIzQzO0Y6CWRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vCiBGOgluZXQvZHNhL3RhZ195dDkyMXguYwogCiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwpAQCAtNzIsNiAmIzQzOzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwCiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZyYjMzQ7CiAKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcmIzM0OwomIzQzOwogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnJiMzNDsKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWcmIzM0OwpAQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NQogCSAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXIKIAkgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuCi0KLWNvbmZpZyBORVRfRFNBX1lUOTIxWAotCXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKLQlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCi0Jc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCi0JICBjaGlwLgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQpAQCAtMTQsMTEgJiM0MzsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgJiM0Mzs9IGxhbjkzMDNfbWRpby5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1zcGkubwotb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm8KIG9iai15CQkJCSYjNDM7PSBiNTMvCiBvYmoteQkJCQkmIzQzOz0gaGlyc2NobWFubi8KIG9iai15CQkJCSYjNDM7PSBsYW50aXEvCiBvYmoteQkJCQkmIzQzOz0gbWljcm9jaGlwLwomIzQzO29iai15CQkJCSYjNDM7PSBtb3RvcmNvbW0vCiBvYmoteQkJCQkmIzQzOz0gbXY4OGU2eHh4Lwogb2JqLXkJCQkJJiM0Mzs9IG14bDg2Mnh4Lwogb2JqLXkJCQkJJiM0Mzs9IG5ldGMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCkBAIC0wLDAgJiM0MzsxLDE3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDCiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKJiM0MzsJc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAomIzQzOwlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAomIzQzOwkgIGNoaXAuCiYjNDM7CiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFMKJiM0MzsJYm9vbCAmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1JiMzNDsKJiM0MzsJZGVmYXVsdCB5CiYjNDM7CWRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVgKJiM0MzsJZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWAomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZQomIzQzOwkgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmUyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw1IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDCiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm8KJiM0Mzt5dDkyMXgtb2JqcyA6PSBjaGlwLm8KJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMubwomIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwppbmRleCAxNTliMTY2MDZmNmNhNC4uNTUzZWZhY2Q0ZjVlZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwpAQCAtMTMsNyAmIzQzOzEzLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9icmlkZ2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl9oc3IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CkBAIC0yNiw3ICYjNDM7MjUsOSBAQAogI2luY2x1ZGUgJmx0O25ldC9pZWVlODAyMXEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O3l0OTIxeC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsZWRzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwogCiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7CiAJe30KIH07CiAKLSNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwotCiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFCTQwOTUKIAotI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VUwkxMDAwMAotI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAotCiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLgogICoKICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXAKQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQogCXJldHVybiAoYWRkcls0XSAmbHQ7Jmx0OyA4KSB8IGFkZHJbNV07CiB9CiAKLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKQotewotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKSk7Ci0KLQlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7cmVhZChwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbHApOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQotewotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKSk7Ci0KLQlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7d3JpdGUocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWwpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKQotewotCXUzMiB2YWw7Ci0JaW50IHJlczsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsCi0JCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCi0JCQkJWVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsCi0JCQkJZmFsc2UsIHByaXYsIHJlZywgJmFtcDt2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCSp2YWxwID0gdmFsOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0JaW50IHJlczsKLQl1MzIgdjsKLQl1MzIgdTsKLQotCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dik7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCXUgPSB2OwotCXUgJmFtcDs9IH5tYXNrOwotCXUgfD0gdmFsOwotCWlmICh1ID09IHYpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKLX0KLQotLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQotICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZQotICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLgotICoKLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG8KLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS4KLSAqLwotCi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQotewotCSpsbyAmYW1wOz0gfmxvd2VyXzMyX2JpdHMobWFzayk7Ci0JKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKLQkqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpOwotCSpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCi0JCSB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JaW50IHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksICZhbXA7dmFsc1tpXSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKLQkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JaW50IHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKLQkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQl1IHw9IHZhbHNbaV07Ci0JCWlmICh1ICE9IHZzW2ldKQotCQkJY2hhbmdlZCA9IHRydWU7Ci0KLQkJdnNbaV0gPSB1OwotCX0KLQotCWlmICghY2hhbmdlZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKLQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsKLQl1MzIgdnNbNF07Ci0JaW50IHJlczsKLQotCUJVSUxEX0JVR19PTihudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKTsKLQotCXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQl1MzIgdSA9IHZzW2ldOwotCi0JCXUgJmFtcDs9IH5tYXNrc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKLQkJCSBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTsKLX0KLQogc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApCiB7CiAJc3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7CkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwlyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcbiYjMzQ7LCByZXMpOwomIzQzOyNlbmRpZgomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiAJaWYgKCFwcml2KQogCQlyZXR1cm47CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJeXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpOwomIzQzOyNlbmRpZgomIzQzOwogCWZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtJmd0O3BvcnRzKTsgaS0tICZndDsgMDsgKSB7CiAJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW2ldOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCmluZGV4IDVmM2I5OWUxODljNDEyLi5lNjgxNWNmOWNiM2NkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCkBAIC04NTAsOSAmIzQzOzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHsKICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU0JCShZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKQogI2RlZmluZSBZVDkyMVhfVURGX05VTQkJOAogCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTQkzCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNCTEwCiYjNDM7CiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi8KICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkJMTEKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwomIzQzOwogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpICZsdDsgOCkKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KQogCkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCXN0cnVjdCB5dDkyMXhfbWliIG1pYjsKIAl1NjQgcnhfZnJhbWVzOwogCXU2NCB0eF9mcmFtZXM7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTsKJiM0MzsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IHl0OTIxeF9yZWdfb3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM3ZThkNGYwMDAzZjgxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKQEAgLTAsMCAmIzQzOzEsNjYwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VsZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktJmd0O3BvcnQpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLSZndDtpbmRleF0pCiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS0mZ3Q7ZHMuZGV2KQomIzQzOwomIzQzO3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZ3JvdXApIHsKJiM0MzsJY2FzZSAwOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDE6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CSpvbnAgPSAodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PQomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwljdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOgomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssCiYjNDM7CQkJCSAgICAgIGN0cmwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLAomIzQzOwkJCXVuc2lnbmVkIGNoYXIgKmR1dHlwKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHsKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA2KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA0KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAzKSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAyKSwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHk7CiYjNDM7CiYjNDM7CWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7CiYjNDM7CWN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqLwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsICZhbXA7Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWZvciAoOyBjeWNsZSAmZ3Q7IFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciAmZ3Q7Jmd0Oz0gMSwgY3ljbGUgJmd0OyZndDs9IDEpCiYjNDM7CQlpZiAoY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyICZndDsmZ3Q7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CSpjeWNsZXAgPSBjeWNsZTsKJiM0MzsKJiM0MzsJZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKgomIzQzOwkJCQkgICAgIChvbiAmZ3Q7IG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSkKJiM0MzsJCWlmIChpID09IDAgfHwgZHV0eV9yZXEgJmd0Oz0gKGR1dHlzW2kgLSAxXSAmIzQzOyBkdXR5c1tpXSkgLyAyKSB7CiYjNDM7CQkJZHV0eSA9IGR1dHlzW2ldOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwlpZiAob24gJmd0OyBvZmYpCiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTsKJiM0MzsJKmR1dHlwID0gZHV0eTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1bnNpZ25lZCBzaG9ydCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgY2hhciBkdXR5OwomIzQzOwlib29sIHVzZV9jeWNsZTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoISpvbnAgJmFtcDsmYW1wOyAhKm9mZnApIHsKJiM0MzsJCWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJaWYgKGkgIT0gZ3JvdXAgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkgewomIzQzOwkJCQlkdXR5ID0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJvb2wgY2hhbmdlX2N5Y2xlOwomIzQzOwkJYm9vbCBjaGFuZ2VfZHV0eTsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCAmYW1wO2N5Y2xlLCAmYW1wO2R1dHkpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gY3ljbGUgJmx0OyBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSAmYW1wOyZhbXA7IGN5Y2xlICE9IHBwLSZndDtsZWRfY3ljbGU7CiYjNDM7CQljaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJaWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSkKJiM0MzsJCQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOwomIzQzOwkJCSAgICAgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQkJaWYgKGkgPT0gZ3JvdXAgfHwgIXBwLSZndDtsZWRzW2ldKQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCWlmICgoY2hhbmdlX2N5Y2xlICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9jeWNsZSkgfHwKJiM0MzsJCQkJICAgIChjaGFuZ2VfZHV0eSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkpCiYjNDM7CQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CWlmICh2YWwgIT0gY3RybCkgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CXN3aXRjaCAoZHV0eSAmZ3Q7PSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDoKJiM0MzsJCVlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChkdXR5ICZsdDsgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJaWYgKHVzZV9jeWNsZSkgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007CiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7CiYjNDM7CX0KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfAomIzQzOwkJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTsKJiM0MzsJZWxzZQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSB1c2VfY3ljbGU7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQlwcC0mZ3Q7bGVkX2N5Y2xlID0gY3ljbGU7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSB0cnVlOwomIzQzOwlwcC0mZ3Q7bGVkX2R1dHkgPSBkdXR5OwomIzQzOwomIzQzOwkqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pOwomIzQzOwkqb2ZmcCA9IGN5Y2xlIC0gKm9ucDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHsKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCQkJaW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCFmbGFncykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IG1hcC0mZ3Q7ZmxhZ3MpID09IG1hcC0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmbGFncyAmYW1wOz0gfm1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CQkJaWYgKCFmbGFncykKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKCh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9CiYjNDM7CSAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHsKJiM0MzsJCSpmbGFnc3AgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKCh2YWwgJmFtcDsgbWFwLSZndDttYXNrKSA9PSBtYXAtJmd0O21hc2spCiYjNDM7CQkJKmZsYWdzcCB8PSBtYXAtJmd0O2ZsYWdzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwljdHJsID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWN0cmwgfD0gbWFwLSZndDttYXNrOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmbGFncykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwIHx8ICFkcC0mZ3Q7dXNlcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OwomIzQzOwljaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdOwomIzQzOwllbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkOwomIzQzOwlib29sIGZvcmNlX2hpZ2g7CiYjNDM7CWJvb2wgZm9yY2VfbG93OwomIzQzOwlpbnQgcG9sYXJpdHk7CiYjNDM7CXUzMiBncm91cDsKJiM0MzsJYm9vbCBvbjsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtncm91cCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlpZiAoZ3JvdXAgJmd0Oz0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxuJiMzNDssIGdyb3VwLCBwb3J0KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmIChwcC0mZ3Q7bGVkc1tncm91cF0pCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJZm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1oaWdoJiMzNDspOwomIzQzOwlmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtbG93JiMzNDspOwomIzQzOwlpZiAoZm9yY2VfaGlnaCAmYW1wOyZhbXA7IGZvcmNlX2xvdykgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIGdyb3VwKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7CiYjNDM7CiYjNDM7CWxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbGVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWxlZC0mZ3Q7cG9ydCA9IHBwOwomIzQzOwlsZWQtJmd0O2dyb3VwID0gZ3JvdXA7CiYjNDM7CiYjNDM7CXN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PRkY6CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PTjoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCW9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJbGVkX2NkZXYgPSAmYW1wO2xlZC0mZ3Q7Y2RldjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3MgPSBvbjsKJiM0MzsJbGVkX2NkZXYtJmd0O21heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJbGVkX2NkZXYtJmd0O2ZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7CiYjNDM7CWxlZF9jZGV2LSZndDtibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7CiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSAmIzM0O25ldGRldiYjMzQ7OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FICYjMzQ7LSV1OiUwMmQ6JTAydSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2RzLmluZGV4LCBwb3J0LCBncm91cCk7CiYjNDM7CWluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7CiYjNDM7CQkuZndub2RlID0gZndub2RlLAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCXUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpOwomIzQzOwomIzQzOwkJKmludl9tYXNrcCB8PSBiaXQ7CiYjNDM7CQlpZiAocG9sYXJpdHkgJmd0OyAwKQomIzQzOwkJCSppbnZfY3RybHAgfD0gYml0OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CWJvb2wgaGFzX2xlZHMgPSBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKSB7CiYjNDM7CQkJZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsICZhbXA7bGVkLSZndDtjZGV2KTsKJiM0MzsJCQloYXNfbGVkcyA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFoYXNfbGVkcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKSB7CiYjNDM7CQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgKmludl9tYXNrcCwKJiM0MzsJCSAgICAgICB1MzIgKmludl9jdHJscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gJmFtcDtwcml2LSZndDtkczsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTsKJiM0MzsJbGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLSZndDtkbiwgJiMzNDtsZWRzJiMzNDspOwomIzQzOwlpZiAoIWxlZHNfbnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX0xFRF9QT1JUX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7Tm8gTEVEcyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLAomIzQzOwkJCQkgICAgICAgaW52X21hc2twLCBpbnZfY3RybHApOwomIzQzOwkJaWYgKHJlcykgewomIzQzOwkJCW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IFlUOTIxWF9MRURfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KQomIzQzOwkJeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXUzMiBpbnZfY3RybCA9IDA7CiYjNDM7CXUzMiBpbnZfbWFzayA9IDA7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgJmFtcDtpbnZfbWFzaywgJmFtcDtpbnZfY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCWRldl93YXJuKGRldiwgJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgcG9ydCwgcmVzKTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwkvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLgomIzQzOwkgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LgomIzQzOwkgKi8KJiM0MzsJaWYgKGludl9tYXNrKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssCiYjNDM7CQkJCQkgICAgIGludl9jdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byBlbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47CiYjNDM7CWN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7CiYjNDM7CiYjNDM7ZW5kOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXMpIHsKJiM0MzsJCXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaApAQCAtMCwwICYjNDM7MSwxMjEgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0gKJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rY29uZmlnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xlZHMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTAkJCTB4ZDAwMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU4JCQlCSVQoMjEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTQlHRU5NQVNLKDIwLCAxOSkJLyogY3ljbGUgPSA1MTIgKiB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTQkJR0VOTUFTSygxNiwgMTMpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NCQkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KQkJKDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNywgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVMJQklUKDE3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJCUJJVCgxNikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpCQkoMHhkMDA0MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTQkJR0VOTUFTSygzMSwgMzApCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NCQlHRU5NQVNLKDI5LCAyOCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QCUJJVCgyNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTQkJR0VOTUFTSygyNiwgMjUpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMwkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMykKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpCQkoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKQkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycCkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNikJLyogY3ljbGUgPSA1MTIgJmx0OyZsdDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTYpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTksJCUJJVCgxNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LCUJJVCgxNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTksJQklUKDEzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMCUJJVCgxMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRglCSVQoMTEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTksJCUJJVCgxMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOSwkJQklUKDkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgJCUJJVCg4KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYCQlCSVQoNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTQkJQklUKDYpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTQkJQklUKDUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTksJQklUKDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTksJQklUKDIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOSwlCSVQoMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTksJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTAkJMHhkMDEwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LCQlHRU5NQVNLKDI1LCAyNCkJLyogZGVsYXk/ICovCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTQkJR0VOTUFTSygxLCAwKQkvKiAjZ3JwIC0gMSAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydCkJKDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyA1LCA2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDEsIDYgKiAoKHBvcnQpICUgNSkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUUwkJMHhkMDFjNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WCQkweGQwMWM4CiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydCkJQklUKDEwICogKGdycCkgJiM0MzsgKHBvcnQpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KQkoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSkpCiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTgk2NAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUYJNTEyCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWAkyMDQ4CiYjNDM7CiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqLwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NCQkyNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pCShZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpCiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZ3JvdXA7CiYjNDM7CiYjNDM7CWJvb2wgdXNlX2N5Y2xlOjE7CiYjNDM7CWJvb2wgdXNlX2R1dHk6MTsKJiM0Mzt9OwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7CiYjNDM7CiYjNDM7I2Vsc2UKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTA1NDg5NmU0Y2QxMmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCkBAIC0wLDAgJiM0MzsxLDE1NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VUwkxMDAwMAomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7cmVhZChwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbHApOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsCiYjNDM7CQkJCXJlcyB8fCAodmFsICZhbXA7IG1hc2spID09ICp2YWxwLAomIzQzOwkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKJiM0MzsJCQkJZmFsc2UsIHByaXYsIHJlZywgJmFtcDt2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CSp2YWxwID0gdmFsOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CXUzMiB2OwomIzQzOwl1MzIgdTsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CXUgPSB2OwomIzQzOwl1ICZhbXA7PSB+bWFzazsKJiM0MzsJdSB8PSB2YWw7CiYjNDM7CWlmICh1ID09IHYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCiYjNDM7CQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQljb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCXUgfD0gdmFsc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0wLDAgJiM0MzsxLDg4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfU01JX0gKJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLAomIzQzOwkJCSAgIHUzMiB2YWwpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQomIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCiYjNDM7ICoKJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKJiM0MzsJKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCiYjNDM7CQkgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCSAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCSAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCSBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEzNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBvZiBNb3RvcmNvbW0gWVQ5MjE1IExFRCBTdXBwb3J0KioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLCBtb3ZpbmcgdGhlIGRyaXZlciBmaWxlIGFuZCBhZGRpbmcgYSBuZXcgY29uZmlnIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gRFNBIHN3aXRjaGVzIGFyZSB0eXBpY2FsbHkgY29ubmVjdGVkIHZpYSBNRElPLCBTUEksIG9yIEkyQywgYW5kIHR5cGljYWxseSByZXF1aXJlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9wZXJseSByZXNwb25kIHRvIE1ESU8gcmVhZHMvd3JpdGVzLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRyaXZlciBjb2RlIGl0c2VsZiAoYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCkgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyByZWdpc3RlcmVkLCBidXQgZ2VuZXJhbGx5LCBEU0EgZHJpdmVycyBhcmUgbWVhbnQgZm9yICpwaHlzaWNhbCogaGFyZHdhcmUuIEkga25vdyBzb21lIERTQSBkcml2ZXJzIGNhbiBiZSBpbnN0YW50aWF0ZWQgd2l0aCBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBkdW1teSBNRElPIGJ1c2VzLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIG5vcm0uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhlcmUgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIE1vdG9yY29tbSBjaGlwPyBQcm9iYWJseSBub3QuIENhbiB3ZSBmYWtlIGl0IHdpdGggYSBkdW1teSBNRElPIGJ1cz8gTWF5YmUsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGdlbmVyaWMgbWVjaGFuaXNtIGZvciBmdXp6aW5nIGFyYml0cmFyeSBNRElPIGRldmljZXMgdW5sZXNzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQsIG9yIHdlIGhhdmUgYSB3YXkgdG8gaW5qZWN0IE1ESU8gdHJhZmZpYyBkaXJlY3RseS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHByb21wdC4gSXQmIzM5O3MgYXNraW5nIGlmIHRoZSBwYXRjaCBpcyAqd29ydGgqIGZ1enppbmcuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgd2hpY2ggdGhpcyBpc24mIzM5O3QsIGJ1dCB3aGF0IGFib3V0IE1ESU8sIEkyQywgb3IgU1BJIGRldmljZXM/IFRoZSB1c3VhbCBjYXNlIGlzIHRoYXQgaWYgdGhpcyBpcyBhIGhhcmR3YXJlIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBjaGlwLCBlc3BlY2lhbGx5IGEgRFNBIHN3aXRjaCwgYW5kIGl0IGlzbiYjMzk7dCBlbXVsYXRlZCwgaXQmIzM5O3MgcHJvYmFibHkgbm90IHJlYWNoYWJsZS4KClNvIGxldCYjMzk7cyBjaGVjazogSXMgYHl0OTIxeGAgYWxyZWFkeSBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBJIGNhbiYjMzk7dCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgYHN5cy9gIGRpcmVjdG9yeS4gTGV0IG1lIGV4cGxvcmUgdGhlIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBpcyBhbnkgd2F5IHRvIHJlYWNoIGB5dDkyMXhfbGVkc19zZXR1cGAgb3IgYHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nYC4gVGhlIGRyaXZlciAqaXMqIHJlZ2lzdGVyZWQgYXMgYW4gTURJTyBkZXZpY2UuIFRoaXMgYWxsIHBvaW50cyB0b3dhcmRzIGEgbG93IHByb2JhYmlsaXR5IG9mIGJlaW5nIGRpcmVjdGx5IHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfbWRpb19kcml2ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3MD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzI6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzczLVx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3ODI6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTURJTyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTURJTyBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYG1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO2AgbGluZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHdheSB0byByZWdpc3RlciBhbiBNRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSB1c3VhbCBzZXR1cCDigJMgdGhlIE1ESU8gZGV2aWNlcywgbGlrZSB0aGlzIGB5dDkyMXhgIG9uZSwgYXJlIGdlbmVyYWxseSBwcm9iZWQgaW4gYSBjb3VwbGUgb2Ygd2F5czogZWl0aGVyIHRoZSBkZXZpY2UgdHJlZSBkZWZpbmVzIHRoZW0sIGFuZCB0aGUgTURJTyBidXMgYXV0b21hdGljYWxseSBzY2Fucywgb3IgdGhlcmUmIzM5O3MgYW4gSUQgbWF0Y2guIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBzdHVmZi4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXIsIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSSBkb24mIzM5O3QgaGF2ZSB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yIHRvIHBsYXkgd2l0aCByaWdodCBub3cuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcHJvYmUgZnVuY3Rpb24sIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwuIEkgY2FuIGFsbCBidXQgZ3VhcmFudGVlIHRoYXQuIFdoeT8gQmVjYXVzZSB0aGVzZSB0aGluZ3MgKmFsd2F5cyogY2hlY2sgZm9yIHRoZSBwaHlzaWNhbCBwcmVzZW5jZSBvZiB0aGUgY2hpcCwgdXN1YWxseSBieSByZWFkaW5nIHNvbWUgc29ydCBvZiBjaGlwIElEIHJlZ2lzdGVyLiBObyBjaGlwLCBubyBJRCwgbm8gZGljZS4KClNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgbWU/IEkgbmVlZCB0byBkaWcgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byBzZWUgKmV4YWN0bHkqIGhvdyBpdCYjMzk7cyBjaGVja2luZyBmb3IgdGhlIGRldmljZSwgd2hhdCByZWdpc3RlcnMgaXQmIzM5O3MgcmVhZGluZywgYW5kIGhvdyBpdCYjMzk7cyBkZXRlcm1pbmluZyBzdWNjZXNzIG9yIGZhaWx1cmUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgYXNzdW1wdGlvbnMgaXQmIzM5O3MgbWFraW5nIGFib3V0IHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfbWRpb19wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjgyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxNy1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MTg6c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcyPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc3MzpcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3NC1cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwNTgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBwcmluY2lwbGVzIG9mIE1ESU8gYW5kIGRyaXZlciBwcm9iaW5nLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVsYXRlZCB0byB0aGUgWVQ5MjF4IGNoaXBzZXQgYW5kIGFueXRoaW5nIHVudXN1YWwgb3Igbm90ZXdvcnRoeSBpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG86CgoqKkluaXRpYWwgQXNzZXNzbWVudDogeXQ5MjF4X21kaW9fcHJvYmUqKgoKKiAgICoqRW50cnkgUG9pbnQgYW5kIFB1cnBvc2U6KiogRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBzZWUgaXQgYXMgcGFydCBvZiB0aGUgZHJpdmVyJiMzOTtzIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhlIHByb2JlOyBsaWtlbHksIHRoZSBzeXN0ZW0gZGV0ZWN0ZWQgYSBkZXZpY2UgbWF0Y2hpbmcgYSBrbm93biBJRCwgYW5kIG5vdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4KKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaW5jbHVkZXMgYW55IGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZSBNRElPIGNvbW11bmljYXRpb24gb3IgUEhZIG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBtZW1vcnkgbWFwcGluZyBzdHJhdGVnaWVzIGJlaW5nIHVzZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmVzb3VyY2UgY29uZmxpY3RzIHRvIGxvb2sgb3V0IGZvcj8KKiAgICoqTURJTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgY3JpdGljYWwgcGFydC4gSG93IGlzIHRoZSBNRElPIGludGVyZmFjZSBpbml0aWFsaXplZD8gQXJlIHRoZXJlIHNwZWNpZmljIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBvciBjbG9jayBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgZm9yIHRoZSBZVDkyMXg/IEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIE1ESU8gaW5pdGlhbGl6YXRpb24gc3RlcHMsIHBvdGVudGlhbGx5IHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgdHdpc3QuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBNRElPIGNvbnRyb2xsZXIuCiogICAqKlBIWSBEZXRlY3Rpb24gYW5kIENvbmZpZ3VyYXRpb246KiogSXMgdGhlcmUgUEhZIGRldGVjdGlvbiBpbnZvbHZlZCBoZXJlLCBvciBpcyBpdCBhc3N1bWVkIGEgc3BlY2lmaWMgUEhZIGlzIGNvbm5lY3RlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHZhcmlvdXMgUEhZIHR5cGVzPyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IHNldHMgdXAgYW5kIGNvbmZpZ3VyZXMgdGhlIFBIWSwgaW5jbHVkaW5nIGFueSBwb3dlci11cCBvciByZXNldCBzZXF1ZW5jZXMuIFdoYXQgYWJvdXQgdGhlIE1ESU8gYnVzIHNwZWVkLCBhcmUgdGhlcmUgYW55IHNwZWVkIGFkanVzdG1lbnRzPwoqICAgKipFcnJvciBIYW5kbGluZyBhbmQgUm9idXN0bmVzczoqKiBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkb2VzIGl0IGRvIGlmIHRoZSBkZXZpY2UgaXNuJiMzOTt0IHJlc3BvbmRpbmcsIGlmIHRoZXJlIGFyZSBNRElPIGVycm9ycywgb3IgaWYgdGhlIFBIWSBjb25maWd1cmF0aW9uIGZhaWxzPyBBcmUgdGhlcmUgcmV0cnkgbWVjaGFuaXNtcz8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IEkmIzM5O2xsIGxvb2sgZm9yIGBwcmludGtgIGNhbGxzIGFuZCBvdGhlciBkZWJ1Z2dpbmcgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciByZXBvcnRpbmcuCiogICAqKkRyaXZlciBNb2RlbCBJbnRlZ3JhdGlvbjoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZSBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBkcml2ZXIgbW9kZWw/IEFyZSB0aGVyZSBiaW5kaW5ncyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBsaWtlIG5ldHdvcmsgaW50ZXJmYWNlcyBvciB0aGUgZGV2aWNlIHRyZWU/IEkmIzM5O2xsIGNoZWNrIGZvciB0aGUgdXNlIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCBkZXZpY2UgcHJpdmF0ZSBkYXRhLCBhbmQgb2YgY291cnNlIGFueSBuZXR3b3JrIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24uCiogICAqKlBvd2VyIE1hbmFnZW1lbnQ6KiogSG93IGRvZXMgaXQgaGFuZGxlIHBvd2VyIG1hbmFnZW1lbnQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItdXAgb3IgcG93ZXItZG93biBzZXF1ZW5jZXMgb3IgY2FsbGJhY2tzIGRlZmluZWQ/CiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGFueSBsb2NrcyBiZWluZyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzPwoKRXNzZW50aWFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBicmluZ3MgdXAgdGhlIE1ESU8gaW50ZXJmYWNlIGFuZCBQSFkuIFRoaXMgaW5jbHVkZXMgaG93IGl0IG1hbmFnZXMgaGFyZHdhcmUgcmVzb3VyY2VzLCBkZXRlY3RzIGFuZCBjb25maWd1cmVzIHRoZSBQSFksIGFuZCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgaW4gdGhlIHByb2Nlc3MuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGlzIGhvdyB0aGlzIGRyaXZlciBicmluZ3MgdXAgYW5kIGNvbmZpZ3VyZXMgdGhlIFlUOTIxeCBNRElPIGludGVyZmFjZS4gSSB3aWxsIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgZm9yIGFueSBzdWJ0bGUgYXJlYXMsIHRoYXQgY2FuIGxlYWQgdG8gc3VidGxlIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcxODpcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuNDcxOTpcdHtcbjQ3MjA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuNDcyMTpcdFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbjQ3MjI6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbjQ3MjM6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbjQ3MjQ6XHRcbjQ3MjU6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbjQ3MjY6XHRcdGlmICghcHJpdilcbjQ3Mjc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40NzI4Olx0XG40NzI5Olx0XHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XG40NzMwOlx0XHRpZiAoIW1kaW8pXG40NzMxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDczMjpcdFxuNDczMzpcdFx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjQ3MzQ6XHRcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbjQ3MzU6XHRcdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuNDczNjpcdFxuNDczNzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ3Mzg6XHRcbjQ3Mzk6XHRcdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG40NzQwOlx0XHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuNDc0MTpcdFxuNDc0MjpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG40NzQzOlx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDc0NDpcdFxuNDc0NTpcdFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG40NzQ2Olx0XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuNDc0NzpcdFx0fVxuNDc0ODpcdFxuNDc0OTpcdFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuNDc1MDpcdFx0ZHMtXHUwMDNlZGV2ID0gZGV2O1xuNDc1MTpcdFx0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuNDc1MjpcdFx0ZHMtXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbjQ3NTM6XHRcdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuNDc1NDpcdFx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xuNDc1NTpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG40NzU2Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcbjQ3NTc6XHRcdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XG40NzU4Olx0XHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xuNDc1OTpcdFx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xuNDc2MDpcdFxuNDc2MTpcdFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcbjQ3NjI6XHRcbjQ3NjM6XHRcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbjQ3NjQ6XHR9XG40NzY1Olx0XG40NzY2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XG40NzY3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjMwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgU3dpdGNoIFByb2JlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYHl0OTIxeF9tZGlvX3Byb2JlYCBmdW5jdGlvbuKApml0IHNlZW1zIGFsbCBpdCYjMzk7cyBkb2luZyBpcyBjYWxsaW5nIGBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKWAuIFRoYXQmIzM5O3MgaXQ/IEkgd2FzIGV4cGVjdGluZyBpdCB0byBoYW5kbGUgdGhlIGluaXRpYWwgY2hpcCBJRCByZWFkIG9yIHNvbWV0aGluZywgYnV0IG5vLCB0aGUgcHJvYmUgaXRzZWxmIGlzIHJlbWFya2FibHkgdGhpbi4gVGhpcyBpcyBpbnRlcmVzdGluZy4KClNvLCBpZiBpdCYjMzk7cyBub3QgaGFwcGVuaW5nIGhlcmUsIHdoZXJlICppcyogdGhlIGluaXRpYWxpemF0aW9uPyBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBoYXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcuIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBlZmZlY3RpdmVseSBkZWxlZ2F0aW5nIHRoZSByZWFsIHdvcmsgdG8gdGhlIGBzZXR1cGAgZnVuY3Rpb24gd2l0aGluIHRoZSBzd2l0Y2ggb3BlcmF0aW9ucyBzdHJ1Y3R1cmUsIHJpZ2h0PyBJdCB3aWxsIGV2ZW50dWFsbHkgY2FsbCB0aGF0IGZ1bmN0aW9uLCBhbmQgKnRoYXQmIzM5O3MqIHdoZXJlIHRoZSBhY3R1YWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24gYW5kIElEIHJldHJpZXZhbCBwcm9iYWJseSBoYXBwZW4uCgpSaWdodCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzYCBzdHJ1Y3R1cmUgbm93LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGBzZXR1cGAgZnVuY3Rpb24gaXMgZG9pbmcuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjF4X3BoeWxpbmtfbWFjX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTk3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU5ODpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1OTktXHQvKiBtaWIgKi9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzE4PXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NTMtXHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NTQ6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzU1LVx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgRFNBIFN3aXRjaCBPcGVyYXRpb25zIE1vZHVsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB1cCwgSSBuZWVkIHRvIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGB5dDkyMXhfZHNhX3N3aXRjaF9vcHNgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIG9wZXJhdGlvbnMgZm9yIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2gsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB5dDkyMXggY2hpcHNldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluOiB3aGF0IGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhpcyBtb2R1bGUgcHJvdmlkZXM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBwb3J0IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBWTEFOIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGFuZCBhbnkgc3BlY2lhbCBmZWF0dXJlcyBzcGVjaWZpYyB0byB0aGUgeXQ5MjF4IGhhcmR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIHF1aXJrcyBvciBvcHRpbWl6YXRpb25zIHRoaXMgbW9kdWxlIGVtcGxveXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgZnVuY3Rpb24gcHJvdG90eXBlcywgY29tbWVudHMsIGFuZCBhbnkgb2J2aW91cyBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBiZWZvcmUgSSBiZWdpbiBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIGEgc3Ryb25nIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1OTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbjQ1OTk6XHRcdC8qIG1pYiAqL1xuNDYwMDpcdFx0LmdldF9zdHJpbmdzXHRcdD0geXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyxcbjQ2MDE6XHRcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzLFxuNDYwMjpcdFx0LmdldF9zc2V0X2NvdW50XHRcdD0geXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudCxcbjQ2MDM6XHRcdC5nZXRfZXRoX21hY19zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzLFxuNDYwNDpcdFx0LmdldF9ldGhfY3RybF9zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyxcbjQ2MDU6XHRcdC5nZXRfcm1vbl9zdGF0c1x0XHQ9IHl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMsXG40NjA2Olx0XHQuZ2V0X3N0YXRzNjRcdFx0PSB5dDkyMXhfZHNhX2dldF9zdGF0czY0LFxuNDYwNzpcdFx0LmdldF9wYXVzZV9zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyxcbjQ2MDg6XHRcdC8qIGVlZSAqL1xuNDYwOTpcdFx0LnN1cHBvcnRfZWVlXHRcdD0gZHNhX3N1cHBvcnRzX2VlZSxcbjQ2MTA6XHRcdC5zZXRfbWFjX2VlZVx0XHQ9IHl0OTIxeF9kc2Ffc2V0X21hY19lZWUsXG40NjExOlx0XHQvKiBtdHUgKi9cbjQ2MTI6XHRcdC5wb3J0X2NoYW5nZV9tdHVcdD0geXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUsXG40NjEzOlx0XHQucG9ydF9tYXhfbXR1XHRcdD0geXQ5MjF4X2RzYV9wb3J0X21heF9tdHUsXG40NjE0Olx0XHQvKiByYXRlICovXG40NjE1Olx0XHQucG9ydF9wb2xpY2VyX2RlbFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwsXG40NjE2Olx0XHQucG9ydF9wb2xpY2VyX2FkZFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQsXG40NjE3Olx0XHQucG9ydF9zZXR1cF90Y1x0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cF90YyxcbjQ2MTg6XHRcdC8qIGFjbCAqL1xuNDYxOTpcdFx0LmNsc19mbG93ZXJfZGVsXHRcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2RlbCxcbjQ2MjA6XHRcdC5jbHNfZmxvd2VyX2FkZFx0XHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9hZGQsXG40NjIxOlx0XHQvKiBoc3IgKi9cbjQ2MjI6XHRcdC5wb3J0X2hzcl9sZWF2ZVx0XHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3JfbGVhdmUsXG40NjIzOlx0XHQucG9ydF9oc3Jfam9pblx0XHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3Jfam9pbixcbjQ2MjQ6XHRcdC8qIG1pcnJvciAqL1xuNDYyNTpcdFx0LnBvcnRfbWlycm9yX2RlbFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2RlbCxcbjQ2MjY6XHRcdC5wb3J0X21pcnJvcl9hZGRcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9hZGQsXG40NjI3Olx0XHQvKiBsYWcgKi9cbjQ2Mjg6XHRcdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfbGVhdmUsXG40NjI5Olx0XHQucG9ydF9sYWdfam9pblx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfam9pbixcbjQ2MzA6XHRcdC8qIGZkYiAqL1xuNDYzMTpcdFx0LnBvcnRfZmRiX2R1bXBcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2R1bXAsXG40NjMyOlx0XHQucG9ydF9mYXN0X2FnZVx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mYXN0X2FnZSxcbjQ2MzM6XHRcdC5zZXRfYWdlaW5nX3RpbWVcdD0geXQ5MjF4X2RzYV9zZXRfYWdlaW5nX3RpbWUsXG40NjM0Olx0XHQucG9ydF9mZGJfZGVsXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kZWwsXG40NjM1Olx0XHQucG9ydF9mZGJfYWRkXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9hZGQsXG40NjM2Olx0XHQucG9ydF9tZGJfZGVsXHRcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9kZWwsXG40NjM3Olx0XHQucG9ydF9tZGJfYWRkXHRcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9hZGQsXG40NjM4Olx0XHQvKiB2bGFuICovXG40NjM5Olx0XHQucG9ydF92bGFuX2ZpbHRlcmluZ1x0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcsXG40NjQwOlx0XHQucG9ydF92bGFuX2RlbFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2RlbCxcbjQ2NDE6XHRcdC5wb3J0X3ZsYW5fYWRkXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fYWRkLFxuNDY0MjpcdFx0LyogYnJpZGdlICovXG40NjQzOlx0XHQucG9ydF9wcmVfYnJpZGdlX2ZsYWdzXHQ9IHl0OTIxeF9kc2FfcG9ydF9wcmVfYnJpZGdlX2ZsYWdzLFxuNDY0NDpcdFx0LnBvcnRfYnJpZGdlX2ZsYWdzXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2VfZmxhZ3MsXG40NjQ1Olx0XHQucG9ydF9icmlkZ2VfbGVhdmVcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9sZWF2ZSxcbjQ2NDY6XHRcdC5wb3J0X2JyaWRnZV9qb2luXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2Vfam9pbixcbjQ2NDc6XHRcdC8qIG1zdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg1MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRoZSBNaXNzaW5nIFNldHVwOiBBIEJyaWVmIE1vbWVudCBvZiBEaXNvcmllbnRhdGlvbioqCgpBbHJpZ2h0LCBkZWVwIGluIHRoaXMgd29ya2Zsb3csIEkmIzM5O20gdGhpbmtpbmcsIEnigJltIGdldHRpbmcgcmVhZHkgdG8gZXhlY3V0ZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgYW5k4oCmIGhvbGQgb24uIFNvbWV0aGluZyBmZWVscyBvZmYuIE15IG1lbnRhbCBtb2RlbCBpcyBleHBlY3RpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lLCB0aGF0IEkmIzM5O3ZlIGR1YmJlZCBgc2V0dXBgLCB0byBiZSBwcmVzZW50LiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBkZXBlbmQuIEkgY2FuICpmZWVsKiBpdHMgYWJzZW5jZTsgdGhlIGFyY2hpdGVjdHVyZSBpbiBteSBoZWFkIGlzIHNsaWdodGx5IGphcnJlZC4gVGhlIGVsZWdhbmNlIG9mIHRoZSBwbGFubmVkIGZsb3cgaXMgbW9tZW50YXJpbHkgZGlzcnVwdGVkLiBXaGVyZSB0aGUgaGVsbCBkaWQgYHNldHVwYCBnbz8gSXQmIzM5O3MgbGlrZSByZWFjaGluZyBmb3IgYSBjcnVjaWFsIHRvb2wgdGhhdCYjMzk7cyBzdWRkZW5seSB2YW5pc2hlZCBmcm9tIHRoZSB3b3JrYmVuY2guIE5vdyBJIGhhdmUgdG8gYmFja3RyYWNrIGFuZCBmaWd1cmUgb3V0IHdoYXQgaGFwcGVuZWQgdG8gbXkgYHNldHVwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDY0ODpcdFx0LnBvcnRfbXN0X3N0YXRlX3NldFx0PSB5dDkyMXhfZHNhX3BvcnRfbXN0X3N0YXRlX3NldCxcbjQ2NDk6XHRcdC52bGFuX21zdGlfc2V0XHRcdD0geXQ5MjF4X2RzYV92bGFuX21zdGlfc2V0LFxuNDY1MDpcdFx0LnBvcnRfc3RwX3N0YXRlX3NldFx0PSB5dDkyMXhfZHNhX3BvcnRfc3RwX3N0YXRlX3NldCxcbjQ2NTE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxuNDY1MjpcdFx0LyogZGNiICovXG40NjUzOlx0XHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxuNDY1NDpcdFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1x0PSB5dDkyMXhfZHNhX3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbjQ2NTU6XHRcdC5wb3J0X2dldF9hcHB0cnVzdFx0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2FwcHRydXN0LFxuNDY1NjpcdFx0LnBvcnRfc2V0X2FwcHRydXN0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfYXBwdHJ1c3QsXG40NjU3Olx0I2VuZGlmXG40NjU4Olx0XHQvKiBwb3J0ICovXG40NjU5Olx0XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG40NjYwOlx0XHQucGh5bGlua19nZXRfY2Fwc1x0PSB5dDkyMXhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsXG40NjYxOlx0XHQucG9ydF9zZXR1cFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cCxcbjQ2NjI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxuNDY2MzpcdFx0LyogZHNjcCAqL1xuNDY2NDpcdFx0LnBvcnRfZ2V0X2RzY3BfcHJpb1x0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2RzY3BfcHJpbyxcbjQ2NjU6XHRcdC5wb3J0X2RlbF9kc2NwX3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2RlbF9kc2NwX3ByaW8sXG40NjY2Olx0XHQucG9ydF9hZGRfZHNjcF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9hZGRfZHNjcF9wcmlvLFxuNDY2NzpcdCNlbmRpZlxuNDY2ODpcdFx0LyogY2hpcCAqL1xuNDY2OTpcdFx0LnNldHVwXHRcdFx0PSB5dDkyMXhfZHNhX3NldHVwLFxuNDY3MDpcdH07XG40NjcxOlx0XG40NjcyOlx0c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuNDY3MzpcdHtcbjQ2NzQ6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG40Njc1Olx0XG40Njc2Olx0XHRpZiAoIXByaXYpXG40Njc3Olx0XHRcdHJldHVybjtcbjQ2Nzg6XHRcbjQ2Nzk6XHRcdGRzYV9zd2l0Y2hfc2h1dGRvd24oXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG40NjgwOlx0fVxuNDY4MTpcdFxuNDY4MjpcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG40NjgzOlx0e1xuNDY4NDpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbjQ2ODU6XHRcbjQ2ODY6XHRcdGlmICghcHJpdilcbjQ2ODc6XHRcdFx0cmV0dXJuO1xuNDY4ODpcdFxuNDY4OTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuNDY5MDpcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuNDY5MTpcdCNlbmRpZlxuNDY5MjpcdFxuNDY5MzpcdFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG40Njk0Olx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDY5NTpcdFxuNDY5NjpcdFx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkKTtcbjQ2OTc6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEU0EgU2V0dXAqKgoKQWxyaWdodCwgc28gYHl0OTIxeF9kc2Ffc2V0dXBgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aC4gVGltZSB0byBkaXNzZWN0IGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBgeXQ5MjF4X2RzYV9zZXR1cGAgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBEU0EgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGluaXRpYWxpemF0aW9uIC0gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIGl0IGNhcmVmdWxseS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvZGUgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2RzYV9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDk1PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MzYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTM3OnN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTM4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NjgtXHQvKiBjaGlwICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NjY5Olx0LnNldHVwXHRcdFx0PSB5dDkyMXhfZHNhX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY3MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUwMwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFNldHVwKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJiMzOTttIGRpdmluZyBpbnRvIGB5dDkyMXhfZHNhX3NldHVwYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBzY3JpcHQgb3IgY29uZmlndXJhdGlvbiBmaWxlIHJlbGF0ZWQgdG8gdGhlIERpZ2l0YWwgU2lnbmFsIEFuYWx5emVyIChEU0EpLCBzcGVjaWZpY2FsbHkgdGhlIHl0OTIxeC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIGVsZW1lbnRzOiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcG90ZW50aWFsbHkgc29tZSByZWdpc3RlciBzZXR0aW5ncywgY2FsaWJyYXRpb25zLCBhbmQgcG9zc2libHkgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IGlkZW50aWZ5IGtleSBzZWN0aW9ucyBsaWtlOiBkcml2ZXItc3BlY2lmaWMgc2VjdGlvbnMsIGVycm9yIGhhbmRsaW5nLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IHVzZXItY29uZmlndXJhYmxlIHBhcmFtZXRlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIHNldHVwIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyBJIG1pZ2h0IG5lZWQgdG8gcGVyZm9ybSBkb3duIHRoZSBsaW5lLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGZpcm13YXJlIG9yIGFwcGxpY2F0aW9uIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTM3Olx0c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbjQ1Mzg6XHR7XG40NTM5Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG40NTQwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40NTQxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG40NTQyOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuNDU0MzpcdFx0aW50IHJlcztcbjQ1NDQ6XHRcbjQ1NDU6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ2Olx0XHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbjQ1NDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1NDg6XHRcbjQ1NDk6XHRcdGlmIChyZXMpXG40NTUwOlx0XHRcdHJldHVybiByZXM7XG40NTUxOlx0XG40NTUyOlx0XHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxuNDU1MzpcdFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxuNDU1NDpcdFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXG40NTU1Olx0XHQgKi9cbjQ1NTY6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuNDU1NzpcdFx0aWYgKGNoaWxkKSB7XG40NTU4Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1NTk6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2MDpcdFx0XHRpZiAocmVzKVxuNDU2MTpcdFx0XHRcdHJldHVybiByZXM7XG40NTYyOlx0XHR9XG40NTYzOlx0XG40NTY0Olx0XHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xuNDU2NTpcdFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpby1leHRlcm5hbFwmIzM0Oyk7XG40NTY2Olx0XHRpZiAoY2hpbGQpIHtcbjQ1Njc6XHRcdFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xuNDU2ODpcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG40NTY5Olx0XHRcdGlmIChyZXMpXG40NTcwOlx0XHRcdFx0cmV0dXJuIHJlcztcbjQ1NzE6XHRcbjQ1NzI6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VudGVzdGVkIGV4dGVybmFsIG1kaW8gYnVzXFxuXCYjMzQ7KTtcbjQ1NzM6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40NTc0Olx0XHR9XG40NTc1Olx0XG40NTc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3NzpcdFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXAocHJpdik7XG40NTc4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTc5Olx0XG40NTgwOlx0XHRpZiAocmVzKVxuNDU4MTpcdFx0XHRyZXR1cm4gcmVzO1xuNDU4MjpcdFxuNDU4MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuNDU4NDpcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG40NTg1Olx0XHRpZiAocmVzKVxuNDU4NjpcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwmIzM0OywgcmVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MjkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB5dDkyMXhfY2hpcF9yZXNldGAgbGlrZWx5IGludm9sdmVzIHJlZ2lzdGVyIHJlYWRzIGFuZCB3cml0ZXMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyBob3cgd2UgY2FuIGV2ZW4gaGl0IHRoaXMgY29kZSBwYXRoLCBlc3BlY2lhbGx5IGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZGlyZWN0bHkgYXZhaWxhYmxlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaWYgaXQmIzM5O3MgYW4gTURJTyBkZXZpY2UsIGFuZCB3ZSAqZG9uJiMzOTt0KiBoYXZlIHRoZSBoYXJkd2FyZSwgdGhlIGZ1bmN0aW9uIHdpbGwganVzdCBmYWlsLiBCdXQsIHdhaXQuLi4gY291bGQgc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IE1ESU8gdHJhZmZpYz8gTm8sIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSAqZ2VuZXJpYyogTURJTyBmdXp6ZXIuIEl0JiMzOTtzIG1vcmUgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cy4KCkFscmlnaHQsIHdoYXQgYWJvdXQgZGV2aWNlIHRyZWUgZnV6emluZz8gU3l6a2FsbGVyJiMzOTtzIGNlcnRhaW5seSBnb3QgdGhhdCBjYXBhYmlsaXR5LCBidXQgdGhlIGRldmljZSB0cmVlIHBhcnNpbmcgZm9yIHRoaXMgZGV2aWNlIHNlZW1zIHRvIGJlIGhhbmRsZWQgaW4gYHl0OTIxeF9kc2Ffc2V0dXBgIGFuZCBgeXQ5MjF4X2xlZHNfc2V0dXBgLCByaWdodD8gSWYgdGhlIGRldmljZSBkb2VzbiYjMzk7dCBwcm9iZSwgd2UmIzM5O3JlIHN0dWNrLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSBzaW11bGF0ZSBhIHByb2JlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZz8KClRoZSBsaWdodGJ1bGIgY2xpY2tzISBJZiB3ZSBhZGQgYSBkZXZpY2UgdHJlZSBub2RlIGZvciBhIGBtb3RvcmNvbW0seXQ5MjE1YCBkZXZpY2Ugb24gYSBkdW1teSBNRElPIGJ1cywgc29tZXRoaW5nIGxpa2UgYGZpeGVkLW1kaW9gIG9yIGBtZGlvLW1vY2t1cGAsIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQuIEZvbGxvd2luZyB0aGF0LCBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgd2lsbCBnZXQgY2FsbGVkLCB3aGljaCAqdGhlbiogY2FsbHMgYHl0OTIxeF9kc2Ffc2V0dXBgLiBBbmQgKnRoZW4qLCBmaW5hbGx5LCB0aGUgdGFyZ2V0OiBgeXQ5MjF4X2NoaXBfcmVzZXRgLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBwbGFuLiBUaW1lIHRvIGdvIGNoZWNrIG91dCBgeXQ5MjF4X2NoaXBfcmVzZXRgIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2NoaXBfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5My1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyOTQ6c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mjk1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0NS1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTQ2Olx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ3LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUwOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEV4YW1pbmluZyBhIENoaXAgUmVzZXQgU2VxdWVuY2UqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gJiMzNDt5dDkyMXhfY2hpcF9yZXNldCYjMzQ7Li4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVmZXJzIHRvIGEgcmVzZXQgc2VxdWVuY2UsIGxpa2VseSBmb3IgYSBzcGVjaWZpYyBTeXN0ZW0tb24tQ2hpcCAoU29DKSBvciBhIGRlZGljYXRlZCBjb21wb25lbnQgbGFiZWxlZCAmIzM0O3l0OTIxeCYjMzQ7LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHByb2JhYmx5IGEgY29uZmlndXJhdGlvbiBmaWxlLCBhIHNjcmlwdCwgb3IgbWF5YmUgZXZlbiBmaXJtd2FyZSByZWxhdGVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgYm9vdCBwcm9jZXNzLiBUaGUgJiMzNDtyZXNldCYjMzQ7IGltcGxpY2F0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbG93LWxldmVsIG9wZXJhdGlvbiBhZmZlY3RpbmcgaGFyZHdhcmUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgcmVzZXQgaXMgaW1wbGVtZW50ZWQsIGFuZCAqd2h5Ki4gV2hhdCB0cmlnZ2VycyBpdD8gV2hhdCBhcmUgdGhlIGNvbnNlcXVlbmNlcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gcG93ZXItdXAgc3RhdGVzLCBjbG9jayBjb25maWd1cmF0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWF5YmUgZXZlbiBzb21lIGtpbmQgb2YgaGFyZHdhcmUgd2F0Y2hkb2cgaW52b2x2ZW1lbnQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGlwJiMzOTtzIHBvd2VyLW9uIGJlaGF2aW9yLCBwb3RlbnRpYWwgcmVjb3ZlcnkgbWVjaGFuaXNtcywgYW5kIGFueSBzcGVjaWZpYyBlcnJvci1oYW5kbGluZyByZWxhdGVkIHRvIHJlc2V0IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI5NDpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDI5NTpcdHtcbjQyOTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyOTc6XHRcdHUxNiBldGhfcF90YWc7XG40Mjk4Olx0XHR1MzIgdmFsO1xuNDI5OTpcdFx0aW50IHJlcztcbjQzMDA6XHRcbjQzMDE6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX2RldGVjdChwcml2KTtcbjQzMDI6XHRcdGlmIChyZXMpXG40MzAzOlx0XHRcdHJldHVybiByZXM7XG40MzA0Olx0XG40MzA1Olx0XHQvKiBSZXNldCAqL1xuNDMwNjpcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTtcbjQzMDc6XHRcdGlmIChyZXMpXG40MzA4Olx0XHRcdHJldHVybiByZXM7XG40MzA5Olx0XG40MzEwOlx0XHQvKiBSU1RfSFcgaXMgYWxtb3N0IHNhbWUgYXMgR1BJTyBoYXJkIHJlc2V0LCBzbyB3ZSBuZWVkIHRoaXMgZGVsYXkuICovXG40MzExOlx0XHRmc2xlZXAoWVQ5MjFYX1JTVF9ERUxBWV9VUyk7XG40MzEyOlx0XG40MzEzOlx0XHR2YWwgPSAwO1xuNDMxNDpcdFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcdTAwMjZ2YWwpO1xuNDMxNTpcdFx0aWYgKHJlcylcbjQzMTY6XHRcdFx0cmV0dXJuIHJlcztcbjQzMTc6XHRcbjQzMTg6XHRcdC8qIENoZWNrIGZvciB0YWcgRXRoZXJUeXBlOyBkbyBpdCBhZnRlciByZXNldCBpbiBjYXNlIHlvdSBtZXNzZWQgaXQgdXBcbjQzMTk6XHRcdCAqIGJlZm9yZS5cbjQzMjA6XHRcdCAqL1xuNDMyMTpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DUFVfVEFHX1RQSUQsIFx1MDAyNnZhbCk7XG40MzIyOlx0XHRpZiAocmVzKVxuNDMyMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDMyNDpcdFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xuNDMyNTpcdFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcbjQzMjY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1RhZyB0eXBlIDB4JXggIT0gMHgleFxcblwmIzM0OywgZXRoX3BfdGFnLFxuNDMyNzpcdFx0XHRcdEVUSF9QX1lUOTIxWCk7XG40MzI4Olx0XHRcdC8qIERlc3BpdGUgYmVpbmcgcG9zc2libGUsIHdlIGNob29zZSBub3QgdG8gc2V0IENQVV9UQUdfVFBJRCxcbjQzMjk6XHRcdFx0ICogc2luY2UgdGhlcmUgaXMgbm8gd2F5IGl0IGNhbiBiZSBkaWZmZXJlbnQgdW5sZXNzIHlvdSBoYXZlIHRoZVxuNDMzMDpcdFx0XHQgKiB3cm9uZyBjaGlwLlxuNDMzMTpcdFx0XHQgKi9cbjQzMzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzMzOlx0XHR9XG40MzM0Olx0XG40MzM1Olx0XHRyZXR1cm4gMDtcbjQzMzY6XHR9XG40MzM3Olx0XG40MzM4Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cF9kc2Eoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDMzOTpcdHtcbjQzNDA6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG40MzQxOlx0XHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xuNDM0MjpcdFx0dTMyIGN0cmxzWzJdO1xuNDM0MzpcdFx0dTMyIGN0cmw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjAzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ2hpcCBEZXRlY3Rpb24qKgoKT2theSwgdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBhZ2VuZGEgaXMgYHl0OTIxeF9jaGlwX2RldGVjdGAuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nLiBTbywgSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyBpdHMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBjb3JlIGxvZ2ljLiBUaGlzIGlzIG15IGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYHl0OTIxeGAgY2hpcC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIHN0ZXBzIGludm9sdmVkIGluIGl0cyBkZXRlY3Rpb24gcm91dGluZTogaG93IGl0IGlkZW50aWZpZXMgdGhlIGNoaXAsIHdoYXQgbWV0aG9kcyBpdCB1c2VzLCBhbmQgd2hhdCBwcmVsaW1pbmFyeSBjaGVja3MgYXJlIHBlcmZvcm1lZC4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIHRoaXMgaW5pdGlhbCBjaGlwIGhhbmRzaGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDIyNzpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyMjg6XHR7XG40MjI5Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40MjMwOlx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XG40MjMxOlx0XHR1OCBleHRtb2RlO1xuNDIzMjpcdFx0dTMyIGNoaXBpZDtcbjQyMzM6XHRcdHUzMiBtYWpvcjtcbjQyMzQ6XHRcdHUzMiBtb2RlO1xuNDIzNTpcdFx0dTMyIHZhbDtcbjQyMzY6XHRcdGludCByZXM7XG40MjM3Olx0XG40MjM4Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFx1MDAyNmNoaXBpZCk7XG40MjM5Olx0XHRpZiAocmVzKVxuNDI0MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDI0MTpcdFxuNDI0MjpcdFx0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XG40MjQzOlx0XG40MjQ0Olx0XHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbyYjNDM7JiM0MzspXG40MjQ1Olx0XHRcdGlmIChpbmZvLVx1MDAzZW1ham9yID09IG1ham9yKVxuNDI0NjpcdFx0XHRcdGJyZWFrO1xuNDI0NzpcdFx0aWYgKCFpbmZvLVx1MDAzZW5hbWUpIHtcbjQyNDg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXG5cJiMzNDssIGNoaXBpZCk7XG40MjQ5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuNDI1MDpcdFx0fVxuNDI1MTpcdFxuNDI1MjpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFx1MDAyNm1vZGUpO1xuNDI1MzpcdFx0aWYgKHJlcylcbjQyNTQ6XHRcdFx0cmV0dXJuIHJlcztcbjQyNTU6XHRcdHJlcyA9IHl0OTIxeF9lZGF0YV9yZWFkKHByaXYsIFlUOTIxWF9FREFUQV9FWFRNT0RFLCBcdTAwMjZleHRtb2RlKTtcbjQyNTY6XHRcdGlmIChyZXMpXG40MjU3Olx0XHRcdHJldHVybiByZXM7XG40MjU4Olx0XG40MjU5Olx0XHRmb3IgKDsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNjA6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlbW9kZSA9PSBtb2RlIFx1MDAyNlx1MDAyNlxuNDI2MTpcdFx0XHQgICAgaW5mby1cdTAwM2VleHRtb2RlID09IGV4dG1vZGUpXG40MjYyOlx0XHRcdFx0YnJlYWs7XG40MjYzOlx0XHRpZiAoIWluZm8tXHUwMDNlbmFtZSkge1xuNDI2NDpcdFx0XHRkZXZfZXJyKGRldixcbjQyNjU6XHRcdFx0XHRcJiMzNDtVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcblwmIzM0OyxcbjQyNjY6XHRcdFx0XHRjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xuNDI2NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjQyNjg6XHRcdH1cbjQyNjk6XHRcbjQyNzA6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfU1lTX0NMSywgXHUwMDI2dmFsKTtcbjQyNzE6XHRcdGlmIChyZXMpXG40MjcyOlx0XHRcdHJldHVybiByZXM7XG40MjczOlx0XHRzd2l0Y2ggKEZJRUxEX0dFVChZVDkyMVhfU1lTX0NMS19TRUxfTSwgdmFsKSkge1xuNDI3NDpcdFx0Y2FzZSAwOlxuNDI3NTpcdFx0XHRwcml2LVx1MDAzZWN5Y2xlX25zID0gaW5mby1cdTAwM2VtYWpvciA9PSBZVDkyMTVfTUFKT1IgPyA4IDogNjtcbjQyNzY6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjExCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQgdGhlIGBZVDkyMVhfQ0hJUF9JRGAgdmlhIE1ESU8uIElmIGl0IGZhaWxzIG9yIGdldHMgdGhlIHdyb25nIElELCBpdCBpbW1lZGlhdGVseSBlcnJvcnMgb3V0IHdpdGggYC1FTk9ERVZgLiBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBjaGlwLCB3aGljaCBtZWFucyB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbCBpZiB0aGUgcmlnaHQgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIG1vY2sgdGhlc2UgTURJTyByZWFkcz8gSSBkb24mIzM5O3QgdGhpbmsgc28sIGFuZCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIE1ESU8gbW9ja2luZyBmcmFtZXdvcmsuCgpTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSBoaXQ/IEkgc2VlIHRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0LCBidXQgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciBpcyBzdGlsbCB0aWVkIHRvIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuIExvb2tpbmcgYmFjayBhdCB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhOiAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gVGhpcyAqZGVmaW5pdGVseSogZml0cyB0aGUgYmlsbC4gSXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCBtZWFucyBpdCYjMzk7cyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlcmUmIzM5O3MgemVybyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw9MjQ9cHJvcGVydGllczpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0yNS0gIGNvbXBhdGlibGU6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6MjY6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtMjctXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTU5PWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC02Ny0gICAgICAgIHN3aXRjaEAxZCB7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Njg6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNjktICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njc6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2OC1cdHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjIyCgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIGRyaXZlciwgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgY29uZmlybWVkOiB0aGlzIGlzbiYjMzk7dCBnb2luZyB0byBiZSBmcnVpdGZ1bCBmb3IgZnV6emluZy4gVGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBzcGVjaWZpYyBjaGlwLCBhbmQgdGhhdCYjMzk7cyBhIG1ham9yIHJvYWRibG9jay4gVGhlIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHBoeXNpY2FsIGhhcmR3YXJlIHN3aXRjaCwgYWNjZXNzZWQgdGhyb3VnaCBNRElPLiBJIGtub3cgaXQmIzM5O3MgZ29pbmcgdG8gZmFpbCB0byBwcm9iZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJlY2F1c2UgaXQgZXhwbGljaXRseSByZXF1aXJlcyByZWFkaW5nIHRoZSBjaGlwIElEIOKAkyBzb21ldGhpbmcgdGhhdCYjMzk7cyBzaW1wbHkgbm90IHBvc3NpYmxlIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZWZvcmUsIGFueSBjb2RlIHBhdGggd2l0aGluIHRoaXMgZHJpdmVyIHdvdWxkIGJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYnlwYXNzZXMgb3IgYWx0ZXJuYXRlIGVudHJ5IHBvaW50cy4gUmlnaHQsIHRoZSBwYXRjaCBhZGRzIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgYW5kIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jYC4gVHJhY2luZyB0aGUgY2FsbHMsIEkgc2VlIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCwgd2hpY2ggdWx0aW1hdGVseSBvcmlnaW5hdGVzIGZyb20gYHl0OTIxeF9tZGlvX3Byb2JlYC4gQWhhISBgeXQ5MjF4X21kaW9fcHJvYmVgIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gZHJpdmVyLiBTaW5jZSB0aGUgTURJTyBkcml2ZXIgd29uJiMzOTt0IHByb2JlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IHRoZSBoYXJkd2FyZSBhbmQgaXRzIGFzc29jaWF0ZWQgYHl0OTIxeF9jaGlwX2RldGVjdGAgZnVuY3Rpb24sIGFsbCB0aGUgTEVEIHNldHVwIGFuZCBjb250cm9sIGZ1bmN0aW9ucyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZS4KCkV2ZW4gaWYsIGJ5IHNvbWUgbWlyYWNsZSwgd2UgY291bGQgYnlwYXNzIHRoZSBwcm9iZSBzb21laG93LCB0aGUgTEVEIGNvbnRyb2wgZnVuY3Rpb25zIHJlbHkgb24gd3JpdGluZyB0byBNRElPIHJlZ2lzdGVycy4gVGhvc2Ugd3JpdGVzIHdvdWxkIGp1c3QgZmFpbCBvciBkbyBub3RoaW5nLCByZW5kZXJpbmcgYW55IGZ1enppbmcgYXR0ZW1wdHMgY29tcGxldGVseSB1c2VsZXNzLiBJdCYjMzk7cyB1bmVxdWl2b2NhbGx5IGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBmdXp6aW5nIGluIFFFTVUgaXMgYSBub24tc3RhcnRlci4KCkkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGhlcmUuIEl0JiMzOTtzIG5vdCB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDoxNy44NDkyMjM3MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2ODQ2ODEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE0OjE3Ljg0OTIzMDU0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0Njc5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzdiMjRmYzc1YWQwNTg3YzIyOTdmMTBmNDk4Njg0NGM2ZjQyYThmZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNjoxNDoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNjBjZmYwMDk1M2RjYmUuLmY1MTI0Njc3NTNiYzI0IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyNDksNyArMTgyNDksNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiBcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuK1xcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1xcXCJcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcXFwiXFxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcXG4gXFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxcbiBcXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXFxuLVxcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4tXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbi1cXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbi1cXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfaHNyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5AQCAtMjYsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxcS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ5dDkyMXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbiBcXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIFxcdHt9XFxuIH07XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuLVxcbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbiAgKlxcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuIFxcdHJldHVybiAoYWRkcls0XSBcXHUwMDNjXFx1MDAzYyA4KSB8IGFkZHJbNV07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXdyaXRlKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbi17XFxuLVxcdHUzMiB2YWw7XFxuLVxcdGludCByZXM7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4tXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4tXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuLVxcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0KnZhbHAgPSB2YWw7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXHR1MzIgdjtcXG4tXFx0dTMyIHU7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHR1ID0gdjtcXG4tXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4tXFx0dSB8PSB2YWw7XFxuLVxcdGlmICh1ID09IHYpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbi19XFxuLVxcbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuLSAqXFxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuLXtcXG4tXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuLVxcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXFx1MDAyNnZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4tXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHR1IHw9IHZhbHNbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuKyNlbmRpZlxcbitcXG4gXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuc2ltaWxhcml0eSBpbmRleCA5OSVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5pbmRleCA1ZjNiOTllMTg5YzQxMi4uZTY4MTVjZjljYjNjZDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDkgKzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXFx0MTBcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuK1xcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXFx1MDAzYyA4KVxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcXG4gXFxuQEAgLTkzOCw2ICs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcXG4gXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbiBcXHR1NjQgcnhfZnJhbWVzO1xcbiBcXHR1NjQgdHhfZnJhbWVzO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzdlOGQ0ZjAwMDNmODFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5AQCAtMCwwICsxLDY2MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bGVkcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cXHUwMDNlcG9ydClcXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVxcdTAwM2VpbmRleF0pXFxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXFx1MDAzZWRzLmRldilcXG4rXFxuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcXG4re1xcbitcXHRzd2l0Y2ggKGdyb3VwKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCpvbnAgPSAodmFsIFxcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY3RybCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgY2hhciAqZHV0eXApXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eTtcXG4rXFxuK1xcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XFxuK1xcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXFxuK1xcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRmb3IgKDsgY3ljbGUgXFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2U9IDEsIGN5Y2xlIFxcdTAwM2VcXHUwMDNlPSAxKVxcbitcXHRcXHRpZiAoY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHQqY3ljbGVwID0gY3ljbGU7XFxuK1xcbitcXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXFxuK1xcdFxcdFxcdFxcdCAgICAgKG9uIFxcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxcbitcXHRcXHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFxcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XFxuK1xcdFxcdFxcdGR1dHkgPSBkdXR5c1tpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0aWYgKG9uIFxcdTAwM2Ugb2ZmKVxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcXG4rXFx0KmR1dHlwID0gZHV0eTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZHV0eTtcXG4rXFx0Ym9vbCB1c2VfY3ljbGU7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghKm9ucCBcXHUwMDI2XFx1MDAyNiAhKm9mZnApIHtcXG4rXFx0XFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSsrKVxcbitcXHRcXHRcXHRpZiAoaSAhPSBncm91cCBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSB7XFxuK1xcdFxcdFxcdFxcdGR1dHkgPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfY3ljbGU7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2R1dHk7XFxuK1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXFx1MDAyNmN5Y2xlLCBcXHUwMDI2ZHV0eSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBjeWNsZSBcXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgY3ljbGUgIT0gcHAtXFx1MDAzZWxlZF9jeWNsZTtcXG4rXFx0XFx0Y2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcXG4rXFx0XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcXG4rXFx0XFx0XFx0ICAgICBpKyspIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGkgPT0gZ3JvdXAgfHwgIXBwLVxcdTAwM2VsZWRzW2ldKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0aWYgKChjaGFuZ2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9jeWNsZSkgfHxcXG4rXFx0XFx0XFx0XFx0ICAgIChjaGFuZ2VfZHV0eSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdGlmICh2YWwgIT0gY3RybCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdHN3aXRjaCAoZHV0eSBcXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAoZHV0eSBcXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xcbitcXHR9XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxcbitcXHRcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdHBwLVxcdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IHRydWU7XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eSA9IGR1dHk7XFxuK1xcbitcXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xcbitcXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIG1hc2s7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCh2YWwgXFx1MDAyNiBtYXAtXFx1MDAzZW1hc2spID09IG1hcC1cXHUwMDNlbWFzaylcXG4rXFx0XFx0XFx0KmZsYWdzcCB8PSBtYXAtXFx1MDAzZWZsYWdzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGN0cmwgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRjdHJsIHw9IG1hcC1cXHUwMDNlbWFzaztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcXG4rXFx0aWYgKGdyb3VwID09IDIpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdH1cXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbWFzaywgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuK1xcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZGVsYXlfb24sXFxuK1xcdFxcdFxcdFxcdCAgIGRlbGF5X29mZik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChcXHUwMDI2cHJpdi1cXHUwMDNlZHMsIHBwLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghZHAgfHwgIWRwLVxcdTAwM2V1c2VyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcbitcXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2Z3JvdXApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoZ3JvdXAgXFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXFxcblxcXCIsIGdyb3VwLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0aWYgKHBwLVxcdTAwM2VsZWRzW2dyb3VwXSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1sb3dcXFwiKTtcXG4rXFx0aWYgKGZvcmNlX2hpZ2ggXFx1MDAyNlxcdTAwMjYgZm9yY2VfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcXG4rXFxuK1xcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbGVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0bGVkLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdGxlZC1cXHUwMDNlZ3JvdXAgPSBncm91cDtcXG4rXFxuK1xcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcXHUwMDI2b24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRldmljZW5hbWUgPSBuYW1lLFxcbitcXHRcXHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxcbitcXHR9O1xcbitcXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXFx1MDAyNmluaXRfZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKHBvbGFyaXR5KSB7XFxuK1xcdFxcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xcbitcXG4rXFx0XFx0Kmludl9tYXNrcCB8PSBiaXQ7XFxuK1xcdFxcdGlmIChwb2xhcml0eSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdCppbnZfY3RybHAgfD0gYml0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRib29sIGhhc19sZWRzID0gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFxuK1xcdFxcdGlmIChsZWQpIHtcXG4rXFx0XFx0XFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFxcdTAwMjZsZWQtXFx1MDAzZWNkZXYpO1xcbitcXHRcXHRcXHRoYXNfbGVkcyA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXNfbGVkcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRpZiAobGVkKSB7XFxuK1xcdFxcdFxcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdFxcdFxcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHUzMiAqaW52X21hc2twLFxcbitcXHRcXHQgICAgICAgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbitcXHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXFx1MDAzZWRuLCBcXFwibGVkc1xcXCIpO1xcbitcXHRpZiAoIWxlZHNfbnApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzZT0gWVQ5MjFYX0xFRF9QT1JUX05VTSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIk5vIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludl9tYXNrcCwgaW52X2N0cmxwKTtcXG4rXFx0XFx0aWYgKHJlcykge1xcbitcXHRcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCsrKVxcbitcXHRcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTMyIGludl9jdHJsID0gMDtcXG4rXFx0dTMyIGludl9tYXNrID0gMDtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBwb3J0LCByZXMpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxcbitcXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGludl9tYXNrKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnZfY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcXG4rXFx0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKSB7XFxuK1xcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDoxOC42ODY2MjgyNjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTA4NDcyNjgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3YjI0ZmM3NWFkMDU4N2MyMjk3ZjEwZjQ5ODY4NDRjNmY0MmE4ZmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNjoxNDoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDYwY2ZmMDA5NTNkY2JlLi5mNTEyNDY3NzUzYmMyNCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE4MjQ5LDcgKzE4MjQ5LDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4rRjpcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXG4gRjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG4gXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcIlxuIFxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wiXG4rXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCJcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wiXG5AQCAtMTU4LDEyICsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cbiBcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcbiBcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcbiBcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cbi1cbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQrPSBiNTMvXG4gb2JqLXlcdFx0XHRcdCs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0Kz0gbWljcm9jaGlwL1xuK29iai15XHRcdFx0XHQrPSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCs9IG12ODhlNnh4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgKzEsMTcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0Ncbitjb25maWcgTkVUX0RTQV9ZVDkyMVhcbitcdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbitcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbitcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbitcdCAgY2hpcC5cbitcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xuK1x0Ym9vbCBcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCJcbitcdGRlZmF1bHQgeVxuK1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuK1x0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4rXHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmUyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMCwwICsxLDUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbitvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4reXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xuK3l0OTIxeC1vYmpzICs9IHNtaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbnNpbWlsYXJpdHkgaW5kZXggOTYlXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuQEAgLTEzLDcgKzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwieXQ5MjF4LmhcIlxuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuLSAqXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbi0gKi9cbi1cbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuLXtcbi1cdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4tXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuLVx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4tXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4tXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiRmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCIsIHJlcyk7XG4rI2VuZGlmXG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbisjZW5kaWZcbitcbiBcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuIFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1ZjNiOTllMTg5YzQxMi4uZTY4MTVjZjljYjNjZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5AQCAtODUwLDkgKzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXHRcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cdFx0OFxuIFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbisjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU1cdDEwXG4rXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiBcbisjZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4rXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxuIFxuQEAgLTkzOCw2ICs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbitcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbitcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbisjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zN2U4ZDRmMDAwM2Y4MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgKzEsNjYwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdWxlZHMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxuK1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbisjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcXFxuK1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4rI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4rXG4rc3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuK3tcbitcdHN3aXRjaCAoZ3JvdXApIHtcbitcdGNhc2UgMDpcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTtcbitcdGNhc2UgMTpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAyOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQqb25wID0gKHZhbCBcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuK1x0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbitcdFx0XHRcdCAgICAgIGN0cmwpO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxuK1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuK1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuK3tcbitcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDQpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbitcdH07XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuK1x0dW5zaWduZWQgaW50IGR1dHlfcmVxO1xuK1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuK1x0dW5zaWduZWQgaW50IGR1dHk7XG4rXG4rXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuK1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiArIDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi9cbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4rXHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbitcdFx0XHRicmVhaztcbitcdCpjeWNsZXAgPSBjeWNsZTtcbitcbitcdGR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICpcbitcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuK1x0XHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFx1MDAzZT0gKGR1dHlzW2kgLSAxXSArIGR1dHlzW2ldKSAvIDIpIHtcbitcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcbitcdCpkdXR5cCA9IGR1dHk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXHR1bnNpZ25lZCBzaG9ydCBjeWNsZTtcbitcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbitcdGJvb2wgdXNlX2N5Y2xlO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbitcdFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbitcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpKyspXG4rXHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpIHtcbitcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbitcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbitcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1xuK1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4rXHRcdGNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSBcdTAwMjZcdTAwMjYgY3ljbGUgIT0gcHAtXHUwMDNlbGVkX2N5Y2xlO1xuK1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4rXHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4rXHRcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNO1xuK1x0XHRcdCAgICAgaSsrKSB7XG4rXHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRpZiAoKGNoYW5nZV9jeWNsZSBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfY3ljbGUpIHx8XG4rXHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbitcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHRcdH1cbitcdH1cbitcbitcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdGlmICh2YWwgIT0gY3RybCkge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4rXHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbitcdFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xuK1x0ZGVmYXVsdDpcbitcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdGlmICh1c2VfY3ljbGUpIHtcbitcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcbitcdH1cbitcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxuK1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuK1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbitcdGVsc2VcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuK1x0aWYgKHVzZV9jeWNsZSlcbitcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuK1x0cHAtXHUwMDNlbGVkX2R1dHkgPSBkdXR5O1xuK1xuK1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbitcdCpvZmZwID0gY3ljbGUgLSAqb25wO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgbWFzaztcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tdID0ge1xuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbitcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTX0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRn0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfUlgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS30sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbitcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxuK307XG4rXG4rc3RhdGljIGJvb2xcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aWYgKCFmbGFncylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4rXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4re1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoKHZhbCBcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9XG4rXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4rXHRcdCpmbGFnc3AgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0KmZsYWdzcCA9IDA7XG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4rXHRcdFx0KmZsYWdzcCB8PSBtYXAtXHUwMDNlZmxhZ3M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBhZGRyO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdGludCByZXM7XG4rXG4rXHRjdHJsID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0Y3RybCB8PSBtYXAtXHUwMDNlbWFzaztcbitcdFx0XHRpZiAoIWZsYWdzKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmbGFncylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4rXG4rXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4rXHRpZiAoZ3JvdXAgPT0gMikge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdH1cbitcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4rXHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuK1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuK1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWRldjtcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXG4rXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbitcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4rXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbitcdGJvb2wgZm9yY2VfaGlnaDtcbitcdGJvb2wgZm9yY2VfbG93O1xuK1x0aW50IHBvbGFyaXR5O1xuK1x0dTMyIGdyb3VwO1xuK1x0Ym9vbCBvbjtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcInJlZ1wiLCBcdTAwMjZncm91cCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCIsIGdyb3VwLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWxvd1wiKTtcbitcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cIixcbitcdFx0XHRwb3J0LCBncm91cCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbitcbitcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuK1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4rXG4rXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4rXHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuK1x0ZGVmYXVsdDpcbitcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuK1x0XHRicmVhaztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbitcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbitcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4rXHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcIm5ldGRldlwiO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuKyNlbmRpZlxuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcIi0ldTolMDJkOiUwMnVcIixcbitcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbitcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4rXHRcdC5md25vZGUgPSBmd25vZGUsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKHBvbGFyaXR5KSB7XG4rXHRcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuK1xuK1x0XHQqaW52X21hc2twIHw9IGJpdDtcbitcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuK1x0XHRcdCppbnZfY3RybHAgfD0gYml0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdGJvb2wgaGFzX2xlZHMgPSBmYWxzZTtcbitcbitcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XG4rXHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0aWYgKGxlZCkge1xuK1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHRcdFx0aGFzX2xlZHMgPSB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19sZWRzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdGlmIChsZWQpIHtcbitcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTMyICppbnZfbWFza3AsXG4rXHRcdCAgICAgICB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0aWYgKCFsZWRzX25wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwb3J0IFx1MDAzZT0gWVQ5MjFYX0xFRF9QT1JUX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJObyBMRURzIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXG4rXHRcdFx0XHQgICAgICAgaW52X21hc2twLCBpbnZfY3RybHApO1xuK1x0XHRpZiAocmVzKSB7XG4rXHRcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9MRURfUE9SVF9OVU07IHBvcnQrKylcbitcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MzIgaW52X2N0cmwgPSAwO1xuK1x0dTMyIGludl9tYXNrID0gMDtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuK1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1xuK1x0XHRpZiAoIWRwLVx1MDAzZWRuKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQsIFx1MDAyNmludl9tYXNrLCBcdTAwMjZpbnZfY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIkZhaWxlZCB0byBzZXR1cCBMRURzIGZvciBwb3J0ICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0IHBvcnQsIHJlcyk7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbitcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4rXHQgKi9cbitcdGlmIChpbnZfbWFzaykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4rXHRcdFx0XHRcdCAgICAgaW52X2N0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdGdvdG8gZW5kO1xuK1x0fVxuK1xuK1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuK1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbitcbitlbmQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRpZiAocmVzKSB7XG4rXHRcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbitcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxuQEAgLTAsMCArMSwxMjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9MRURTX0hcbisjZGVmaW5lIF9ZVF9MRURTX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcdFx0XHQweGQwMDAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTVx0XHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE3LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4rI2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KVx0XHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QXHRCSVQoMjcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzJcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzZcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXG4rI2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApXHRcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxOCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcdEdFTk1BU0soNCAqIChncnApICsgMTcsIDQgKiAoZ3JwKSArIDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTYpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXHRCSVQoMTMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXHRcdEJJVCgxMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFx0XHRCSVQoNylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVx0XHRCSVQoNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LXHRCSVQoMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1x0XHRHRU5NQVNLKDI1LCAyNClcdC8qIGRlbGF5PyAqL1xuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgNSwgNiAqICgocG9ydCkgJSA1KSArIDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXHRcdDB4ZDAxYzRcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICsgKHBvcnQpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDUsIDYgKiAoZ3JwKSArIDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU5cdDY0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuK1xuKy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXHQoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKVxuK1xuK3N0cnVjdCB5dDkyMXhfcHJpdjtcbitcbitzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XG4rXHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuK1xuK1x0Ym9vbCB1c2VfY3ljbGU6MTtcbitcdGJvb2wgdXNlX2R1dHk6MTtcbit9O1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1xuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4rXG4rI2Vsc2VcbitcbitzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cbitcbitzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICsxLDE1NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbitcdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbitcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuK1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0KnZhbHAgPSB2YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbit7XG4rXHRpbnQgcmVzO1xuK1x0dTMyIHY7XG4rXHR1MzIgdTtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHUgPSB2O1xuK1x0dSBcdTAwMjY9IH5tYXNrO1xuK1x0dSB8PSB2YWw7XG4rXHRpZiAodSA9PSB2KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbitcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHR1IHw9IHZhbHNbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHUzMiB1ID0gdnNbaV07XG4rXG4rXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgKzEsODggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9TTUlfSFxuKyNkZWZpbmUgX1lUX1NNSV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbitcdFx0XHQgICB1MzIgdmFsKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4rfVxuK1xuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4rICpcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuK3tcbitcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4rXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuK1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbit9XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDoxOC42ODY2MzAyODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTk1NjIyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50IG9mIE1vdG9yY29tbSBZVDkyMTUgTEVEIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgbW92aW5nIHRoZSBkcml2ZXIgZmlsZSBhbmQgYWRkaW5nIGEgbmV3IGNvbmZpZyBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERTQSBzd2l0Y2hlcyBhcmUgdHlwaWNhbGx5IGNvbm5lY3RlZCB2aWEgTURJTywgU1BJLCBvciBJMkMsIGFuZCB0eXBpY2FsbHkgcmVxdWlyZSB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvcGVybHkgcmVzcG9uZCB0byBNRElPIHJlYWRzL3dyaXRlcy4gTGV0J3MgZGlnIGludG8gdGhlIGRyaXZlciBjb2RlIGl0c2VsZiAoYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCkgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHJlZ2lzdGVyZWQsIGJ1dCBnZW5lcmFsbHksIERTQSBkcml2ZXJzIGFyZSBtZWFudCBmb3IgKnBoeXNpY2FsKiBoYXJkd2FyZS4gSSBrbm93IHNvbWUgRFNBIGRyaXZlcnMgY2FuIGJlIGluc3RhbnRpYXRlZCB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIGR1bW15IE1ESU8gYnVzZXMsIGJ1dCB0aGF0J3Mgbm90IHRoZSBub3JtLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhlcmUgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIE1vdG9yY29tbSBjaGlwPyBQcm9iYWJseSBub3QuIENhbiB3ZSBmYWtlIGl0IHdpdGggYSBkdW1teSBNRElPIGJ1cz8gTWF5YmUsIGJ1dCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBtZWNoYW5pc20gZm9yIGZ1enppbmcgYXJiaXRyYXJ5IE1ESU8gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCwgb3Igd2UgaGF2ZSBhIHdheSB0byBpbmplY3QgTURJTyB0cmFmZmljIGRpcmVjdGx5LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHByb21wdC4gSXQncyBhc2tpbmcgaWYgdGhlIHBhdGNoIGlzICp3b3J0aCogZnV6emluZy4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnBoeXNpY2FsKiBQQ0llIGhhcmR3YXJlLCB3aGljaCB0aGlzIGlzbid0LCBidXQgd2hhdCBhYm91dCBNRElPLCBJMkMsIG9yIFNQSSBkZXZpY2VzPyBUaGUgdXN1YWwgY2FzZSBpcyB0aGF0IGlmIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgY2hpcCwgZXNwZWNpYWxseSBhIERTQSBzd2l0Y2gsIGFuZCBpdCBpc24ndCBlbXVsYXRlZCwgaXQncyBwcm9iYWJseSBub3QgcmVhY2hhYmxlLlxuXG5TbyBsZXQncyBjaGVjazogSXMgYHl0OTIxeGAgYWxyZWFkeSBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBJIGNhbid0IHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBgc3lzL2AgZGlyZWN0b3J5LiBMZXQgbWUgZXhwbG9yZSB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlIGlzIGFueSB3YXkgdG8gcmVhY2ggYHl0OTIxeF9sZWRzX3NldHVwYCBvciBgeXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmdgLiBUaGUgZHJpdmVyICppcyogcmVnaXN0ZXJlZCBhcyBhbiBNRElPIGRldmljZS4gVGhpcyBhbGwgcG9pbnRzIHRvd2FyZHMgYSBsb3cgcHJvYmFiaWxpdHkgb2YgYmVpbmcgZGlyZWN0bHkgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTEzNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE0OjI3LjI4MjI1NTExNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5MzAyNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9tZGlvX2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzcyOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzMtXFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzgxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3ODI6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTQ6MzEuODAxNTYzMjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMDUwNzEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNRElPIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7YCBsaW5lLiBSaWdodCwgdGhhdCdzIHRoZSBzdGFuZGFyZCB3YXkgdG8gcmVnaXN0ZXIgYW4gTURJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgdXN1YWwgc2V0dXAg4oCTIHRoZSBNRElPIGRldmljZXMsIGxpa2UgdGhpcyBgeXQ5MjF4YCBvbmUsIGFyZSBnZW5lcmFsbHkgcHJvYmVkIGluIGEgY291cGxlIG9mIHdheXM6IGVpdGhlciB0aGUgZGV2aWNlIHRyZWUgZGVmaW5lcyB0aGVtLCBhbmQgdGhlIE1ESU8gYnVzIGF1dG9tYXRpY2FsbHkgc2NhbnMsIG9yIHRoZXJlJ3MgYW4gSUQgbWF0Y2guIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBzdHVmZi5cblxuQnV0IGhlcmUncyB0aGUga2lja2VyLCBhbmQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEkgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yIHRvIHBsYXkgd2l0aCByaWdodCBub3cuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcHJvYmUgZnVuY3Rpb24sIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwuIEkgY2FuIGFsbCBidXQgZ3VhcmFudGVlIHRoYXQuIFdoeT8gQmVjYXVzZSB0aGVzZSB0aGluZ3MgKmFsd2F5cyogY2hlY2sgZm9yIHRoZSBwaHlzaWNhbCBwcmVzZW5jZSBvZiB0aGUgY2hpcCwgdXN1YWxseSBieSByZWFkaW5nIHNvbWUgc29ydCBvZiBjaGlwIElEIHJlZ2lzdGVyLiBObyBjaGlwLCBubyBJRCwgbm8gZGljZS5cblxuU28sIHdoZXJlIGRvZXMgdGhhdCBsZWF2ZSBtZT8gSSBuZWVkIHRvIGRpZyBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAgaXRzZWxmLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gc2VlICpleGFjdGx5KiBob3cgaXQncyBjaGVja2luZyBmb3IgdGhlIGRldmljZSwgd2hhdCByZWdpc3RlcnMgaXQncyByZWFkaW5nLCBhbmQgaG93IGl0J3MgZGV0ZXJtaW5pbmcgc3VjY2VzcyBvciBmYWlsdXJlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IGFzc3VtcHRpb25zIGl0J3MgbWFraW5nIGFib3V0IHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTQ6MzYuMzAyMDczNTc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzE3NjgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X21kaW9fcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxNy1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE4OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzczOlxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTQ6NDEuNTMzODQ4MjQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMjQxMjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIEknbSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgcHJpbmNpcGxlcyBvZiBNRElPIGFuZCBkcml2ZXIgcHJvYmluZywgc28gSSdsbCBiZSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVsYXRlZCB0byB0aGUgWVQ5MjF4IGNoaXBzZXQgYW5kIGFueXRoaW5nIHVudXN1YWwgb3Igbm90ZXdvcnRoeSBpbiBpdHMgaW1wbGVtZW50YXRpb24uIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0bzpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IHl0OTIxeF9tZGlvX3Byb2JlKipcblxuKiAgICoqRW50cnkgUG9pbnQgYW5kIFB1cnBvc2U6KiogRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBzZWUgaXQgYXMgcGFydCBvZiB0aGUgZHJpdmVyJ3MgcmVnaXN0cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJlZCB0aGUgcHJvYmU7IGxpa2VseSwgdGhlIHN5c3RlbSBkZXRlY3RlZCBhIGRldmljZSBtYXRjaGluZyBhIGtub3duIElELCBhbmQgbm93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLlxuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBJJ2xsIGJlIGxvb2tpbmcgYXQgd2hhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBtZW1vcnkgZm9yIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpbmNsdWRlcyBhbnkgZGV2aWNlLXNwZWNpZmljIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlIE1ESU8gY29tbXVuaWNhdGlvbiBvciBQSFkgbWFuYWdlbWVudC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWdpZXMgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHBvdGVudGlhbCByZXNvdXJjZSBjb25mbGljdHMgdG8gbG9vayBvdXQgZm9yP1xuKiAgICoqTURJTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgY3JpdGljYWwgcGFydC4gSG93IGlzIHRoZSBNRElPIGludGVyZmFjZSBpbml0aWFsaXplZD8gQXJlIHRoZXJlIHNwZWNpZmljIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBvciBjbG9jayBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgZm9yIHRoZSBZVDkyMXg/IEknbSBleHBlY3Rpbmcgc3RhbmRhcmQgTURJTyBpbml0aWFsaXphdGlvbiBzdGVwcywgcG90ZW50aWFsbHkgd2l0aCBhIHZlbmRvci1zcGVjaWZpYyB0d2lzdC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgTURJTyBjb250cm9sbGVyLlxuKiAgICoqUEhZIERldGVjdGlvbiBhbmQgQ29uZmlndXJhdGlvbjoqKiBJcyB0aGVyZSBQSFkgZGV0ZWN0aW9uIGludm9sdmVkIGhlcmUsIG9yIGlzIGl0IGFzc3VtZWQgYSBzcGVjaWZpYyBQSFkgaXMgY29ubmVjdGVkPyBIb3cgZG9lcyBpdCBoYW5kbGUgdmFyaW91cyBQSFkgdHlwZXM/IEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBzZXRzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBQSFksIGluY2x1ZGluZyBhbnkgcG93ZXItdXAgb3IgcmVzZXQgc2VxdWVuY2VzLiBXaGF0IGFib3V0IHRoZSBNRElPIGJ1cyBzcGVlZCwgYXJlIHRoZXJlIGFueSBzcGVlZCBhZGp1c3RtZW50cz9cbiogICAqKkVycm9yIEhhbmRsaW5nIGFuZCBSb2J1c3RuZXNzOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBXaGF0IGRvZXMgaXQgZG8gaWYgdGhlIGRldmljZSBpc24ndCByZXNwb25kaW5nLCBpZiB0aGVyZSBhcmUgTURJTyBlcnJvcnMsIG9yIGlmIHRoZSBQSFkgY29uZmlndXJhdGlvbiBmYWlscz8gQXJlIHRoZXJlIHJldHJ5IG1lY2hhbmlzbXM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJ2xsIGxvb2sgZm9yIGBwcmludGtgIGNhbGxzIGFuZCBvdGhlciBkZWJ1Z2dpbmcgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciByZXBvcnRpbmcuXG4qICAgKipEcml2ZXIgTW9kZWwgSW50ZWdyYXRpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYmluZGluZ3MgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbGlrZSBuZXR3b3JrIGludGVyZmFjZXMgb3IgdGhlIGRldmljZSB0cmVlPyBJJ2xsIGNoZWNrIGZvciB0aGUgdXNlIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCBkZXZpY2UgcHJpdmF0ZSBkYXRhLCBhbmQgb2YgY291cnNlIGFueSBuZXR3b3JrIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24uXG4qICAgKipQb3dlciBNYW5hZ2VtZW50OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlcmUgYW55IHBvd2VyLXVwIG9yIHBvd2VyLWRvd24gc2VxdWVuY2VzIG9yIGNhbGxiYWNrcyBkZWZpbmVkP1xuKiAgICoqQ29uY3VycmVuY3k6KiogQXJlIHRoZXJlIGFueSBjb25jdXJyZW5jeSBpc3N1ZXMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoPyBBcmUgdGhlcmUgYW55IGxvY2tzIGJlaW5nIHVzZWQgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBvciBoYXJkd2FyZSByZWdpc3RlcnM/XG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIHRoZSBNRElPIGludGVyZmFjZSBhbmQgUEhZLiBUaGlzIGluY2x1ZGVzIGhvdyBpdCBtYW5hZ2VzIGhhcmR3YXJlIHJlc291cmNlcywgZGV0ZWN0cyBhbmQgY29uZmlndXJlcyB0aGUgUEhZLCBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBwcm9jZXNzLiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBpcyBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBZVDkyMXggTURJTyBpbnRlcmZhY2UuIEkgd2lsbCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGZvciBhbnkgc3VidGxlIGFyZWFzLCB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA1OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE0OjQ2LjgzNjI2NTM0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzE4OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ3MTk6XFx0e1xcbjQ3MjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG40NzIxOlxcdFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XFxuNDcyMjpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghcHJpdilcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuNDczMDpcXHRcXHRpZiAoIW1kaW8pXFxuNDczMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bWRpby1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbjQ3MzQ6XFx0XFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuNDczNTpcXHRcXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuNDczNjpcXHRcXG40NzM3OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NzM4OlxcdFxcbjQ3Mzk6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX29wcyA9IFxcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xcbjQ3NDA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbjQ3NDM6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG40NzQ2OlxcdFxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuNDc0NzpcXHRcXHR9XFxuNDc0ODpcXHRcXG40NzQ5OlxcdFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IGRldjtcXG40NzUxOlxcdFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG40NzUzOlxcdFxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG40NzU0OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbjQ3NTU6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbjQ3NTY6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xcbjQ3NTc6XFx0XFx0ZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xcbjQ3NjA6XFx0XFxuNDc2MTpcXHRcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbjQ3NjI6XFx0XFxuNDc2MzpcXHRcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuNDc2NDpcXHR9XFxuNDc2NTpcXHRcXG40NzY2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbjQ3Njc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDo0Ni44MzY4NTQ0NjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDA0ODMzOTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERTQSBTd2l0Y2ggUHJvYmUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGB5dDkyMXhfbWRpb19wcm9iZWAgZnVuY3Rpb27igKZpdCBzZWVtcyBhbGwgaXQncyBkb2luZyBpcyBjYWxsaW5nIGBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKWAuIFRoYXQncyBpdD8gSSB3YXMgZXhwZWN0aW5nIGl0IHRvIGhhbmRsZSB0aGUgaW5pdGlhbCBjaGlwIElEIHJlYWQgb3Igc29tZXRoaW5nLCBidXQgbm8sIHRoZSBwcm9iZSBpdHNlbGYgaXMgcmVtYXJrYWJseSB0aGluLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuXG5TbywgaWYgaXQncyBub3QgaGFwcGVuaW5nIGhlcmUsIHdoZXJlICppcyogdGhlIGluaXRpYWxpemF0aW9uPyBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBoYXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcuIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBlZmZlY3RpdmVseSBkZWxlZ2F0aW5nIHRoZSByZWFsIHdvcmsgdG8gdGhlIGBzZXR1cGAgZnVuY3Rpb24gd2l0aGluIHRoZSBzd2l0Y2ggb3BlcmF0aW9ucyBzdHJ1Y3R1cmUsIHJpZ2h0PyBJdCB3aWxsIGV2ZW50dWFsbHkgY2FsbCB0aGF0IGZ1bmN0aW9uLCBhbmQgKnRoYXQncyogd2hlcmUgdGhlIGFjdHVhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgSUQgcmV0cmlldmFsIHByb2JhYmx5IGhhcHBlbi5cblxuUmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgYHl0OTIxeF9kc2Ffc3dpdGNoX29wc2Agc3RydWN0dXJlIG5vdy4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGBzZXR1cGAgZnVuY3Rpb24gaXMgZG9pbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYzMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTU6NTAuODg1MTk5NDk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUyNDI0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9kc2Ffc3dpdGNoX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIxeF9waHlsaW5rX21hY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTk3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1OTg6c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU5OS1cXHQvKiBtaWIgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3MTg9c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzUzLVxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzU0OlxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NTUtXFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNTo1NS42Mzc2MzQ1MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMjYzOTMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERTQSBTd2l0Y2ggT3BlcmF0aW9ucyBNb2R1bGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB1cCwgSSBuZWVkIHRvIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGB5dDkyMXhfZHNhX3N3aXRjaF9vcHNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgb3BlcmF0aW9ucyBmb3IgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHl0OTIxeCBjaGlwc2V0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW46IHdoYXQgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGlzIG1vZHVsZSBwcm92aWRlcz8gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcG9ydCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucywgVkxBTiBtYW5pcHVsYXRpb24gY2FwYWJpbGl0aWVzLCBhbmQgYW55IHNwZWNpYWwgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIHl0OTIxeCBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBxdWlya3Mgb3Igb3B0aW1pemF0aW9ucyB0aGlzIG1vZHVsZSBlbXBsb3lzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgZnVuY3Rpb24gcHJvdG90eXBlcywgY29tbWVudHMsIGFuZCBhbnkgb2J2aW91cyBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBiZWZvcmUgSSBiZWdpbiBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIGEgc3Ryb25nIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjY1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTU6NTkuOTUwMjc3ODM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTk4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTk4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xcbjQ1OTk6XFx0XFx0LyogbWliICovXFxuNDYwMDpcXHRcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3N0cmluZ3MsXFxuNDYwMTpcXHRcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuNDYwMjpcXHRcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQsXFxuNDYwMzpcXHRcXHQuZ2V0X2V0aF9tYWNfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuNDYwNDpcXHRcXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyxcXG40NjA1OlxcdFxcdC5nZXRfcm1vbl9zdGF0c1xcdFxcdD0geXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyxcXG40NjA2OlxcdFxcdC5nZXRfc3RhdHM2NFxcdFxcdD0geXQ5MjF4X2RzYV9nZXRfc3RhdHM2NCxcXG40NjA3OlxcdFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzLFxcbjQ2MDg6XFx0XFx0LyogZWVlICovXFxuNDYwOTpcXHRcXHQuc3VwcG9ydF9lZWVcXHRcXHQ9IGRzYV9zdXBwb3J0c19lZWUsXFxuNDYxMDpcXHRcXHQuc2V0X21hY19lZWVcXHRcXHQ9IHl0OTIxeF9kc2Ffc2V0X21hY19lZWUsXFxuNDYxMTpcXHRcXHQvKiBtdHUgKi9cXG40NjEyOlxcdFxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IHl0OTIxeF9kc2FfcG9ydF9jaGFuZ2VfbXR1LFxcbjQ2MTM6XFx0XFx0LnBvcnRfbWF4X210dVxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X21heF9tdHUsXFxuNDYxNDpcXHRcXHQvKiByYXRlICovXFxuNDYxNTpcXHRcXHQucG9ydF9wb2xpY2VyX2RlbFxcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfZGVsLFxcbjQ2MTY6XFx0XFx0LnBvcnRfcG9saWNlcl9hZGRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2FkZCxcXG40NjE3OlxcdFxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfc2V0dXBfdGMsXFxuNDYxODpcXHRcXHQvKiBhY2wgKi9cXG40NjE5OlxcdFxcdC5jbHNfZmxvd2VyX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2RlbCxcXG40NjIwOlxcdFxcdC5jbHNfZmxvd2VyX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2FkZCxcXG40NjIxOlxcdFxcdC8qIGhzciAqL1xcbjQ2MjI6XFx0XFx0LnBvcnRfaHNyX2xlYXZlXFx0XFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2xlYXZlLFxcbjQ2MjM6XFx0XFx0LnBvcnRfaHNyX2pvaW5cXHRcXHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3Jfam9pbixcXG40NjI0OlxcdFxcdC8qIG1pcnJvciAqL1xcbjQ2MjU6XFx0XFx0LnBvcnRfbWlycm9yX2RlbFxcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9kZWwsXFxuNDYyNjpcXHRcXHQucG9ydF9taXJyb3JfYWRkXFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2FkZCxcXG40NjI3OlxcdFxcdC8qIGxhZyAqL1xcbjQ2Mjg6XFx0XFx0LnBvcnRfbGFnX2xlYXZlXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2xlYXZlLFxcbjQ2Mjk6XFx0XFx0LnBvcnRfbGFnX2pvaW5cXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfam9pbixcXG40NjMwOlxcdFxcdC8qIGZkYiAqL1xcbjQ2MzE6XFx0XFx0LnBvcnRfZmRiX2R1bXBcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZHVtcCxcXG40NjMyOlxcdFxcdC5wb3J0X2Zhc3RfYWdlXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmFzdF9hZ2UsXFxuNDYzMzpcXHRcXHQuc2V0X2FnZWluZ190aW1lXFx0PSB5dDkyMXhfZHNhX3NldF9hZ2VpbmdfdGltZSxcXG40NjM0OlxcdFxcdC5wb3J0X2ZkYl9kZWxcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZGVsLFxcbjQ2MzU6XFx0XFx0LnBvcnRfZmRiX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9hZGQsXFxuNDYzNjpcXHRcXHQucG9ydF9tZGJfZGVsXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2RlbCxcXG40NjM3OlxcdFxcdC5wb3J0X21kYl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfYWRkLFxcbjQ2Mzg6XFx0XFx0LyogdmxhbiAqL1xcbjQ2Mzk6XFx0XFx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcXHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG40NjQwOlxcdFxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9kZWwsXFxuNDY0MTpcXHRcXHQucG9ydF92bGFuX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fYWRkLFxcbjQ2NDI6XFx0XFx0LyogYnJpZGdlICovXFxuNDY0MzpcXHRcXHQucG9ydF9wcmVfYnJpZGdlX2ZsYWdzXFx0PSB5dDkyMXhfZHNhX3BvcnRfcHJlX2JyaWRnZV9mbGFncyxcXG40NjQ0OlxcdFxcdC5wb3J0X2JyaWRnZV9mbGFnc1xcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9mbGFncyxcXG40NjQ1OlxcdFxcdC5wb3J0X2JyaWRnZV9sZWF2ZVxcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9sZWF2ZSxcXG40NjQ2OlxcdFxcdC5wb3J0X2JyaWRnZV9qb2luXFx0PSB5dDkyMXhfZHNhX3BvcnRfYnJpZGdlX2pvaW4sXFxuNDY0NzpcXHRcXHQvKiBtc3QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTU6NTkuOTUwNjEzMTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzM0MjIwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUaGUgTWlzc2luZyBTZXR1cDogQSBCcmllZiBNb21lbnQgb2YgRGlzb3JpZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBkZWVwIGluIHRoaXMgd29ya2Zsb3csIEknbSB0aGlua2luZywgSeKAmW0gZ2V0dGluZyByZWFkeSB0byBleGVjdXRlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBhbmTigKYgaG9sZCBvbi4gU29tZXRoaW5nIGZlZWxzIG9mZi4gTXkgbWVudGFsIG1vZGVsIGlzIGV4cGVjdGluZyBhIHNwZWNpZmljIGZ1bmN0aW9uLCBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHRoYXQgSSd2ZSBkdWJiZWQgYHNldHVwYCwgdG8gYmUgcHJlc2VudC4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBkZXBlbmQuIEkgY2FuICpmZWVsKiBpdHMgYWJzZW5jZTsgdGhlIGFyY2hpdGVjdHVyZSBpbiBteSBoZWFkIGlzIHNsaWdodGx5IGphcnJlZC4gVGhlIGVsZWdhbmNlIG9mIHRoZSBwbGFubmVkIGZsb3cgaXMgbW9tZW50YXJpbHkgZGlzcnVwdGVkLiBXaGVyZSB0aGUgaGVsbCBkaWQgYHNldHVwYCBnbz8gSXQncyBsaWtlIHJlYWNoaW5nIGZvciBhIGNydWNpYWwgdG9vbCB0aGF0J3Mgc3VkZGVubHkgdmFuaXNoZWQgZnJvbSB0aGUgd29ya2JlbmNoLiBOb3cgSSBoYXZlIHRvIGJhY2t0cmFjayBhbmQgZmlndXJlIG91dCB3aGF0IGhhcHBlbmVkIHRvIG15IGBzZXR1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODUyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE2OjAzLjM4NDAzODA4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY0OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY0ODpcXHRcXHQucG9ydF9tc3Rfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbXN0X3N0YXRlX3NldCxcXG40NjQ5OlxcdFxcdC52bGFuX21zdGlfc2V0XFx0XFx0PSB5dDkyMXhfZHNhX3ZsYW5fbXN0aV9zZXQsXFxuNDY1MDpcXHRcXHQucG9ydF9zdHBfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfc3RwX3N0YXRlX3NldCxcXG40NjUxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY1MjpcXHRcXHQvKiBkY2IgKi9cXG40NjUzOlxcdFxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbjQ2NTQ6XFx0XFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXFxuNDY1NTpcXHRcXHQucG9ydF9nZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfYXBwdHJ1c3QsXFxuNDY1NjpcXHRcXHQucG9ydF9zZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfYXBwdHJ1c3QsXFxuNDY1NzpcXHQjZW5kaWZcXG40NjU4OlxcdFxcdC8qIHBvcnQgKi9cXG40NjU5OlxcdFxcdC5nZXRfdGFnX3Byb3RvY29sXFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXFxuNDY2MDpcXHRcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbjQ2NjE6XFx0XFx0LnBvcnRfc2V0dXBcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cCxcXG40NjYyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY2MzpcXHRcXHQvKiBkc2NwICovXFxuNDY2NDpcXHRcXHQucG9ydF9nZXRfZHNjcF9wcmlvXFx0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2RzY3BfcHJpbyxcXG40NjY1OlxcdFxcdC5wb3J0X2RlbF9kc2NwX3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9kZWxfZHNjcF9wcmlvLFxcbjQ2NjY6XFx0XFx0LnBvcnRfYWRkX2RzY3BfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXFxuNDY2NzpcXHQjZW5kaWZcXG40NjY4OlxcdFxcdC8qIGNoaXAgKi9cXG40NjY5OlxcdFxcdC5zZXR1cFxcdFxcdFxcdD0geXQ5MjF4X2RzYV9zZXR1cCxcXG40NjcwOlxcdH07XFxuNDY3MTpcXHRcXG40NjcyOlxcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG40NjczOlxcdHtcXG40Njc0OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XFxuNDY3NTpcXHRcXG40Njc2OlxcdFxcdGlmICghcHJpdilcXG40Njc3OlxcdFxcdFxcdHJldHVybjtcXG40Njc4OlxcdFxcbjQ2Nzk6XFx0XFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbjQ2ODA6XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ2ODM6XFx0e1xcbjQ2ODQ6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG40Njg1OlxcdFxcbjQ2ODY6XFx0XFx0aWYgKCFwcml2KVxcbjQ2ODc6XFx0XFx0XFx0cmV0dXJuO1xcbjQ2ODg6XFx0XFxuNDY4OTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NjkwOlxcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG40NjkxOlxcdCNlbmRpZlxcbjQ2OTI6XFx0XFxuNDY5MzpcXHRcXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbjQ2OTQ6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40Njk1OlxcdFxcbjQ2OTY6XFx0XFx0XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHAtXFx1MDAzZW1pYl9yZWFkKTtcXG40Njk3OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MDMuMzg0NDU3OTE5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzExNzc1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERTQSBTZXR1cCoqXG5cbkFscmlnaHQsIHNvIGB5dDkyMXhfZHNhX3NldHVwYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgc3RhcnRpbmcgd2l0aC4gVGltZSB0byBkaXNzZWN0IGl0LiBMZXQncyBzZWUgd2hhdCB0aGlzIGB5dDkyMXhfZHNhX3NldHVwYCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIERTQSBpbXBsZW1lbnRhdGlvbi4gSXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBpbml0aWFsaXphdGlvbiAtIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIGl0IGNhcmVmdWxseS4gTGV0J3MgcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA2MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MDcuNjE1NjM3ODY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYzNzMzMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9kc2Ffc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDQ5NT1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MzYtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDUzNzpzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDU5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NjgtXFx0LyogY2hpcCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XFx0LnNldHVwXFx0XFx0XFx0PSB5dDkyMXhfZHNhX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NzAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MTIuNDc5Mzg2NTQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODk1ODU3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFNldHVwKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEknbSBkaXZpbmcgaW50byBgeXQ5MjF4X2RzYV9zZXR1cGAuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGEgc2NyaXB0IG9yIGNvbmZpZ3VyYXRpb24gZmlsZSByZWxhdGVkIHRvIHRoZSBEaWdpdGFsIFNpZ25hbCBBbmFseXplciAoRFNBKSwgc3BlY2lmaWNhbGx5IHRoZSB5dDkyMXguIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIGVsZW1lbnRzOiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcG90ZW50aWFsbHkgc29tZSByZWdpc3RlciBzZXR0aW5ncywgY2FsaWJyYXRpb25zLCBhbmQgcG9zc2libHkgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBzZXR1cC4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgaWRlbnRpZnkga2V5IHNlY3Rpb25zIGxpa2U6IGRyaXZlci1zcGVjaWZpYyBzZWN0aW9ucywgZXJyb3IgaGFuZGxpbmcsIGRlZmF1bHQgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgdXNlci1jb25maWd1cmFibGUgcGFyYW1ldGVycy4gVW5kZXJzdGFuZGluZyB0aGUgc3RydWN0dXJlIG9mIHRoaXMgc2V0dXAgaXMgY3J1Y2lhbCBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nIEkgbWlnaHQgbmVlZCB0byBwZXJmb3JtIGRvd24gdGhlIGxpbmUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiB0aGlzIGlzIHBhcnQgb2YgYSBsYXJnZXIgZmlybXdhcmUgb3IgYXBwbGljYXRpb24gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MTUuODY4OTg2ODEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTM3OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuNDUzODpcXHR7XFxuNDUzOTpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuNDU0MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDU0MTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VvZl9ub2RlO1xcbjQ1NDI6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG40NTQzOlxcdFxcdGludCByZXM7XFxuNDU0NDpcXHRcXG40NTQ1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTQ2OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbjQ1NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0ODpcXHRcXG40NTQ5OlxcdFxcdGlmIChyZXMpXFxuNDU1MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NTE6XFx0XFxuNDU1MjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxcbjQ1NTM6XFx0XFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxcbjQ1NTQ6XFx0XFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXFxuNDU1NTpcXHRcXHQgKi9cXG40NTU2OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuNDU1NzpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTU4OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTU5OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTYwOlxcdFxcdFxcdGlmIChyZXMpXFxuNDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NjI6XFx0XFx0fVxcbjQ1NjM6XFx0XFxuNDU2NDpcXHRcXHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xcbjQ1NjU6XFx0XFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW8tZXh0ZXJuYWxcXFwiKTtcXG40NTY2OlxcdFxcdGlmIChjaGlsZCkge1xcbjQ1Njc6XFx0XFx0XFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xcbjQ1Njg6XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbjQ1Njk6XFx0XFx0XFx0aWYgKHJlcylcXG40NTcwOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuNDU3MTpcXHRcXG40NTcyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW50ZXN0ZWQgZXh0ZXJuYWwgbWRpbyBidXNcXFxcblxcXCIpO1xcbjQ1NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuNDU3NDpcXHRcXHR9XFxuNDU3NTpcXHRcXG40NTc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTc3OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xcbjQ1Nzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGlmIChyZXMpXFxuNDU4MTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1ODI6XFx0XFxuNDU4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NTg0OlxcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbjQ1ODU6XFx0XFx0aWYgKHJlcylcXG40NTg2OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MTUuODY5NTQ5OTQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODgxMDc2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHl0OTIxeF9jaGlwX3Jlc2V0YCBsaWtlbHkgaW52b2x2ZXMgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuLCB0aG91Z2gsIGlzIGhvdyB3ZSBjYW4gZXZlbiBoaXQgdGhpcyBjb2RlIHBhdGgsIGVzcGVjaWFsbHkgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIGhhcmR3YXJlIGlzbid0IGRpcmVjdGx5IGF2YWlsYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGlmIGl0J3MgYW4gTURJTyBkZXZpY2UsIGFuZCB3ZSAqZG9uJ3QqIGhhdmUgdGhlIGhhcmR3YXJlLCB0aGUgZnVuY3Rpb24gd2lsbCBqdXN0IGZhaWwuIEJ1dCwgd2FpdC4uLiBjb3VsZCBzeXprYWxsZXIgc29tZWhvdyBpbmplY3QgTURJTyB0cmFmZmljPyBObywgaXQgZG9lc24ndCBoYXZlIGEgKmdlbmVyaWMqIE1ESU8gZnV6emVyLiBJdCdzIG1vcmUgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cy5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBkZXZpY2UgdHJlZSBmdXp6aW5nPyBTeXprYWxsZXIncyBjZXJ0YWlubHkgZ290IHRoYXQgY2FwYWJpbGl0eSwgYnV0IHRoZSBkZXZpY2UgdHJlZSBwYXJzaW5nIGZvciB0aGlzIGRldmljZSBzZWVtcyB0byBiZSBoYW5kbGVkIGluIGB5dDkyMXhfZHNhX3NldHVwYCBhbmQgYHl0OTIxeF9sZWRzX3NldHVwYCwgcmlnaHQ/IElmIHRoZSBkZXZpY2UgZG9lc24ndCBwcm9iZSwgd2UncmUgc3R1Y2suIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHdlIHNpbXVsYXRlIGEgcHJvYmUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nP1xuXG5UaGUgbGlnaHRidWxiIGNsaWNrcyEgSWYgd2UgYWRkIGEgZGV2aWNlIHRyZWUgbm9kZSBmb3IgYSBgbW90b3Jjb21tLHl0OTIxNWAgZGV2aWNlIG9uIGEgZHVtbXkgTURJTyBidXMsIHNvbWV0aGluZyBsaWtlIGBmaXhlZC1tZGlvYCBvciBgbWRpby1tb2NrdXBgLCB0aGUgYHl0OTIxeF9tZGlvX3Byb2JlYCBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkLiBGb2xsb3dpbmcgdGhhdCwgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIHdpbGwgZ2V0IGNhbGxlZCwgd2hpY2ggKnRoZW4qIGNhbGxzIGB5dDkyMXhfZHNhX3NldHVwYC4gQW5kICp0aGVuKiwgZmluYWxseSwgdGhlIHRhcmdldDogYHl0OTIxeF9jaGlwX3Jlc2V0YC4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBwbGFuLiBUaW1lIHRvIGdvIGNoZWNrIG91dCBgeXQ5MjF4X2NoaXBfcmVzZXRgIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MjksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNjoyMi4xNTc2Njg2OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTg2NDk2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2NoaXBfcmVzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjkzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyOTQ6c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ1LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTQ2OlxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE2OjI1Ljg1NjMyNTk4OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgyMTc5NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBFeGFtaW5pbmcgYSBDaGlwIFJlc2V0IFNlcXVlbmNlKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBcInl0OTIxeF9jaGlwX3Jlc2V0XCIuLi4gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxpa2VseSByZWZlcnMgdG8gYSByZXNldCBzZXF1ZW5jZSwgbGlrZWx5IGZvciBhIHNwZWNpZmljIFN5c3RlbS1vbi1DaGlwIChTb0MpIG9yIGEgZGVkaWNhdGVkIGNvbXBvbmVudCBsYWJlbGVkIFwieXQ5MjF4XCIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBwcm9iYWJseSBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgYSBzY3JpcHQsIG9yIG1heWJlIGV2ZW4gZmlybXdhcmUgcmVsYXRlZCB0byB0aGUgZGV2aWNlJ3MgYm9vdCBwcm9jZXNzLiBUaGUgXCJyZXNldFwiIGltcGxpY2F0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbG93LWxldmVsIG9wZXJhdGlvbiBhZmZlY3RpbmcgaGFyZHdhcmUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgcmVzZXQgaXMgaW1wbGVtZW50ZWQsIGFuZCAqd2h5Ki4gV2hhdCB0cmlnZ2VycyBpdD8gV2hhdCBhcmUgdGhlIGNvbnNlcXVlbmNlcz8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBwb3dlci11cCBzdGF0ZXMsIGNsb2NrIGNvbmZpZ3VyYXRpb25zLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBtYXliZSBldmVuIHNvbWUga2luZCBvZiBoYXJkd2FyZSB3YXRjaGRvZyBpbnZvbHZlbWVudC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoaXAncyBwb3dlci1vbiBiZWhhdmlvciwgcG90ZW50aWFsIHJlY292ZXJ5IG1lY2hhbmlzbXMsIGFuZCBhbnkgc3BlY2lmaWMgZXJyb3ItaGFuZGxpbmcgcmVsYXRlZCB0byByZXNldCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTA5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MjkuMTM4NTA5MjYxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Mjk0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Mjk0OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyOTU6XFx0e1xcbjQyOTY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyOTc6XFx0XFx0dTE2IGV0aF9wX3RhZztcXG40Mjk4OlxcdFxcdHUzMiB2YWw7XFxuNDI5OTpcXHRcXHRpbnQgcmVzO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XFxuNDMwMjpcXHRcXHRpZiAocmVzKVxcbjQzMDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVzZXQgKi9cXG40MzA2OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XFxuNDMwNzpcXHRcXHRpZiAocmVzKVxcbjQzMDg6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xcbjQzMTE6XFx0XFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRcXHR2YWwgPSAwO1xcbjQzMTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG40MzE1OlxcdFxcdGlmIChyZXMpXFxuNDMxNjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMTc6XFx0XFxuNDMxODpcXHRcXHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXFxuNDMxOTpcXHRcXHQgKiBiZWZvcmUuXFxuNDMyMDpcXHRcXHQgKi9cXG40MzIxOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcXHUwMDI2dmFsKTtcXG40MzIyOlxcdFxcdGlmIChyZXMpXFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMjQ6XFx0XFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xcbjQzMjU6XFx0XFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG40MzI2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxcXG5cXFwiLCBldGhfcF90YWcsXFxuNDMyNzpcXHRcXHRcXHRcXHRFVEhfUF9ZVDkyMVgpO1xcbjQzMjg6XFx0XFx0XFx0LyogRGVzcGl0ZSBiZWluZyBwb3NzaWJsZSwgd2UgY2hvb3NlIG5vdCB0byBzZXQgQ1BVX1RBR19UUElELFxcbjQzMjk6XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gd2F5IGl0IGNhbiBiZSBkaWZmZXJlbnQgdW5sZXNzIHlvdSBoYXZlIHRoZVxcbjQzMzA6XFx0XFx0XFx0ICogd3JvbmcgY2hpcC5cXG40MzMxOlxcdFxcdFxcdCAqL1xcbjQzMzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDMzMzpcXHRcXHR9XFxuNDMzNDpcXHRcXG40MzM1OlxcdFxcdHJldHVybiAwO1xcbjQzMzY6XFx0fVxcbjQzMzc6XFx0XFxuNDMzODpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDMzOTpcXHR7XFxuNDM0MDpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDM0MTpcXHRcXHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xcbjQzNDI6XFx0XFx0dTMyIGN0cmxzWzJdO1xcbjQzNDM6XFx0XFx0dTMyIGN0cmw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE2OjI5LjEzODc4NTYyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM1NjEyODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBDaGlwIERldGVjdGlvbioqXG5cbk9rYXksIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgYWdlbmRhIGlzIGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZy4gU28sIEknbGwgc3RhcnQgYnkgcmVhZGluZyBpdHMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBjb3JlIGxvZ2ljLiBUaGlzIGlzIG15IGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0ncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgeXQ5MjF4YCBjaGlwLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBzdGVwcyBpbnZvbHZlZCBpbiBpdHMgZGV0ZWN0aW9uIHJvdXRpbmU6IGhvdyBpdCBpZGVudGlmaWVzIHRoZSBjaGlwLCB3aGF0IG1ldGhvZHMgaXQgdXNlcywgYW5kIHdoYXQgcHJlbGltaW5hcnkgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIEkgd2FudCB0byBidWlsZCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGluaXRpYWwgY2hpcCBoYW5kc2hha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNjozMi4wNzQ0MDEzMzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyMjc6XFx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyMjg6XFx0e1xcbjQyMjk6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyMzA6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xcbjQyMzE6XFx0XFx0dTggZXh0bW9kZTtcXG40MjMyOlxcdFxcdHUzMiBjaGlwaWQ7XFxuNDIzMzpcXHRcXHR1MzIgbWFqb3I7XFxuNDIzNDpcXHRcXHR1MzIgbW9kZTtcXG40MjM1OlxcdFxcdHUzMiB2YWw7XFxuNDIzNjpcXHRcXHRpbnQgcmVzO1xcbjQyMzc6XFx0XFxuNDIzODpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFxcdTAwMjZjaGlwaWQpO1xcbjQyMzk6XFx0XFx0aWYgKHJlcylcXG40MjQwOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI0MTpcXHRcXG40MjQyOlxcdFxcdG1ham9yID0gRklFTERfR0VUKFlUOTIxWF9DSElQX0lEX01BSk9SLCBjaGlwaWQpO1xcbjQyNDM6XFx0XFxuNDI0NDpcXHRcXHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXFx1MDAzZW5hbWU7IGluZm8rKylcXG40MjQ1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VtYWpvciA9PSBtYWpvcilcXG40MjQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNDc6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI0ODpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXFxcblxcXCIsIGNoaXBpZCk7XFxuNDI0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjUwOlxcdFxcdH1cXG40MjUxOlxcdFxcbjQyNTI6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFxcdTAwMjZtb2RlKTtcXG40MjUzOlxcdFxcdGlmIChyZXMpXFxuNDI1NDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTU6XFx0XFx0cmVzID0geXQ5MjF4X2VkYXRhX3JlYWQocHJpdiwgWVQ5MjFYX0VEQVRBX0VYVE1PREUsIFxcdTAwMjZleHRtb2RlKTtcXG40MjU2OlxcdFxcdGlmIChyZXMpXFxuNDI1NzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTg6XFx0XFxuNDI1OTpcXHRcXHRmb3IgKDsgaW5mby1cXHUwMDNlbmFtZTsgaW5mbysrKVxcbjQyNjA6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW1ham9yID09IG1ham9yIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZW1vZGUgPT0gbW9kZSBcXHUwMDI2XFx1MDAyNlxcbjQyNjE6XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWV4dG1vZGUgPT0gZXh0bW9kZSlcXG40MjYyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNjM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI2NDpcXHRcXHRcXHRkZXZfZXJyKGRldixcXG40MjY1OlxcdFxcdFxcdFxcdFxcXCJVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcXFxuXFxcIixcXG40MjY2OlxcdFxcdFxcdFxcdGNoaXBpZCwgbW9kZSwgZXh0bW9kZSk7XFxuNDI2NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjY4OlxcdFxcdH1cXG40MjY5OlxcdFxcbjQyNzA6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9TWVNfQ0xLLCBcXHUwMDI2dmFsKTtcXG40MjcxOlxcdFxcdGlmIChyZXMpXFxuNDI3MjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNzM6XFx0XFx0c3dpdGNoIChGSUVMRF9HRVQoWVQ5MjFYX1NZU19DTEtfU0VMX00sIHZhbCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWN5Y2xlX25zID0gaW5mby1cXHUwMDNlbWFqb3IgPT0gWVQ5MjE1X01BSk9SID8gOCA6IDY7XFxuNDI3NjpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MzIuMDc0Njg4MzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTQ2Njc2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiB0cmllcyB0byByZWFkIHRoZSBgWVQ5MjFYX0NISVBfSURgIHZpYSBNRElPLiBJZiBpdCBmYWlscyBvciBnZXRzIHRoZSB3cm9uZyBJRCwgaXQgaW1tZWRpYXRlbHkgZXJyb3JzIG91dCB3aXRoIGAtRU5PREVWYC4gVGhpcyBpcyBhIGhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgY2hpcCwgd2hpY2ggbWVhbnMgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwgaWYgdGhlIHJpZ2h0IGhhcmR3YXJlIGlzbid0IHByZXNlbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIG1vY2sgdGhlc2UgTURJTyByZWFkcz8gSSBkb24ndCB0aGluayBzbywgYW5kIGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBNRElPIG1vY2tpbmcgZnJhbWV3b3JrLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSBoaXQ/IEkgc2VlIHRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0LCBidXQgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciBpcyBzdGlsbCB0aWVkIHRvIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuIExvb2tpbmcgYmFjayBhdCB0aGUgcHJvbXB0J3MgY3JpdGVyaWE6IFwiQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBUaGlzICpkZWZpbml0ZWx5KiBmaXRzIHRoZSBiaWxsLiBJdCdzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCBtZWFucyBpdCdzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGVyZSdzIHplcm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjExLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MzcuNDI5MzU4NjY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc4MjAzMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdG9yY29tbSx5dDkyMTVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTI0PXByb3BlcnRpZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI1LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6MjY6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTU5PWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTY3LSAgICAgICAgc3dpdGNoQDFkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Njg6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNjktICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjgtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6NDEuODA3NTcwNjY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjYyNTg0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIGRyaXZlciwgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgY29uZmlybWVkOiB0aGlzIGlzbid0IGdvaW5nIHRvIGJlIGZydWl0ZnVsIGZvciBmdXp6aW5nLiBUaGVyZSdzIG5vIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgY2hpcCwgYW5kIHRoYXQncyBhIG1ham9yIHJvYWRibG9jay4gVGhlIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHBoeXNpY2FsIGhhcmR3YXJlIHN3aXRjaCwgYWNjZXNzZWQgdGhyb3VnaCBNRElPLiBJIGtub3cgaXQncyBnb2luZyB0byBmYWlsIHRvIHByb2JlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHJlcXVpcmVzIHJlYWRpbmcgdGhlIGNoaXAgSUQg4oCTIHNvbWV0aGluZyB0aGF0J3Mgc2ltcGx5IG5vdCBwb3NzaWJsZSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudC4gVGhlcmVmb3JlLCBhbnkgY29kZSBwYXRoIHdpdGhpbiB0aGlzIGRyaXZlciB3b3VsZCBiZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYnlwYXNzZXMgb3IgYWx0ZXJuYXRlIGVudHJ5IHBvaW50cy4gUmlnaHQsIHRoZSBwYXRjaCBhZGRzIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgYW5kIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jYC4gVHJhY2luZyB0aGUgY2FsbHMsIEkgc2VlIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCwgd2hpY2ggdWx0aW1hdGVseSBvcmlnaW5hdGVzIGZyb20gYHl0OTIxeF9tZGlvX3Byb2JlYC4gQWhhISBgeXQ5MjF4X21kaW9fcHJvYmVgIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gZHJpdmVyLiBTaW5jZSB0aGUgTURJTyBkcml2ZXIgd29uJ3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgdGhlIGhhcmR3YXJlIGFuZCBpdHMgYXNzb2NpYXRlZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiwgYWxsIHRoZSBMRUQgc2V0dXAgYW5kIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5FdmVuIGlmLCBieSBzb21lIG1pcmFjbGUsIHdlIGNvdWxkIGJ5cGFzcyB0aGUgcHJvYmUgc29tZWhvdywgdGhlIExFRCBjb250cm9sIGZ1bmN0aW9ucyByZWx5IG9uIHdyaXRpbmcgdG8gTURJTyByZWdpc3RlcnMuIFRob3NlIHdyaXRlcyB3b3VsZCBqdXN0IGZhaWwgb3IgZG8gbm90aGluZywgcmVuZGVyaW5nIGFueSBmdXp6aW5nIGF0dGVtcHRzIGNvbXBsZXRlbHkgdXNlbGVzcy4gSXQncyB1bmVxdWl2b2NhbGx5IGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBmdXp6aW5nIGluIFFFTVUgaXMgYSBub24tc3RhcnRlci5cblxuSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLiBJdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYyMiwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNjo0OS41MzM4MzM3NTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciAoTW90b3Jjb21tIFlUOTIxNSkgY29ubmVjdGVkIHZpYSBNRElPLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgYSBzcGVjaWZpYyBjaGlwIElEIGR1cmluZyBpbml0aWFsaXphdGlvbikgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciAoTW90b3Jjb21tIFlUOTIxNSkgY29ubmVjdGVkIHZpYSBNRElPLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgYSBzcGVjaWZpYyBjaGlwIElEIGR1cmluZyBpbml0aWFsaXphdGlvbikgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj8w5n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 05:44:21 +0000 UTC FinishedAt: 2026-07-27 06:16:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2IyNGZjNzVhZDA1ODdjMjI5N2YxMGY0OTg2ODQ0YzZmNDJhOGZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDY6MTQ6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjBjZmYwMDk1M2RjYmUuLmY1MTI0Njc3NTNiYzI0IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTgyNDksNyAmIzQzOzE4MjQ5LDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQmIzQzOz0gYjUzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pY3JvY2hpcC9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4mIzQzO1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBjaGlwLlxuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuJiM0MztcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICYjNDM7MTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3l0OTIxeC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNWYzYjk5ZTE4OWM0MTIuLmU2ODE1Y2Y5Y2IzY2QwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw5ICYjNDM7ODUwLDE0IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXHQxMFxuJiM0MztcbiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi9cbiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHRcdDExXG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzdlOGQ0ZjAwMDNmODFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICYjNDM7MSw2NjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChncm91cCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbiYjNDM7XHRib29sIHVzZV9jeWNsZTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4mIzQzO1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuJiM0MztcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4mIzQzO1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuJiM0MztcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4mIzQzO1x0XHRcdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbiYjNDM7XHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbiYjNDM7XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdGlmICh2YWwgIT0gY3RybCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4mIzQzO1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4mIzQzO1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbiYjNDM7XHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4mIzQzO1x0XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmZsYWdzcCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuJiM0MztcdFx0XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2ZHAtXHUwMDNldXNlci1cdTAwM2VkZXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcbiYjNDM7XHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4mIzQzO1x0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICppbnZfbWFza3AsIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0aW50IHBvbGFyaXR5O1xuJiM0MztcdHUzMiBncm91cDtcbiYjNDM7XHRib29sIG9uO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2Z3JvdXApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGlmIChncm91cCBcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBncm91cCwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBwLVx1MDAzZWxlZHNbZ3JvdXBdKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdGZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWhpZ2hcJiMzNDspO1xuJiM0MztcdGZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtbG93XCYjMzQ7KTtcbiYjNDM7XHRpZiAoZm9yY2VfaGlnaCBcdTAwMjZcdTAwMjYgZm9yY2VfbG93KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xuJiM0MztcbiYjNDM7XHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbGVkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0bGVkLVx1MDAzZXBvcnQgPSBwcDtcbiYjNDM7XHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcJiMzNDtuZXRkZXZcJiMzNDs7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcJiMzNDstJXU6JTAyZDolMDJ1XCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xuJiM0MztcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbiYjNDM7XHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbiYjNDM7XHRcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwb2xhcml0eSkge1xuJiM0MztcdFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4mIzQzO1xuJiM0MztcdFx0Kmludl9tYXNrcCB8PSBiaXQ7XG4mIzQzO1x0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdCppbnZfY3RybHAgfD0gYml0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0Ym9vbCBoYXNfbGVkcyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXHUwMDI2bGVkLVx1MDAzZWNkZXYpO1xuJiM0MztcdFx0XHRoYXNfbGVkcyA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhhc19sZWRzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlZCkge1xuJiM0MztcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHUzMiAqaW52X21hc2twLFxuJiM0MztcdFx0ICAgICAgIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4mIzQzO1x0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWxlZHNfbnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfTEVEX1BPUlRfTlVNKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Tm8gTEVEcyBmb3IgcG9ydCAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW52X21hc2twLCBpbnZfY3RybHApO1xuJiM0MztcdFx0aWYgKHJlcykge1xuJiM0MztcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspXG4mIzQzO1x0XHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIGludl9jdHJsID0gMDtcbiYjNDM7XHR1MzIgaW52X21hc2sgPSAwO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkcC1cdTAwM2VkbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChwcml2LCBwb3J0LCBcdTAwMjZpbnZfbWFzaywgXHUwMDI2aW52X2N0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHBvcnQsIHJlcyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuJiM0MztcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGludl9tYXNrKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdGdvdG8gZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbiYjNDM7XHRjdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpO1xuJiM0MztcbiYjNDM7ZW5kOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcykge1xuJiM0MztcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX0xFRFNfSFxuJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICYjNDM7IDE4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxNikpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuJiM0MztcbiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4mIzQzO1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlOjE7XG4mIzQzO1x0Ym9vbCB1c2VfZHV0eToxO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7XG4mIzQzOyNlbHNlXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICYjNDM7MSwxNTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbiYjNDM7XHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4mIzQzO1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4mIzQzO1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0KnZhbHAgPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdHUzMiB2O1xuJiM0MztcdHUzMiB1O1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0dSA9IHY7XG4mIzQzO1x0dSBcdTAwMjY9IH5tYXNrO1xuJiM0MztcdHUgfD0gdmFsO1xuJiM0MztcdGlmICh1ID09IHYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdHUgfD0gdmFsc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX1NNSV9IXG4mIzQzOyNkZWZpbmUgX1lUX1NNSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWwpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4mIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4mIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbiYjNDM7e1xuJiM0MztcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciAoTW90b3Jjb21tIFlUOTIxNSkgY29ubmVjdGVkIHZpYSBNRElPLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgYSBzcGVjaWZpYyBjaGlwIElEIGR1cmluZyBpbml0aWFsaXphdGlvbikgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzdiMjRmYzc1YWQwNTg3YzIyOTdmMTBmNDk4Njg0NGM2ZjQyYThmZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDA2OjE0OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA2MGNmZjAwOTUzZGNiZS4uZjUxMjQ2Nzc1M2JjMjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xODI0OSw3ICYjNDM7MTgyNDksNyBAQCBNOglEYXZpZCBZYW5nICZsdDttbXlhbmdmbEBnbWFpbC5jb20mZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwKLUY6CWRyaXZlcnMvbmV0L2RzYS95dDkyMXguKgomIzQzO0Y6CWRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vCiBGOgluZXQvZHNhL3RhZ195dDkyMXguYwogCiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwpAQCAtNzIsNiAmIzQzOzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwCiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZyYjMzQ7CiAKJiM0Mztzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcmIzM0OwomIzQzOwogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnJiMzNDsKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWcmIzM0OwpAQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NQogCSAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXIKIAkgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuCi0KLWNvbmZpZyBORVRfRFNBX1lUOTIxWAotCXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKLQlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCi0Jc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCi0JICBjaGlwLgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQpAQCAtMTQsMTEgJiM0MzsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgJiM0Mzs9IGxhbjkzMDNfbWRpby5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1zcGkubwotb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm8KIG9iai15CQkJCSYjNDM7PSBiNTMvCiBvYmoteQkJCQkmIzQzOz0gaGlyc2NobWFubi8KIG9iai15CQkJCSYjNDM7PSBsYW50aXEvCiBvYmoteQkJCQkmIzQzOz0gbWljcm9jaGlwLwomIzQzO29iai15CQkJCSYjNDM7PSBtb3RvcmNvbW0vCiBvYmoteQkJCQkmIzQzOz0gbXY4OGU2eHh4Lwogb2JqLXkJCQkJJiM0Mzs9IG14bDg2Mnh4Lwogb2JqLXkJCQkJJiM0Mzs9IG5ldGMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCkBAIC0wLDAgJiM0MzsxLDE3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDCiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CXRyaXN0YXRlICYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0JiMzNDsKJiM0MzsJc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAomIzQzOwlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAomIzQzOwkgIGNoaXAuCiYjNDM7CiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFMKJiM0MzsJYm9vbCAmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1JiMzNDsKJiM0MzsJZGVmYXVsdCB5CiYjNDM7CWRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVgKJiM0MzsJZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWAomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZQomIzQzOwkgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmUyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw1IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDCiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm8KJiM0Mzt5dDkyMXgtb2JqcyA6PSBjaGlwLm8KJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMubwomIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwppbmRleCAxNTliMTY2MDZmNmNhNC4uNTUzZWZhY2Q0ZjVlZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwpAQCAtMTMsNyAmIzQzOzEzLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9icmlkZ2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl9oc3IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CkBAIC0yNiw3ICYjNDM7MjUsOSBAQAogI2luY2x1ZGUgJmx0O25ldC9pZWVlODAyMXEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O3l0OTIxeC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtsZWRzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwogCiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7CiAJe30KIH07CiAKLSNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwotCiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFCTQwOTUKIAotI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VUwkxMDAwMAotI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAotCiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLgogICoKICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXAKQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQogCXJldHVybiAoYWRkcls0XSAmbHQ7Jmx0OyA4KSB8IGFkZHJbNV07CiB9CiAKLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKQotewotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKSk7Ci0KLQlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7cmVhZChwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbHApOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQotewotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKSk7Ci0KLQlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7d3JpdGUocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWwpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKQotewotCXUzMiB2YWw7Ci0JaW50IHJlczsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsCi0JCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCi0JCQkJWVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsCi0JCQkJZmFsc2UsIHByaXYsIHJlZywgJmFtcDt2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCSp2YWxwID0gdmFsOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0JaW50IHJlczsKLQl1MzIgdjsKLQl1MzIgdTsKLQotCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dik7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCXUgPSB2OwotCXUgJmFtcDs9IH5tYXNrOwotCXUgfD0gdmFsOwotCWlmICh1ID09IHYpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKLX0KLQotLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQotICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZQotICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLgotICoKLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG8KLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS4KLSAqLwotCi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQotewotCSpsbyAmYW1wOz0gfmxvd2VyXzMyX2JpdHMobWFzayk7Ci0JKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKLQkqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpOwotCSpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCi0JCSB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JaW50IHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksICZhbXA7dmFsc1tpXSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKLQkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JaW50IHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKLQkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQl1IHw9IHZhbHNbaV07Ci0JCWlmICh1ICE9IHZzW2ldKQotCQkJY2hhbmdlZCA9IHRydWU7Ci0KLQkJdnNbaV0gPSB1OwotCX0KLQotCWlmICghY2hhbmdlZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKLQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsKLQl1MzIgdnNbNF07Ci0JaW50IHJlczsKLQotCUJVSUxEX0JVR19PTihudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKTsKLQotCXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQl1MzIgdSA9IHZzW2ldOwotCi0JCXUgJmFtcDs9IH5tYXNrc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKLQkJCSBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTsKLX0KLQogc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApCiB7CiAJc3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7CkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwlyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcbiYjMzQ7LCByZXMpOwomIzQzOyNlbmRpZgomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiAJaWYgKCFwcml2KQogCQlyZXR1cm47CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJeXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpOwomIzQzOyNlbmRpZgomIzQzOwogCWZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtJmd0O3BvcnRzKTsgaS0tICZndDsgMDsgKSB7CiAJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW2ldOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCmluZGV4IDVmM2I5OWUxODljNDEyLi5lNjgxNWNmOWNiM2NkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCkBAIC04NTAsOSAmIzQzOzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHsKICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU0JCShZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKQogI2RlZmluZSBZVDkyMVhfVURGX05VTQkJOAogCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTQkzCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNCTEwCiYjNDM7CiAvKiA4IGludGVybmFsICYjNDM7IDIgZXh0ZXJuYWwgJiM0MzsgMSBtY3UgKi8KICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkJMTEKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwomIzQzOwogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpICZsdDsgOCkKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KQogCkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCXN0cnVjdCB5dDkyMXhfbWliIG1pYjsKIAl1NjQgcnhfZnJhbWVzOwogCXU2NCB0eF9mcmFtZXM7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTsKJiM0MzsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IHl0OTIxeF9yZWdfb3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM3ZThkNGYwMDAzZjgxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKQEAgLTAsMCAmIzQzOzEsNjYwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VsZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktJmd0O3BvcnQpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLSZndDtpbmRleF0pCiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS0mZ3Q7ZHMuZGV2KQomIzQzOwomIzQzO3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZ3JvdXApIHsKJiM0MzsJY2FzZSAwOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDE6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CSpvbnAgPSAodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PQomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwljdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOgomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssCiYjNDM7CQkJCSAgICAgIGN0cmwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLAomIzQzOwkJCXVuc2lnbmVkIGNoYXIgKmR1dHlwKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHsKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA2KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA0KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAzKSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAyKSwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHk7CiYjNDM7CiYjNDM7CWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7CiYjNDM7CWN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqLwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsICZhbXA7Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWZvciAoOyBjeWNsZSAmZ3Q7IFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciAmZ3Q7Jmd0Oz0gMSwgY3ljbGUgJmd0OyZndDs9IDEpCiYjNDM7CQlpZiAoY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyICZndDsmZ3Q7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CSpjeWNsZXAgPSBjeWNsZTsKJiM0MzsKJiM0MzsJZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKgomIzQzOwkJCQkgICAgIChvbiAmZ3Q7IG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSkKJiM0MzsJCWlmIChpID09IDAgfHwgZHV0eV9yZXEgJmd0Oz0gKGR1dHlzW2kgLSAxXSAmIzQzOyBkdXR5c1tpXSkgLyAyKSB7CiYjNDM7CQkJZHV0eSA9IGR1dHlzW2ldOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwlpZiAob24gJmd0OyBvZmYpCiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTsKJiM0MzsJKmR1dHlwID0gZHV0eTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1bnNpZ25lZCBzaG9ydCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgY2hhciBkdXR5OwomIzQzOwlib29sIHVzZV9jeWNsZTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoISpvbnAgJmFtcDsmYW1wOyAhKm9mZnApIHsKJiM0MzsJCWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJaWYgKGkgIT0gZ3JvdXAgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkgewomIzQzOwkJCQlkdXR5ID0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJvb2wgY2hhbmdlX2N5Y2xlOwomIzQzOwkJYm9vbCBjaGFuZ2VfZHV0eTsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCAmYW1wO2N5Y2xlLCAmYW1wO2R1dHkpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gY3ljbGUgJmx0OyBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSAmYW1wOyZhbXA7IGN5Y2xlICE9IHBwLSZndDtsZWRfY3ljbGU7CiYjNDM7CQljaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJaWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSkKJiM0MzsJCQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOwomIzQzOwkJCSAgICAgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQkJaWYgKGkgPT0gZ3JvdXAgfHwgIXBwLSZndDtsZWRzW2ldKQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCWlmICgoY2hhbmdlX2N5Y2xlICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9jeWNsZSkgfHwKJiM0MzsJCQkJICAgIChjaGFuZ2VfZHV0eSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkpCiYjNDM7CQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CWlmICh2YWwgIT0gY3RybCkgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CXN3aXRjaCAoZHV0eSAmZ3Q7PSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDoKJiM0MzsJCVlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChkdXR5ICZsdDsgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJaWYgKHVzZV9jeWNsZSkgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007CiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7CiYjNDM7CX0KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfAomIzQzOwkJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTsKJiM0MzsJZWxzZQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSB1c2VfY3ljbGU7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQlwcC0mZ3Q7bGVkX2N5Y2xlID0gY3ljbGU7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSB0cnVlOwomIzQzOwlwcC0mZ3Q7bGVkX2R1dHkgPSBkdXR5OwomIzQzOwomIzQzOwkqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pOwomIzQzOwkqb2ZmcCA9IGN5Y2xlIC0gKm9ucDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHsKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sCiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSwKJiM0MzsJIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCQkJaW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCFmbGFncykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9ICZhbXA7eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IG1hcC0mZ3Q7ZmxhZ3MpID09IG1hcC0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmbGFncyAmYW1wOz0gfm1hcC0mZ3Q7ZmxhZ3M7CiYjNDM7CQkJaWYgKCFmbGFncykKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKCh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9CiYjNDM7CSAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHsKJiM0MzsJCSpmbGFnc3AgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKCh2YWwgJmFtcDsgbWFwLSZndDttYXNrKSA9PSBtYXAtJmd0O21hc2spCiYjNDM7CQkJKmZsYWdzcCB8PSBtYXAtJmd0O2ZsYWdzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwljdHJsID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWN0cmwgfD0gbWFwLSZndDttYXNrOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmbGFncykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwIHx8ICFkcC0mZ3Q7dXNlcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OwomIzQzOwljaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdOwomIzQzOwllbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkOwomIzQzOwlib29sIGZvcmNlX2hpZ2g7CiYjNDM7CWJvb2wgZm9yY2VfbG93OwomIzQzOwlpbnQgcG9sYXJpdHk7CiYjNDM7CXUzMiBncm91cDsKJiM0MzsJYm9vbCBvbjsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtncm91cCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlpZiAoZ3JvdXAgJmd0Oz0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxuJiMzNDssIGdyb3VwLCBwb3J0KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmIChwcC0mZ3Q7bGVkc1tncm91cF0pCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJZm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1oaWdoJiMzNDspOwomIzQzOwlmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtbG93JiMzNDspOwomIzQzOwlpZiAoZm9yY2VfaGlnaCAmYW1wOyZhbXA7IGZvcmNlX2xvdykgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIGdyb3VwKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7CiYjNDM7CiYjNDM7CWxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbGVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWxlZC0mZ3Q7cG9ydCA9IHBwOwomIzQzOwlsZWQtJmd0O2dyb3VwID0gZ3JvdXA7CiYjNDM7CiYjNDM7CXN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PRkY6CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PTjoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCW9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJbGVkX2NkZXYgPSAmYW1wO2xlZC0mZ3Q7Y2RldjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3MgPSBvbjsKJiM0MzsJbGVkX2NkZXYtJmd0O21heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJbGVkX2NkZXYtJmd0O2ZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7CiYjNDM7CWxlZF9jZGV2LSZndDtibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7CiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSAmIzM0O25ldGRldiYjMzQ7OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FICYjMzQ7LSV1OiUwMmQ6JTAydSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2RzLmluZGV4LCBwb3J0LCBncm91cCk7CiYjNDM7CWluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7CiYjNDM7CQkuZndub2RlID0gZndub2RlLAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCXUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpOwomIzQzOwomIzQzOwkJKmludl9tYXNrcCB8PSBiaXQ7CiYjNDM7CQlpZiAocG9sYXJpdHkgJmd0OyAwKQomIzQzOwkJCSppbnZfY3RybHAgfD0gYml0OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CWJvb2wgaGFzX2xlZHMgPSBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKSB7CiYjNDM7CQkJZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsICZhbXA7bGVkLSZndDtjZGV2KTsKJiM0MzsJCQloYXNfbGVkcyA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFoYXNfbGVkcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQlpZiAobGVkKSB7CiYjNDM7CQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZHNfc2V0dXBfcG9ydChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgKmludl9tYXNrcCwKJiM0MzsJCSAgICAgICB1MzIgKmludl9jdHJscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gJmFtcDtwcml2LSZndDtkczsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTsKJiM0MzsJbGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLSZndDtkbiwgJiMzNDtsZWRzJiMzNDspOwomIzQzOwlpZiAoIWxlZHNfbnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX0xFRF9QT1JUX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7Tm8gTEVEcyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLAomIzQzOwkJCQkgICAgICAgaW52X21hc2twLCBpbnZfY3RybHApOwomIzQzOwkJaWYgKHJlcykgewomIzQzOwkJCW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHByaXYsIHBvcnQpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IFlUOTIxWF9MRURfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KQomIzQzOwkJeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXUzMiBpbnZfY3RybCA9IDA7CiYjNDM7CXUzMiBpbnZfbWFzayA9IDA7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgJmFtcDtpbnZfbWFzaywgJmFtcDtpbnZfY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCWRldl93YXJuKGRldiwgJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgcG9ydCwgcmVzKTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwkvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLgomIzQzOwkgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LgomIzQzOwkgKi8KJiM0MzsJaWYgKGludl9tYXNrKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssCiYjNDM7CQkJCQkgICAgIGludl9jdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJZ290byBlbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47CiYjNDM7CWN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7CiYjNDM7CiYjNDM7ZW5kOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXMpIHsKJiM0MzsJCXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaApAQCAtMCwwICYjNDM7MSwxMjEgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0gKJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rY29uZmlnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xlZHMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTAkJCTB4ZDAwMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU4JCQlCSVQoMjEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTQlHRU5NQVNLKDIwLCAxOSkJLyogY3ljbGUgPSA1MTIgKiB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTQkJR0VOTUFTSygxNiwgMTMpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NCQkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTAkJCVlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KQkJKDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNywgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVMJQklUKDE3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJCUJJVCgxNikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpCQkoMHhkMDA0MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTQkJR0VOTUFTSygzMSwgMzApCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NCQlHRU5NQVNLKDI5LCAyOCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KQkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QCUJJVCgyNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTQkJR0VOTUFTSygyNiwgMjUpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMwkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMykKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpCQkoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKQkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycCkJR0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNikJLyogY3ljbGUgPSA1MTIgJmx0OyZsdDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTYpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTksJCUJJVCgxNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LCUJJVCgxNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTksJQklUKDEzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMCUJJVCgxMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRglCSVQoMTEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTksJCUJJVCgxMCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOSwkJQklUKDkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgJCUJJVCg4KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYCQlCSVQoNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTQkJQklUKDYpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTQkJQklUKDUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTksJQklUKDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTksJQklUKDIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOSwlCSVQoMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTksJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTAkJMHhkMDEwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LCQlHRU5NQVNLKDI1LCAyNCkJLyogZGVsYXk/ICovCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XCQlCSVQoNCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTQkJR0VOTUFTSygxLCAwKQkvKiAjZ3JwIC0gMSAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydCkJKDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyA1LCA2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDEsIDYgKiAoKHBvcnQpICUgNSkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUUwkJMHhkMDFjNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WCQkweGQwMWM4CiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydCkJQklUKDEwICogKGdycCkgJiM0MzsgKHBvcnQpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KQkoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApCUdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoZ3JwKSkpCiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTgk2NAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUYJNTEyCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWAkyMDQ4CiYjNDM7CiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqLwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NCQkyNAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pCShZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpCiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZ3JvdXA7CiYjNDM7CiYjNDM7CWJvb2wgdXNlX2N5Y2xlOjE7CiYjNDM7CWJvb2wgdXNlX2R1dHk6MTsKJiM0Mzt9OwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7CiYjNDM7CiYjNDM7I2Vsc2UKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTA1NDg5NmU0Y2QxMmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCkBAIC0wLDAgJiM0MzsxLDE1NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VUwkxMDAwMAomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7cmVhZChwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbHApOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsCiYjNDM7CQkJCXJlcyB8fCAodmFsICZhbXA7IG1hc2spID09ICp2YWxwLAomIzQzOwkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKJiM0MzsJCQkJZmFsc2UsIHByaXYsIHJlZywgJmFtcDt2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CSp2YWxwID0gdmFsOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CXUzMiB2OwomIzQzOwl1MzIgdTsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CXUgPSB2OwomIzQzOwl1ICZhbXA7PSB+bWFzazsKJiM0MzsJdSB8PSB2YWw7CiYjNDM7CWlmICh1ID09IHYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCiYjNDM7CQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQljb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCXUgfD0gdmFsc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0wLDAgJiM0MzsxLDg4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfU01JX0gKJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpOwomIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLAomIzQzOwkJCSAgIHUzMiB2YWwpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZQomIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCiYjNDM7ICoKJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgomIzQzOyAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmhpICZhbXA7PSB+dXBwZXJfMzJfYml0cyhtYXNrKTsKJiM0MzsJKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKJiM0MzsJKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCiYjNDM7CQkgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCSAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCSAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCSBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEzNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBvZiBNb3RvcmNvbW0gWVQ5MjE1IExFRCBTdXBwb3J0KioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLCBtb3ZpbmcgdGhlIGRyaXZlciBmaWxlIGFuZCBhZGRpbmcgYSBuZXcgY29uZmlnIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gRFNBIHN3aXRjaGVzIGFyZSB0eXBpY2FsbHkgY29ubmVjdGVkIHZpYSBNRElPLCBTUEksIG9yIEkyQywgYW5kIHR5cGljYWxseSByZXF1aXJlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9wZXJseSByZXNwb25kIHRvIE1ESU8gcmVhZHMvd3JpdGVzLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRyaXZlciBjb2RlIGl0c2VsZiAoYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCkgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyByZWdpc3RlcmVkLCBidXQgZ2VuZXJhbGx5LCBEU0EgZHJpdmVycyBhcmUgbWVhbnQgZm9yICpwaHlzaWNhbCogaGFyZHdhcmUuIEkga25vdyBzb21lIERTQSBkcml2ZXJzIGNhbiBiZSBpbnN0YW50aWF0ZWQgd2l0aCBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBkdW1teSBNRElPIGJ1c2VzLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIG5vcm0uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhlcmUgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIE1vdG9yY29tbSBjaGlwPyBQcm9iYWJseSBub3QuIENhbiB3ZSBmYWtlIGl0IHdpdGggYSBkdW1teSBNRElPIGJ1cz8gTWF5YmUsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGdlbmVyaWMgbWVjaGFuaXNtIGZvciBmdXp6aW5nIGFyYml0cmFyeSBNRElPIGRldmljZXMgdW5sZXNzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQsIG9yIHdlIGhhdmUgYSB3YXkgdG8gaW5qZWN0IE1ESU8gdHJhZmZpYyBkaXJlY3RseS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHByb21wdC4gSXQmIzM5O3MgYXNraW5nIGlmIHRoZSBwYXRjaCBpcyAqd29ydGgqIGZ1enppbmcuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgd2hpY2ggdGhpcyBpc24mIzM5O3QsIGJ1dCB3aGF0IGFib3V0IE1ESU8sIEkyQywgb3IgU1BJIGRldmljZXM/IFRoZSB1c3VhbCBjYXNlIGlzIHRoYXQgaWYgdGhpcyBpcyBhIGhhcmR3YXJlIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBjaGlwLCBlc3BlY2lhbGx5IGEgRFNBIHN3aXRjaCwgYW5kIGl0IGlzbiYjMzk7dCBlbXVsYXRlZCwgaXQmIzM5O3MgcHJvYmFibHkgbm90IHJlYWNoYWJsZS4KClNvIGxldCYjMzk7cyBjaGVjazogSXMgYHl0OTIxeGAgYWxyZWFkeSBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBJIGNhbiYjMzk7dCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgYHN5cy9gIGRpcmVjdG9yeS4gTGV0IG1lIGV4cGxvcmUgdGhlIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBpcyBhbnkgd2F5IHRvIHJlYWNoIGB5dDkyMXhfbGVkc19zZXR1cGAgb3IgYHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nYC4gVGhlIGRyaXZlciAqaXMqIHJlZ2lzdGVyZWQgYXMgYW4gTURJTyBkZXZpY2UuIFRoaXMgYWxsIHBvaW50cyB0b3dhcmRzIGEgbG93IHByb2JhYmlsaXR5IG9mIGJlaW5nIGRpcmVjdGx5IHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfbWRpb19kcml2ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3MD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzI6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzczLVx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3ODI6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTURJTyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTURJTyBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYG1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO2AgbGluZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHdheSB0byByZWdpc3RlciBhbiBNRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSB1c3VhbCBzZXR1cCDigJMgdGhlIE1ESU8gZGV2aWNlcywgbGlrZSB0aGlzIGB5dDkyMXhgIG9uZSwgYXJlIGdlbmVyYWxseSBwcm9iZWQgaW4gYSBjb3VwbGUgb2Ygd2F5czogZWl0aGVyIHRoZSBkZXZpY2UgdHJlZSBkZWZpbmVzIHRoZW0sIGFuZCB0aGUgTURJTyBidXMgYXV0b21hdGljYWxseSBzY2Fucywgb3IgdGhlcmUmIzM5O3MgYW4gSUQgbWF0Y2guIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBzdHVmZi4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXIsIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSSBkb24mIzM5O3QgaGF2ZSB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yIHRvIHBsYXkgd2l0aCByaWdodCBub3cuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcHJvYmUgZnVuY3Rpb24sIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwuIEkgY2FuIGFsbCBidXQgZ3VhcmFudGVlIHRoYXQuIFdoeT8gQmVjYXVzZSB0aGVzZSB0aGluZ3MgKmFsd2F5cyogY2hlY2sgZm9yIHRoZSBwaHlzaWNhbCBwcmVzZW5jZSBvZiB0aGUgY2hpcCwgdXN1YWxseSBieSByZWFkaW5nIHNvbWUgc29ydCBvZiBjaGlwIElEIHJlZ2lzdGVyLiBObyBjaGlwLCBubyBJRCwgbm8gZGljZS4KClNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgbWU/IEkgbmVlZCB0byBkaWcgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byBzZWUgKmV4YWN0bHkqIGhvdyBpdCYjMzk7cyBjaGVja2luZyBmb3IgdGhlIGRldmljZSwgd2hhdCByZWdpc3RlcnMgaXQmIzM5O3MgcmVhZGluZywgYW5kIGhvdyBpdCYjMzk7cyBkZXRlcm1pbmluZyBzdWNjZXNzIG9yIGZhaWx1cmUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgYXNzdW1wdGlvbnMgaXQmIzM5O3MgbWFraW5nIGFib3V0IHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfbWRpb19wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjgyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxNy1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MTg6c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcyPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc3MzpcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3NC1cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwNTgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBwcmluY2lwbGVzIG9mIE1ESU8gYW5kIGRyaXZlciBwcm9iaW5nLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVsYXRlZCB0byB0aGUgWVQ5MjF4IGNoaXBzZXQgYW5kIGFueXRoaW5nIHVudXN1YWwgb3Igbm90ZXdvcnRoeSBpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG86CgoqKkluaXRpYWwgQXNzZXNzbWVudDogeXQ5MjF4X21kaW9fcHJvYmUqKgoKKiAgICoqRW50cnkgUG9pbnQgYW5kIFB1cnBvc2U6KiogRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBzZWUgaXQgYXMgcGFydCBvZiB0aGUgZHJpdmVyJiMzOTtzIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhlIHByb2JlOyBsaWtlbHksIHRoZSBzeXN0ZW0gZGV0ZWN0ZWQgYSBkZXZpY2UgbWF0Y2hpbmcgYSBrbm93biBJRCwgYW5kIG5vdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4KKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaW5jbHVkZXMgYW55IGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZSBNRElPIGNvbW11bmljYXRpb24gb3IgUEhZIG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBtZW1vcnkgbWFwcGluZyBzdHJhdGVnaWVzIGJlaW5nIHVzZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmVzb3VyY2UgY29uZmxpY3RzIHRvIGxvb2sgb3V0IGZvcj8KKiAgICoqTURJTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgY3JpdGljYWwgcGFydC4gSG93IGlzIHRoZSBNRElPIGludGVyZmFjZSBpbml0aWFsaXplZD8gQXJlIHRoZXJlIHNwZWNpZmljIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBvciBjbG9jayBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgZm9yIHRoZSBZVDkyMXg/IEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIE1ESU8gaW5pdGlhbGl6YXRpb24gc3RlcHMsIHBvdGVudGlhbGx5IHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgdHdpc3QuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBNRElPIGNvbnRyb2xsZXIuCiogICAqKlBIWSBEZXRlY3Rpb24gYW5kIENvbmZpZ3VyYXRpb246KiogSXMgdGhlcmUgUEhZIGRldGVjdGlvbiBpbnZvbHZlZCBoZXJlLCBvciBpcyBpdCBhc3N1bWVkIGEgc3BlY2lmaWMgUEhZIGlzIGNvbm5lY3RlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHZhcmlvdXMgUEhZIHR5cGVzPyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IHNldHMgdXAgYW5kIGNvbmZpZ3VyZXMgdGhlIFBIWSwgaW5jbHVkaW5nIGFueSBwb3dlci11cCBvciByZXNldCBzZXF1ZW5jZXMuIFdoYXQgYWJvdXQgdGhlIE1ESU8gYnVzIHNwZWVkLCBhcmUgdGhlcmUgYW55IHNwZWVkIGFkanVzdG1lbnRzPwoqICAgKipFcnJvciBIYW5kbGluZyBhbmQgUm9idXN0bmVzczoqKiBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkb2VzIGl0IGRvIGlmIHRoZSBkZXZpY2UgaXNuJiMzOTt0IHJlc3BvbmRpbmcsIGlmIHRoZXJlIGFyZSBNRElPIGVycm9ycywgb3IgaWYgdGhlIFBIWSBjb25maWd1cmF0aW9uIGZhaWxzPyBBcmUgdGhlcmUgcmV0cnkgbWVjaGFuaXNtcz8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IEkmIzM5O2xsIGxvb2sgZm9yIGBwcmludGtgIGNhbGxzIGFuZCBvdGhlciBkZWJ1Z2dpbmcgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciByZXBvcnRpbmcuCiogICAqKkRyaXZlciBNb2RlbCBJbnRlZ3JhdGlvbjoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZSBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBkcml2ZXIgbW9kZWw/IEFyZSB0aGVyZSBiaW5kaW5ncyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBsaWtlIG5ldHdvcmsgaW50ZXJmYWNlcyBvciB0aGUgZGV2aWNlIHRyZWU/IEkmIzM5O2xsIGNoZWNrIGZvciB0aGUgdXNlIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCBkZXZpY2UgcHJpdmF0ZSBkYXRhLCBhbmQgb2YgY291cnNlIGFueSBuZXR3b3JrIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24uCiogICAqKlBvd2VyIE1hbmFnZW1lbnQ6KiogSG93IGRvZXMgaXQgaGFuZGxlIHBvd2VyIG1hbmFnZW1lbnQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItdXAgb3IgcG93ZXItZG93biBzZXF1ZW5jZXMgb3IgY2FsbGJhY2tzIGRlZmluZWQ/CiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGFueSBsb2NrcyBiZWluZyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzPwoKRXNzZW50aWFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBicmluZ3MgdXAgdGhlIE1ESU8gaW50ZXJmYWNlIGFuZCBQSFkuIFRoaXMgaW5jbHVkZXMgaG93IGl0IG1hbmFnZXMgaGFyZHdhcmUgcmVzb3VyY2VzLCBkZXRlY3RzIGFuZCBjb25maWd1cmVzIHRoZSBQSFksIGFuZCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgaW4gdGhlIHByb2Nlc3MuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGlzIGhvdyB0aGlzIGRyaXZlciBicmluZ3MgdXAgYW5kIGNvbmZpZ3VyZXMgdGhlIFlUOTIxeCBNRElPIGludGVyZmFjZS4gSSB3aWxsIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgZm9yIGFueSBzdWJ0bGUgYXJlYXMsIHRoYXQgY2FuIGxlYWQgdG8gc3VidGxlIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcxODpcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuNDcxOTpcdHtcbjQ3MjA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuNDcyMTpcdFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbjQ3MjI6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbjQ3MjM6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbjQ3MjQ6XHRcbjQ3MjU6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbjQ3MjY6XHRcdGlmICghcHJpdilcbjQ3Mjc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40NzI4Olx0XG40NzI5Olx0XHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XG40NzMwOlx0XHRpZiAoIW1kaW8pXG40NzMxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDczMjpcdFxuNDczMzpcdFx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjQ3MzQ6XHRcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbjQ3MzU6XHRcdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuNDczNjpcdFxuNDczNzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ3Mzg6XHRcbjQ3Mzk6XHRcdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG40NzQwOlx0XHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuNDc0MTpcdFxuNDc0MjpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG40NzQzOlx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDc0NDpcdFxuNDc0NTpcdFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG40NzQ2Olx0XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuNDc0NzpcdFx0fVxuNDc0ODpcdFxuNDc0OTpcdFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuNDc1MDpcdFx0ZHMtXHUwMDNlZGV2ID0gZGV2O1xuNDc1MTpcdFx0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuNDc1MjpcdFx0ZHMtXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbjQ3NTM6XHRcdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuNDc1NDpcdFx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xuNDc1NTpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG40NzU2Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcbjQ3NTc6XHRcdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XG40NzU4Olx0XHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xuNDc1OTpcdFx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xuNDc2MDpcdFxuNDc2MTpcdFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcbjQ3NjI6XHRcbjQ3NjM6XHRcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbjQ3NjQ6XHR9XG40NzY1Olx0XG40NzY2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XG40NzY3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjMwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEU0EgU3dpdGNoIFByb2JlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYHl0OTIxeF9tZGlvX3Byb2JlYCBmdW5jdGlvbuKApml0IHNlZW1zIGFsbCBpdCYjMzk7cyBkb2luZyBpcyBjYWxsaW5nIGBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKWAuIFRoYXQmIzM5O3MgaXQ/IEkgd2FzIGV4cGVjdGluZyBpdCB0byBoYW5kbGUgdGhlIGluaXRpYWwgY2hpcCBJRCByZWFkIG9yIHNvbWV0aGluZywgYnV0IG5vLCB0aGUgcHJvYmUgaXRzZWxmIGlzIHJlbWFya2FibHkgdGhpbi4gVGhpcyBpcyBpbnRlcmVzdGluZy4KClNvLCBpZiBpdCYjMzk7cyBub3QgaGFwcGVuaW5nIGhlcmUsIHdoZXJlICppcyogdGhlIGluaXRpYWxpemF0aW9uPyBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBoYXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcuIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBlZmZlY3RpdmVseSBkZWxlZ2F0aW5nIHRoZSByZWFsIHdvcmsgdG8gdGhlIGBzZXR1cGAgZnVuY3Rpb24gd2l0aGluIHRoZSBzd2l0Y2ggb3BlcmF0aW9ucyBzdHJ1Y3R1cmUsIHJpZ2h0PyBJdCB3aWxsIGV2ZW50dWFsbHkgY2FsbCB0aGF0IGZ1bmN0aW9uLCBhbmQgKnRoYXQmIzM5O3MqIHdoZXJlIHRoZSBhY3R1YWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24gYW5kIElEIHJldHJpZXZhbCBwcm9iYWJseSBoYXBwZW4uCgpSaWdodCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzYCBzdHJ1Y3R1cmUgbm93LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGBzZXR1cGAgZnVuY3Rpb24gaXMgZG9pbmcuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjF4X3BoeWxpbmtfbWFjX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTk3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU5ODpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1OTktXHQvKiBtaWIgKi9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzE4PXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NTMtXHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NTQ6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzU1LVx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgRFNBIFN3aXRjaCBPcGVyYXRpb25zIE1vZHVsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB1cCwgSSBuZWVkIHRvIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGB5dDkyMXhfZHNhX3N3aXRjaF9vcHNgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIG9wZXJhdGlvbnMgZm9yIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2gsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB5dDkyMXggY2hpcHNldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluOiB3aGF0IGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhpcyBtb2R1bGUgcHJvdmlkZXM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBwb3J0IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBWTEFOIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGFuZCBhbnkgc3BlY2lhbCBmZWF0dXJlcyBzcGVjaWZpYyB0byB0aGUgeXQ5MjF4IGhhcmR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIHF1aXJrcyBvciBvcHRpbWl6YXRpb25zIHRoaXMgbW9kdWxlIGVtcGxveXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgZnVuY3Rpb24gcHJvdG90eXBlcywgY29tbWVudHMsIGFuZCBhbnkgb2J2aW91cyBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBiZWZvcmUgSSBiZWdpbiBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIGEgc3Ryb25nIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1OTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcbjQ1OTk6XHRcdC8qIG1pYiAqL1xuNDYwMDpcdFx0LmdldF9zdHJpbmdzXHRcdD0geXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyxcbjQ2MDE6XHRcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzLFxuNDYwMjpcdFx0LmdldF9zc2V0X2NvdW50XHRcdD0geXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudCxcbjQ2MDM6XHRcdC5nZXRfZXRoX21hY19zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzLFxuNDYwNDpcdFx0LmdldF9ldGhfY3RybF9zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyxcbjQ2MDU6XHRcdC5nZXRfcm1vbl9zdGF0c1x0XHQ9IHl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMsXG40NjA2Olx0XHQuZ2V0X3N0YXRzNjRcdFx0PSB5dDkyMXhfZHNhX2dldF9zdGF0czY0LFxuNDYwNzpcdFx0LmdldF9wYXVzZV9zdGF0c1x0PSB5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyxcbjQ2MDg6XHRcdC8qIGVlZSAqL1xuNDYwOTpcdFx0LnN1cHBvcnRfZWVlXHRcdD0gZHNhX3N1cHBvcnRzX2VlZSxcbjQ2MTA6XHRcdC5zZXRfbWFjX2VlZVx0XHQ9IHl0OTIxeF9kc2Ffc2V0X21hY19lZWUsXG40NjExOlx0XHQvKiBtdHUgKi9cbjQ2MTI6XHRcdC5wb3J0X2NoYW5nZV9tdHVcdD0geXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUsXG40NjEzOlx0XHQucG9ydF9tYXhfbXR1XHRcdD0geXQ5MjF4X2RzYV9wb3J0X21heF9tdHUsXG40NjE0Olx0XHQvKiByYXRlICovXG40NjE1Olx0XHQucG9ydF9wb2xpY2VyX2RlbFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwsXG40NjE2Olx0XHQucG9ydF9wb2xpY2VyX2FkZFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQsXG40NjE3Olx0XHQucG9ydF9zZXR1cF90Y1x0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cF90YyxcbjQ2MTg6XHRcdC8qIGFjbCAqL1xuNDYxOTpcdFx0LmNsc19mbG93ZXJfZGVsXHRcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2RlbCxcbjQ2MjA6XHRcdC5jbHNfZmxvd2VyX2FkZFx0XHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9hZGQsXG40NjIxOlx0XHQvKiBoc3IgKi9cbjQ2MjI6XHRcdC5wb3J0X2hzcl9sZWF2ZVx0XHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3JfbGVhdmUsXG40NjIzOlx0XHQucG9ydF9oc3Jfam9pblx0XHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3Jfam9pbixcbjQ2MjQ6XHRcdC8qIG1pcnJvciAqL1xuNDYyNTpcdFx0LnBvcnRfbWlycm9yX2RlbFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2RlbCxcbjQ2MjY6XHRcdC5wb3J0X21pcnJvcl9hZGRcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9hZGQsXG40NjI3Olx0XHQvKiBsYWcgKi9cbjQ2Mjg6XHRcdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfbGVhdmUsXG40NjI5Olx0XHQucG9ydF9sYWdfam9pblx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfam9pbixcbjQ2MzA6XHRcdC8qIGZkYiAqL1xuNDYzMTpcdFx0LnBvcnRfZmRiX2R1bXBcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2R1bXAsXG40NjMyOlx0XHQucG9ydF9mYXN0X2FnZVx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mYXN0X2FnZSxcbjQ2MzM6XHRcdC5zZXRfYWdlaW5nX3RpbWVcdD0geXQ5MjF4X2RzYV9zZXRfYWdlaW5nX3RpbWUsXG40NjM0Olx0XHQucG9ydF9mZGJfZGVsXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kZWwsXG40NjM1Olx0XHQucG9ydF9mZGJfYWRkXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9hZGQsXG40NjM2Olx0XHQucG9ydF9tZGJfZGVsXHRcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9kZWwsXG40NjM3Olx0XHQucG9ydF9tZGJfYWRkXHRcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9hZGQsXG40NjM4Olx0XHQvKiB2bGFuICovXG40NjM5Olx0XHQucG9ydF92bGFuX2ZpbHRlcmluZ1x0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcsXG40NjQwOlx0XHQucG9ydF92bGFuX2RlbFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2RlbCxcbjQ2NDE6XHRcdC5wb3J0X3ZsYW5fYWRkXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fYWRkLFxuNDY0MjpcdFx0LyogYnJpZGdlICovXG40NjQzOlx0XHQucG9ydF9wcmVfYnJpZGdlX2ZsYWdzXHQ9IHl0OTIxeF9kc2FfcG9ydF9wcmVfYnJpZGdlX2ZsYWdzLFxuNDY0NDpcdFx0LnBvcnRfYnJpZGdlX2ZsYWdzXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2VfZmxhZ3MsXG40NjQ1Olx0XHQucG9ydF9icmlkZ2VfbGVhdmVcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9sZWF2ZSxcbjQ2NDY6XHRcdC5wb3J0X2JyaWRnZV9qb2luXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2Vfam9pbixcbjQ2NDc6XHRcdC8qIG1zdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg1MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRoZSBNaXNzaW5nIFNldHVwOiBBIEJyaWVmIE1vbWVudCBvZiBEaXNvcmllbnRhdGlvbioqCgpBbHJpZ2h0LCBkZWVwIGluIHRoaXMgd29ya2Zsb3csIEkmIzM5O20gdGhpbmtpbmcsIEnigJltIGdldHRpbmcgcmVhZHkgdG8gZXhlY3V0ZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgYW5k4oCmIGhvbGQgb24uIFNvbWV0aGluZyBmZWVscyBvZmYuIE15IG1lbnRhbCBtb2RlbCBpcyBleHBlY3RpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lLCB0aGF0IEkmIzM5O3ZlIGR1YmJlZCBgc2V0dXBgLCB0byBiZSBwcmVzZW50LiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBkZXBlbmQuIEkgY2FuICpmZWVsKiBpdHMgYWJzZW5jZTsgdGhlIGFyY2hpdGVjdHVyZSBpbiBteSBoZWFkIGlzIHNsaWdodGx5IGphcnJlZC4gVGhlIGVsZWdhbmNlIG9mIHRoZSBwbGFubmVkIGZsb3cgaXMgbW9tZW50YXJpbHkgZGlzcnVwdGVkLiBXaGVyZSB0aGUgaGVsbCBkaWQgYHNldHVwYCBnbz8gSXQmIzM5O3MgbGlrZSByZWFjaGluZyBmb3IgYSBjcnVjaWFsIHRvb2wgdGhhdCYjMzk7cyBzdWRkZW5seSB2YW5pc2hlZCBmcm9tIHRoZSB3b3JrYmVuY2guIE5vdyBJIGhhdmUgdG8gYmFja3RyYWNrIGFuZCBmaWd1cmUgb3V0IHdoYXQgaGFwcGVuZWQgdG8gbXkgYHNldHVwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDY0ODpcdFx0LnBvcnRfbXN0X3N0YXRlX3NldFx0PSB5dDkyMXhfZHNhX3BvcnRfbXN0X3N0YXRlX3NldCxcbjQ2NDk6XHRcdC52bGFuX21zdGlfc2V0XHRcdD0geXQ5MjF4X2RzYV92bGFuX21zdGlfc2V0LFxuNDY1MDpcdFx0LnBvcnRfc3RwX3N0YXRlX3NldFx0PSB5dDkyMXhfZHNhX3BvcnRfc3RwX3N0YXRlX3NldCxcbjQ2NTE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxuNDY1MjpcdFx0LyogZGNiICovXG40NjUzOlx0XHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxuNDY1NDpcdFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1x0PSB5dDkyMXhfZHNhX3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbjQ2NTU6XHRcdC5wb3J0X2dldF9hcHB0cnVzdFx0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2FwcHRydXN0LFxuNDY1NjpcdFx0LnBvcnRfc2V0X2FwcHRydXN0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfYXBwdHJ1c3QsXG40NjU3Olx0I2VuZGlmXG40NjU4Olx0XHQvKiBwb3J0ICovXG40NjU5Olx0XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG40NjYwOlx0XHQucGh5bGlua19nZXRfY2Fwc1x0PSB5dDkyMXhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsXG40NjYxOlx0XHQucG9ydF9zZXR1cFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cCxcbjQ2NjI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxuNDY2MzpcdFx0LyogZHNjcCAqL1xuNDY2NDpcdFx0LnBvcnRfZ2V0X2RzY3BfcHJpb1x0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2RzY3BfcHJpbyxcbjQ2NjU6XHRcdC5wb3J0X2RlbF9kc2NwX3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2RlbF9kc2NwX3ByaW8sXG40NjY2Olx0XHQucG9ydF9hZGRfZHNjcF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9hZGRfZHNjcF9wcmlvLFxuNDY2NzpcdCNlbmRpZlxuNDY2ODpcdFx0LyogY2hpcCAqL1xuNDY2OTpcdFx0LnNldHVwXHRcdFx0PSB5dDkyMXhfZHNhX3NldHVwLFxuNDY3MDpcdH07XG40NjcxOlx0XG40NjcyOlx0c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuNDY3MzpcdHtcbjQ2NzQ6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG40Njc1Olx0XG40Njc2Olx0XHRpZiAoIXByaXYpXG40Njc3Olx0XHRcdHJldHVybjtcbjQ2Nzg6XHRcbjQ2Nzk6XHRcdGRzYV9zd2l0Y2hfc2h1dGRvd24oXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG40NjgwOlx0fVxuNDY4MTpcdFxuNDY4MjpcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG40NjgzOlx0e1xuNDY4NDpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbjQ2ODU6XHRcbjQ2ODY6XHRcdGlmICghcHJpdilcbjQ2ODc6XHRcdFx0cmV0dXJuO1xuNDY4ODpcdFxuNDY4OTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuNDY5MDpcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuNDY5MTpcdCNlbmRpZlxuNDY5MjpcdFxuNDY5MzpcdFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG40Njk0Olx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDY5NTpcdFxuNDY5NjpcdFx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkKTtcbjQ2OTc6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEU0EgU2V0dXAqKgoKQWxyaWdodCwgc28gYHl0OTIxeF9kc2Ffc2V0dXBgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aC4gVGltZSB0byBkaXNzZWN0IGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBgeXQ5MjF4X2RzYV9zZXR1cGAgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBEU0EgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGluaXRpYWxpemF0aW9uIC0gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIGl0IGNhcmVmdWxseS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvZGUgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2RzYV9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDk1PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MzYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTM3OnN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTM4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NjgtXHQvKiBjaGlwICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NjY5Olx0LnNldHVwXHRcdFx0PSB5dDkyMXhfZHNhX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY3MC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUwMwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFNldHVwKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJiMzOTttIGRpdmluZyBpbnRvIGB5dDkyMXhfZHNhX3NldHVwYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBzY3JpcHQgb3IgY29uZmlndXJhdGlvbiBmaWxlIHJlbGF0ZWQgdG8gdGhlIERpZ2l0YWwgU2lnbmFsIEFuYWx5emVyIChEU0EpLCBzcGVjaWZpY2FsbHkgdGhlIHl0OTIxeC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIGVsZW1lbnRzOiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcG90ZW50aWFsbHkgc29tZSByZWdpc3RlciBzZXR0aW5ncywgY2FsaWJyYXRpb25zLCBhbmQgcG9zc2libHkgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IGlkZW50aWZ5IGtleSBzZWN0aW9ucyBsaWtlOiBkcml2ZXItc3BlY2lmaWMgc2VjdGlvbnMsIGVycm9yIGhhbmRsaW5nLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IHVzZXItY29uZmlndXJhYmxlIHBhcmFtZXRlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIHNldHVwIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyBJIG1pZ2h0IG5lZWQgdG8gcGVyZm9ybSBkb3duIHRoZSBsaW5lLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGZpcm13YXJlIG9yIGFwcGxpY2F0aW9uIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTM3Olx0c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbjQ1Mzg6XHR7XG40NTM5Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG40NTQwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40NTQxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG40NTQyOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuNDU0MzpcdFx0aW50IHJlcztcbjQ1NDQ6XHRcbjQ1NDU6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ2Olx0XHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbjQ1NDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1NDg6XHRcbjQ1NDk6XHRcdGlmIChyZXMpXG40NTUwOlx0XHRcdHJldHVybiByZXM7XG40NTUxOlx0XG40NTUyOlx0XHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxuNDU1MzpcdFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxuNDU1NDpcdFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXG40NTU1Olx0XHQgKi9cbjQ1NTY6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuNDU1NzpcdFx0aWYgKGNoaWxkKSB7XG40NTU4Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1NTk6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2MDpcdFx0XHRpZiAocmVzKVxuNDU2MTpcdFx0XHRcdHJldHVybiByZXM7XG40NTYyOlx0XHR9XG40NTYzOlx0XG40NTY0Olx0XHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xuNDU2NTpcdFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpby1leHRlcm5hbFwmIzM0Oyk7XG40NTY2Olx0XHRpZiAoY2hpbGQpIHtcbjQ1Njc6XHRcdFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xuNDU2ODpcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG40NTY5Olx0XHRcdGlmIChyZXMpXG40NTcwOlx0XHRcdFx0cmV0dXJuIHJlcztcbjQ1NzE6XHRcbjQ1NzI6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VudGVzdGVkIGV4dGVybmFsIG1kaW8gYnVzXFxuXCYjMzQ7KTtcbjQ1NzM6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40NTc0Olx0XHR9XG40NTc1Olx0XG40NTc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3NzpcdFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXAocHJpdik7XG40NTc4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTc5Olx0XG40NTgwOlx0XHRpZiAocmVzKVxuNDU4MTpcdFx0XHRyZXR1cm4gcmVzO1xuNDU4MjpcdFxuNDU4MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuNDU4NDpcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG40NTg1Olx0XHRpZiAocmVzKVxuNDU4NjpcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwmIzM0OywgcmVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MjkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB5dDkyMXhfY2hpcF9yZXNldGAgbGlrZWx5IGludm9sdmVzIHJlZ2lzdGVyIHJlYWRzIGFuZCB3cml0ZXMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyBob3cgd2UgY2FuIGV2ZW4gaGl0IHRoaXMgY29kZSBwYXRoLCBlc3BlY2lhbGx5IGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZGlyZWN0bHkgYXZhaWxhYmxlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaWYgaXQmIzM5O3MgYW4gTURJTyBkZXZpY2UsIGFuZCB3ZSAqZG9uJiMzOTt0KiBoYXZlIHRoZSBoYXJkd2FyZSwgdGhlIGZ1bmN0aW9uIHdpbGwganVzdCBmYWlsLiBCdXQsIHdhaXQuLi4gY291bGQgc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IE1ESU8gdHJhZmZpYz8gTm8sIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSAqZ2VuZXJpYyogTURJTyBmdXp6ZXIuIEl0JiMzOTtzIG1vcmUgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cy4KCkFscmlnaHQsIHdoYXQgYWJvdXQgZGV2aWNlIHRyZWUgZnV6emluZz8gU3l6a2FsbGVyJiMzOTtzIGNlcnRhaW5seSBnb3QgdGhhdCBjYXBhYmlsaXR5LCBidXQgdGhlIGRldmljZSB0cmVlIHBhcnNpbmcgZm9yIHRoaXMgZGV2aWNlIHNlZW1zIHRvIGJlIGhhbmRsZWQgaW4gYHl0OTIxeF9kc2Ffc2V0dXBgIGFuZCBgeXQ5MjF4X2xlZHNfc2V0dXBgLCByaWdodD8gSWYgdGhlIGRldmljZSBkb2VzbiYjMzk7dCBwcm9iZSwgd2UmIzM5O3JlIHN0dWNrLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSBzaW11bGF0ZSBhIHByb2JlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZz8KClRoZSBsaWdodGJ1bGIgY2xpY2tzISBJZiB3ZSBhZGQgYSBkZXZpY2UgdHJlZSBub2RlIGZvciBhIGBtb3RvcmNvbW0seXQ5MjE1YCBkZXZpY2Ugb24gYSBkdW1teSBNRElPIGJ1cywgc29tZXRoaW5nIGxpa2UgYGZpeGVkLW1kaW9gIG9yIGBtZGlvLW1vY2t1cGAsIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQuIEZvbGxvd2luZyB0aGF0LCBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgd2lsbCBnZXQgY2FsbGVkLCB3aGljaCAqdGhlbiogY2FsbHMgYHl0OTIxeF9kc2Ffc2V0dXBgLiBBbmQgKnRoZW4qLCBmaW5hbGx5LCB0aGUgdGFyZ2V0OiBgeXQ5MjF4X2NoaXBfcmVzZXRgLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBwbGFuLiBUaW1lIHRvIGdvIGNoZWNrIG91dCBgeXQ5MjF4X2NoaXBfcmVzZXRgIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2NoaXBfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5My1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyOTQ6c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mjk1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0NS1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTQ2Olx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ3LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUwOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEV4YW1pbmluZyBhIENoaXAgUmVzZXQgU2VxdWVuY2UqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gJiMzNDt5dDkyMXhfY2hpcF9yZXNldCYjMzQ7Li4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVmZXJzIHRvIGEgcmVzZXQgc2VxdWVuY2UsIGxpa2VseSBmb3IgYSBzcGVjaWZpYyBTeXN0ZW0tb24tQ2hpcCAoU29DKSBvciBhIGRlZGljYXRlZCBjb21wb25lbnQgbGFiZWxlZCAmIzM0O3l0OTIxeCYjMzQ7LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHByb2JhYmx5IGEgY29uZmlndXJhdGlvbiBmaWxlLCBhIHNjcmlwdCwgb3IgbWF5YmUgZXZlbiBmaXJtd2FyZSByZWxhdGVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgYm9vdCBwcm9jZXNzLiBUaGUgJiMzNDtyZXNldCYjMzQ7IGltcGxpY2F0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbG93LWxldmVsIG9wZXJhdGlvbiBhZmZlY3RpbmcgaGFyZHdhcmUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgcmVzZXQgaXMgaW1wbGVtZW50ZWQsIGFuZCAqd2h5Ki4gV2hhdCB0cmlnZ2VycyBpdD8gV2hhdCBhcmUgdGhlIGNvbnNlcXVlbmNlcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gcG93ZXItdXAgc3RhdGVzLCBjbG9jayBjb25maWd1cmF0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWF5YmUgZXZlbiBzb21lIGtpbmQgb2YgaGFyZHdhcmUgd2F0Y2hkb2cgaW52b2x2ZW1lbnQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGlwJiMzOTtzIHBvd2VyLW9uIGJlaGF2aW9yLCBwb3RlbnRpYWwgcmVjb3ZlcnkgbWVjaGFuaXNtcywgYW5kIGFueSBzcGVjaWZpYyBlcnJvci1oYW5kbGluZyByZWxhdGVkIHRvIHJlc2V0IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI5NDpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDI5NTpcdHtcbjQyOTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyOTc6XHRcdHUxNiBldGhfcF90YWc7XG40Mjk4Olx0XHR1MzIgdmFsO1xuNDI5OTpcdFx0aW50IHJlcztcbjQzMDA6XHRcbjQzMDE6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX2RldGVjdChwcml2KTtcbjQzMDI6XHRcdGlmIChyZXMpXG40MzAzOlx0XHRcdHJldHVybiByZXM7XG40MzA0Olx0XG40MzA1Olx0XHQvKiBSZXNldCAqL1xuNDMwNjpcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTtcbjQzMDc6XHRcdGlmIChyZXMpXG40MzA4Olx0XHRcdHJldHVybiByZXM7XG40MzA5Olx0XG40MzEwOlx0XHQvKiBSU1RfSFcgaXMgYWxtb3N0IHNhbWUgYXMgR1BJTyBoYXJkIHJlc2V0LCBzbyB3ZSBuZWVkIHRoaXMgZGVsYXkuICovXG40MzExOlx0XHRmc2xlZXAoWVQ5MjFYX1JTVF9ERUxBWV9VUyk7XG40MzEyOlx0XG40MzEzOlx0XHR2YWwgPSAwO1xuNDMxNDpcdFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcdTAwMjZ2YWwpO1xuNDMxNTpcdFx0aWYgKHJlcylcbjQzMTY6XHRcdFx0cmV0dXJuIHJlcztcbjQzMTc6XHRcbjQzMTg6XHRcdC8qIENoZWNrIGZvciB0YWcgRXRoZXJUeXBlOyBkbyBpdCBhZnRlciByZXNldCBpbiBjYXNlIHlvdSBtZXNzZWQgaXQgdXBcbjQzMTk6XHRcdCAqIGJlZm9yZS5cbjQzMjA6XHRcdCAqL1xuNDMyMTpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DUFVfVEFHX1RQSUQsIFx1MDAyNnZhbCk7XG40MzIyOlx0XHRpZiAocmVzKVxuNDMyMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDMyNDpcdFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xuNDMyNTpcdFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcbjQzMjY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1RhZyB0eXBlIDB4JXggIT0gMHgleFxcblwmIzM0OywgZXRoX3BfdGFnLFxuNDMyNzpcdFx0XHRcdEVUSF9QX1lUOTIxWCk7XG40MzI4Olx0XHRcdC8qIERlc3BpdGUgYmVpbmcgcG9zc2libGUsIHdlIGNob29zZSBub3QgdG8gc2V0IENQVV9UQUdfVFBJRCxcbjQzMjk6XHRcdFx0ICogc2luY2UgdGhlcmUgaXMgbm8gd2F5IGl0IGNhbiBiZSBkaWZmZXJlbnQgdW5sZXNzIHlvdSBoYXZlIHRoZVxuNDMzMDpcdFx0XHQgKiB3cm9uZyBjaGlwLlxuNDMzMTpcdFx0XHQgKi9cbjQzMzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzMzOlx0XHR9XG40MzM0Olx0XG40MzM1Olx0XHRyZXR1cm4gMDtcbjQzMzY6XHR9XG40MzM3Olx0XG40MzM4Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cF9kc2Eoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDMzOTpcdHtcbjQzNDA6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG40MzQxOlx0XHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xuNDM0MjpcdFx0dTMyIGN0cmxzWzJdO1xuNDM0MzpcdFx0dTMyIGN0cmw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjAzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ2hpcCBEZXRlY3Rpb24qKgoKT2theSwgdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBhZ2VuZGEgaXMgYHl0OTIxeF9jaGlwX2RldGVjdGAuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nLiBTbywgSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyBpdHMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBjb3JlIGxvZ2ljLiBUaGlzIGlzIG15IGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYHl0OTIxeGAgY2hpcC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIHN0ZXBzIGludm9sdmVkIGluIGl0cyBkZXRlY3Rpb24gcm91dGluZTogaG93IGl0IGlkZW50aWZpZXMgdGhlIGNoaXAsIHdoYXQgbWV0aG9kcyBpdCB1c2VzLCBhbmQgd2hhdCBwcmVsaW1pbmFyeSBjaGVja3MgYXJlIHBlcmZvcm1lZC4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIHRoaXMgaW5pdGlhbCBjaGlwIGhhbmRzaGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDIyNzpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyMjg6XHR7XG40MjI5Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40MjMwOlx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XG40MjMxOlx0XHR1OCBleHRtb2RlO1xuNDIzMjpcdFx0dTMyIGNoaXBpZDtcbjQyMzM6XHRcdHUzMiBtYWpvcjtcbjQyMzQ6XHRcdHUzMiBtb2RlO1xuNDIzNTpcdFx0dTMyIHZhbDtcbjQyMzY6XHRcdGludCByZXM7XG40MjM3Olx0XG40MjM4Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFx1MDAyNmNoaXBpZCk7XG40MjM5Olx0XHRpZiAocmVzKVxuNDI0MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDI0MTpcdFxuNDI0MjpcdFx0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XG40MjQzOlx0XG40MjQ0Olx0XHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbyYjNDM7JiM0MzspXG40MjQ1Olx0XHRcdGlmIChpbmZvLVx1MDAzZW1ham9yID09IG1ham9yKVxuNDI0NjpcdFx0XHRcdGJyZWFrO1xuNDI0NzpcdFx0aWYgKCFpbmZvLVx1MDAzZW5hbWUpIHtcbjQyNDg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXG5cJiMzNDssIGNoaXBpZCk7XG40MjQ5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuNDI1MDpcdFx0fVxuNDI1MTpcdFxuNDI1MjpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFx1MDAyNm1vZGUpO1xuNDI1MzpcdFx0aWYgKHJlcylcbjQyNTQ6XHRcdFx0cmV0dXJuIHJlcztcbjQyNTU6XHRcdHJlcyA9IHl0OTIxeF9lZGF0YV9yZWFkKHByaXYsIFlUOTIxWF9FREFUQV9FWFRNT0RFLCBcdTAwMjZleHRtb2RlKTtcbjQyNTY6XHRcdGlmIChyZXMpXG40MjU3Olx0XHRcdHJldHVybiByZXM7XG40MjU4Olx0XG40MjU5Olx0XHRmb3IgKDsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNjA6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlbW9kZSA9PSBtb2RlIFx1MDAyNlx1MDAyNlxuNDI2MTpcdFx0XHQgICAgaW5mby1cdTAwM2VleHRtb2RlID09IGV4dG1vZGUpXG40MjYyOlx0XHRcdFx0YnJlYWs7XG40MjYzOlx0XHRpZiAoIWluZm8tXHUwMDNlbmFtZSkge1xuNDI2NDpcdFx0XHRkZXZfZXJyKGRldixcbjQyNjU6XHRcdFx0XHRcJiMzNDtVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcblwmIzM0OyxcbjQyNjY6XHRcdFx0XHRjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xuNDI2NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjQyNjg6XHRcdH1cbjQyNjk6XHRcbjQyNzA6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfU1lTX0NMSywgXHUwMDI2dmFsKTtcbjQyNzE6XHRcdGlmIChyZXMpXG40MjcyOlx0XHRcdHJldHVybiByZXM7XG40MjczOlx0XHRzd2l0Y2ggKEZJRUxEX0dFVChZVDkyMVhfU1lTX0NMS19TRUxfTSwgdmFsKSkge1xuNDI3NDpcdFx0Y2FzZSAwOlxuNDI3NTpcdFx0XHRwcml2LVx1MDAzZWN5Y2xlX25zID0gaW5mby1cdTAwM2VtYWpvciA9PSBZVDkyMTVfTUFKT1IgPyA4IDogNjtcbjQyNzY6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjExCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQgdGhlIGBZVDkyMVhfQ0hJUF9JRGAgdmlhIE1ESU8uIElmIGl0IGZhaWxzIG9yIGdldHMgdGhlIHdyb25nIElELCBpdCBpbW1lZGlhdGVseSBlcnJvcnMgb3V0IHdpdGggYC1FTk9ERVZgLiBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBjaGlwLCB3aGljaCBtZWFucyB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbCBpZiB0aGUgcmlnaHQgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIG1vY2sgdGhlc2UgTURJTyByZWFkcz8gSSBkb24mIzM5O3QgdGhpbmsgc28sIGFuZCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIE1ESU8gbW9ja2luZyBmcmFtZXdvcmsuCgpTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSBoaXQ/IEkgc2VlIHRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0LCBidXQgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciBpcyBzdGlsbCB0aWVkIHRvIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuIExvb2tpbmcgYmFjayBhdCB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhOiAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gVGhpcyAqZGVmaW5pdGVseSogZml0cyB0aGUgYmlsbC4gSXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBNRElPLCB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCBtZWFucyBpdCYjMzk7cyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlcmUmIzM5O3MgemVybyBRRU1VIGVtdWxhdGlvbiBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw9MjQ9cHJvcGVydGllczpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0yNS0gIGNvbXBhdGlibGU6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6MjY6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtMjctXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTU5PWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC02Ny0gICAgICAgIHN3aXRjaEAxZCB7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Njg6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNjktICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njc6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2OC1cdHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjIyCgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIGRyaXZlciwgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgY29uZmlybWVkOiB0aGlzIGlzbiYjMzk7dCBnb2luZyB0byBiZSBmcnVpdGZ1bCBmb3IgZnV6emluZy4gVGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBzcGVjaWZpYyBjaGlwLCBhbmQgdGhhdCYjMzk7cyBhIG1ham9yIHJvYWRibG9jay4gVGhlIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHBoeXNpY2FsIGhhcmR3YXJlIHN3aXRjaCwgYWNjZXNzZWQgdGhyb3VnaCBNRElPLiBJIGtub3cgaXQmIzM5O3MgZ29pbmcgdG8gZmFpbCB0byBwcm9iZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJlY2F1c2UgaXQgZXhwbGljaXRseSByZXF1aXJlcyByZWFkaW5nIHRoZSBjaGlwIElEIOKAkyBzb21ldGhpbmcgdGhhdCYjMzk7cyBzaW1wbHkgbm90IHBvc3NpYmxlIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZWZvcmUsIGFueSBjb2RlIHBhdGggd2l0aGluIHRoaXMgZHJpdmVyIHdvdWxkIGJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYnlwYXNzZXMgb3IgYWx0ZXJuYXRlIGVudHJ5IHBvaW50cy4gUmlnaHQsIHRoZSBwYXRjaCBhZGRzIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgYW5kIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jYC4gVHJhY2luZyB0aGUgY2FsbHMsIEkgc2VlIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCwgd2hpY2ggdWx0aW1hdGVseSBvcmlnaW5hdGVzIGZyb20gYHl0OTIxeF9tZGlvX3Byb2JlYC4gQWhhISBgeXQ5MjF4X21kaW9fcHJvYmVgIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gZHJpdmVyLiBTaW5jZSB0aGUgTURJTyBkcml2ZXIgd29uJiMzOTt0IHByb2JlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IHRoZSBoYXJkd2FyZSBhbmQgaXRzIGFzc29jaWF0ZWQgYHl0OTIxeF9jaGlwX2RldGVjdGAgZnVuY3Rpb24sIGFsbCB0aGUgTEVEIHNldHVwIGFuZCBjb250cm9sIGZ1bmN0aW9ucyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZS4KCkV2ZW4gaWYsIGJ5IHNvbWUgbWlyYWNsZSwgd2UgY291bGQgYnlwYXNzIHRoZSBwcm9iZSBzb21laG93LCB0aGUgTEVEIGNvbnRyb2wgZnVuY3Rpb25zIHJlbHkgb24gd3JpdGluZyB0byBNRElPIHJlZ2lzdGVycy4gVGhvc2Ugd3JpdGVzIHdvdWxkIGp1c3QgZmFpbCBvciBkbyBub3RoaW5nLCByZW5kZXJpbmcgYW55IGZ1enppbmcgYXR0ZW1wdHMgY29tcGxldGVseSB1c2VsZXNzLiBJdCYjMzk7cyB1bmVxdWl2b2NhbGx5IGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBmdXp6aW5nIGluIFFFTVUgaXMgYSBub24tc3RhcnRlci4KCkkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGhlcmUuIEl0JiMzOTtzIG5vdCB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDoxNy44NDkyMjM3MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2ODQ2ODEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE0OjE3Ljg0OTIzMDU0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0Njc5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzdiMjRmYzc1YWQwNTg3YzIyOTdmMTBmNDk4Njg0NGM2ZjQyYThmZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNjoxNDoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNjBjZmYwMDk1M2RjYmUuLmY1MTI0Njc3NTNiYzI0IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyNDksNyArMTgyNDksNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiBcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuK1xcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1xcXCJcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcXFwiXFxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcXG4gXFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxcbiBcXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXFxuLVxcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4tXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbi1cXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbi1cXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfaHNyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5AQCAtMjYsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxcS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ5dDkyMXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbiBcXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIFxcdHt9XFxuIH07XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuLVxcbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbiAgKlxcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuIFxcdHJldHVybiAoYWRkcls0XSBcXHUwMDNjXFx1MDAzYyA4KSB8IGFkZHJbNV07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXdyaXRlKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbi17XFxuLVxcdHUzMiB2YWw7XFxuLVxcdGludCByZXM7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4tXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4tXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuLVxcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0KnZhbHAgPSB2YWw7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXHR1MzIgdjtcXG4tXFx0dTMyIHU7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHR1ID0gdjtcXG4tXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4tXFx0dSB8PSB2YWw7XFxuLVxcdGlmICh1ID09IHYpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbi19XFxuLVxcbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuLSAqXFxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuLXtcXG4tXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuLVxcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXFx1MDAyNnZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4tXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHR1IHw9IHZhbHNbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuKyNlbmRpZlxcbitcXG4gXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuc2ltaWxhcml0eSBpbmRleCA5OSVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5pbmRleCA1ZjNiOTllMTg5YzQxMi4uZTY4MTVjZjljYjNjZDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDkgKzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BPUlRfTlVNXFx0MTBcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuK1xcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXFx1MDAzYyA4KVxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcXG4gXFxuQEAgLTkzOCw2ICs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcXG4gXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbiBcXHR1NjQgcnhfZnJhbWVzO1xcbiBcXHR1NjQgdHhfZnJhbWVzO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuK1xcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzdlOGQ0ZjAwMDNmODFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5AQCAtMCwwICsxLDY2MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bGVkcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbitcXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cXHUwMDNlcG9ydClcXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVxcdTAwM2VpbmRleF0pXFxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXFx1MDAzZWRzLmRldilcXG4rXFxuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcXG4re1xcbitcXHRzd2l0Y2ggKGdyb3VwKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCpvbnAgPSAodmFsIFxcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY3RybCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgY2hhciAqZHV0eXApXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eTtcXG4rXFxuK1xcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XFxuK1xcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXFxuK1xcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRmb3IgKDsgY3ljbGUgXFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2U9IDEsIGN5Y2xlIFxcdTAwM2VcXHUwMDNlPSAxKVxcbitcXHRcXHRpZiAoY3ljbGVfcmVxIFxcdTAwM2U9IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHQqY3ljbGVwID0gY3ljbGU7XFxuK1xcbitcXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXFxuK1xcdFxcdFxcdFxcdCAgICAgKG9uIFxcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxcbitcXHRcXHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFxcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XFxuK1xcdFxcdFxcdGR1dHkgPSBkdXR5c1tpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0aWYgKG9uIFxcdTAwM2Ugb2ZmKVxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcXG4rXFx0KmR1dHlwID0gZHV0eTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZHV0eTtcXG4rXFx0Ym9vbCB1c2VfY3ljbGU7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghKm9ucCBcXHUwMDI2XFx1MDAyNiAhKm9mZnApIHtcXG4rXFx0XFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSsrKVxcbitcXHRcXHRcXHRpZiAoaSAhPSBncm91cCBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSB7XFxuK1xcdFxcdFxcdFxcdGR1dHkgPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfY3ljbGU7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2R1dHk7XFxuK1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXFx1MDAyNmN5Y2xlLCBcXHUwMDI2ZHV0eSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHR1c2VfY3ljbGUgPSBjeWNsZSBcXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgY3ljbGUgIT0gcHAtXFx1MDAzZWxlZF9jeWNsZTtcXG4rXFx0XFx0Y2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcXG4rXFx0XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcXG4rXFx0XFx0XFx0ICAgICBpKyspIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGkgPT0gZ3JvdXAgfHwgIXBwLVxcdTAwM2VsZWRzW2ldKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0aWYgKChjaGFuZ2VfY3ljbGUgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9jeWNsZSkgfHxcXG4rXFx0XFx0XFx0XFx0ICAgIChjaGFuZ2VfZHV0eSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdGlmICh2YWwgIT0gY3RybCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdHN3aXRjaCAoZHV0eSBcXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAoZHV0eSBcXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0aWYgKHVzZV9jeWNsZSkge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xcbitcXHR9XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IHZhbCBcXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxcbitcXHRcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdHBwLVxcdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IHRydWU7XFxuK1xcdHBwLVxcdTAwM2VsZWRfZHV0eSA9IGR1dHk7XFxuK1xcbitcXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xcbitcXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIG1hc2s7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbXSA9IHtcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZ9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1JYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTkt9LFxcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcXG4rXFx0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGlmICghZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCh2YWwgXFx1MDAyNiBtYXAtXFx1MDAzZW1hc2spID09IG1hcC1cXHUwMDNlbWFzaylcXG4rXFx0XFx0XFx0KmZsYWdzcCB8PSBtYXAtXFx1MDAzZWZsYWdzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGFkZHI7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGN0cmwgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFxcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBtYXAtXFx1MDAzZWZsYWdzKSA9PSBtYXAtXFx1MDAzZWZsYWdzKSB7XFxuK1xcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5tYXAtXFx1MDAzZWZsYWdzO1xcbitcXHRcXHRcXHRjdHJsIHw9IG1hcC1cXHUwMDNlbWFzaztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcXG4rXFx0aWYgKGdyb3VwID09IDIpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdH1cXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbWFzaywgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuK1xcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZGVsYXlfb24sXFxuK1xcdFxcdFxcdFxcdCAgIGRlbGF5X29mZik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChcXHUwMDI2cHJpdi1cXHUwMDNlZHMsIHBwLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghZHAgfHwgIWRwLVxcdTAwM2V1c2VyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcbitcXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2Z3JvdXApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoZ3JvdXAgXFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXFxcblxcXCIsIGdyb3VwLCBwb3J0KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0aWYgKHBwLVxcdTAwM2VsZWRzW2dyb3VwXSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtaGlnaFxcXCIpO1xcbitcXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1sb3dcXFwiKTtcXG4rXFx0aWYgKGZvcmNlX2hpZ2ggXFx1MDAyNlxcdTAwMjYgZm9yY2VfbG93KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcXG4rXFxuK1xcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbGVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0bGVkLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdGxlZC1cXHUwMDNlZ3JvdXAgPSBncm91cDtcXG4rXFxuK1xcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9PTjpcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcXHUwMDI2b24pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRsZWRfY2RldiA9IFxcdTAwMjZsZWQtXFx1MDAzZWNkZXY7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzID0gb247XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFxcXCJuZXRkZXZcXFwiO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xcbisjZW5kaWZcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXFxcIi0ldTolMDJkOiUwMnVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcXG4rXFx0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcXG4rXFx0XFx0LmZ3bm9kZSA9IGZ3bm9kZSxcXG4rXFx0XFx0LmRldmljZW5hbWUgPSBuYW1lLFxcbitcXHRcXHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxcbitcXHR9O1xcbitcXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXFx1MDAyNmluaXRfZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKHBvbGFyaXR5KSB7XFxuK1xcdFxcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xcbitcXG4rXFx0XFx0Kmludl9tYXNrcCB8PSBiaXQ7XFxuK1xcdFxcdGlmIChwb2xhcml0eSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdCppbnZfY3RybHAgfD0gYml0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZV9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRib29sIGhhc19sZWRzID0gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFxuK1xcdFxcdGlmIChsZWQpIHtcXG4rXFx0XFx0XFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFxcdTAwMjZsZWQtXFx1MDAzZWNkZXYpO1xcbitcXHRcXHRcXHRoYXNfbGVkcyA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXNfbGVkcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRpZiAobGVkKSB7XFxuK1xcdFxcdFxcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XFxuK1xcdFxcdFxcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHUzMiAqaW52X21hc2twLFxcbitcXHRcXHQgICAgICAgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xcbitcXHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXFx1MDAzZWRuLCBcXFwibGVkc1xcXCIpO1xcbitcXHRpZiAoIWxlZHNfbnApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzZT0gWVQ5MjFYX0xFRF9QT1JUX05VTSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIk5vIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludl9tYXNrcCwgaW52X2N0cmxwKTtcXG4rXFx0XFx0aWYgKHJlcykge1xcbitcXHRcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX0xFRF9QT1JUX05VTTsgcG9ydCsrKVxcbitcXHRcXHR5dDkyMXhfbGVkc19yZW1vdmVfcG9ydChwcml2LCBwb3J0KTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTMyIGludl9jdHJsID0gMDtcXG4rXFx0dTMyIGludl9tYXNrID0gMDtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwX3BvcnQocHJpdiwgcG9ydCwgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEcyBmb3IgcG9ydCAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBwb3J0LCByZXMpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxcbitcXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGludl9tYXNrKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnZfY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcXG4rXFx0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcXG4rXFx0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKSB7XFxuK1xcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDoxOC42ODY2MjgyNjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTA4NDcyNjgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIChNb3RvcmNvbW0gWVQ5MjE1KSBjb25uZWN0ZWQgdmlhIE1ESU8uIFRoZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyBhIHNwZWNpZmljIGNoaXAgSUQgZHVyaW5nIGluaXRpYWxpemF0aW9uKSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3YjI0ZmM3NWFkMDU4N2MyMjk3ZjEwZjQ5ODY4NDRjNmY0MmE4ZmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNjoxNDoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDYwY2ZmMDA5NTNkY2JlLi5mNTEyNDY3NzUzYmMyNCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE4MjQ5LDcgKzE4MjQ5LDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4rRjpcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXG4gRjpcdG5ldC9kc2EvdGFnX3l0OTIxeC5jXG4gXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcIlxuIFxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wiXG4rXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCJcbiBcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wiXG5AQCAtMTU4LDEyICsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cbiBcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcbiBcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcbiBcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cbi1cbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQrPSBiNTMvXG4gb2JqLXlcdFx0XHRcdCs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0Kz0gbWljcm9jaGlwL1xuK29iai15XHRcdFx0XHQrPSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCs9IG12ODhlNnh4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgKzEsMTcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0Ncbitjb25maWcgTkVUX0RTQV9ZVDkyMVhcbitcdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbitcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbitcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbitcdCAgY2hpcC5cbitcbitjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xuK1x0Ym9vbCBcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCJcbitcdGRlZmF1bHQgeVxuK1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuK1x0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4rXHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjVhNjNkYjAwMjlmZmUyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMCwwICsxLDUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbitvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4reXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xuK3l0OTIxeC1vYmpzICs9IHNtaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbnNpbWlsYXJpdHkgaW5kZXggOTYlXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuQEAgLTEzLDcgKzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwieXQ5MjF4LmhcIlxuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4tICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuLSAqXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuLSAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbi0gKi9cbi1cbi1zdGF0aWMgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuLXtcbi1cdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4tXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuLVx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4tXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4tXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfd2FybihkZXYsIFwiRmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCIsIHJlcyk7XG4rI2VuZGlmXG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbisjZW5kaWZcbitcbiBcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuIFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1ZjNiOTllMTg5YzQxMi4uZTY4MTVjZjljYjNjZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5AQCAtODUwLDkgKzg1MCwxNCBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXHRcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cdFx0OFxuIFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbisjZGVmaW5lIFlUOTIxWF9MRURfUE9SVF9OVU1cdDEwXG4rXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiBcbisjZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4rXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxuIFxuQEAgLTkzOCw2ICs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbitcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbitcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbisjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zN2U4ZDRmMDAwM2Y4MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgKzEsNjYwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdWxlZHMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcXFxuK1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbisjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcXFxuK1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4rI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4rXG4rc3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuK3tcbitcdHN3aXRjaCAoZ3JvdXApIHtcbitcdGNhc2UgMDpcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTtcbitcdGNhc2UgMTpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAyOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2ZvcmNlX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgKm9ucClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQqb25wID0gKHZhbCBcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpID09XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuK1x0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbitcdFx0XHRcdCAgICAgIGN0cmwpO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLFxuK1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuK1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuK3tcbitcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDQpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbitcdH07XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuK1x0dW5zaWduZWQgaW50IGR1dHlfcmVxO1xuK1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuK1x0dW5zaWduZWQgaW50IGR1dHk7XG4rXG4rXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuK1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiArIDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi9cbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4rXHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbitcdFx0XHRicmVhaztcbitcdCpjeWNsZXAgPSBjeWNsZTtcbitcbitcdGR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICpcbitcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuK1x0XHRpZiAoaSA9PSAwIHx8IGR1dHlfcmVxIFx1MDAzZT0gKGR1dHlzW2kgLSAxXSArIGR1dHlzW2ldKSAvIDIpIHtcbitcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTtcbitcdCpkdXR5cCA9IGR1dHk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXHR1bnNpZ25lZCBzaG9ydCBjeWNsZTtcbitcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbitcdGJvb2wgdXNlX2N5Y2xlO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbitcdFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbitcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpKyspXG4rXHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpIHtcbitcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbitcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbitcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1xuK1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4rXHRcdGNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSBcdTAwMjZcdTAwMjYgY3ljbGUgIT0gcHAtXHUwMDNlbGVkX2N5Y2xlO1xuK1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4rXHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4rXHRcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNO1xuK1x0XHRcdCAgICAgaSsrKSB7XG4rXHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRpZiAoKGNoYW5nZV9jeWNsZSBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfY3ljbGUpIHx8XG4rXHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbitcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHRcdH1cbitcdH1cbitcbitcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdGlmICh2YWwgIT0gY3RybCkge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4rXHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbitcdFx0WVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eSkge1xuK1x0ZGVmYXVsdDpcbitcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdGlmICh1c2VfY3ljbGUpIHtcbitcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcbitcdH1cbitcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfFxuK1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuK1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbitcdGVsc2VcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuK1x0aWYgKHVzZV9jeWNsZSlcbitcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuK1x0cHAtXHUwMDNlbGVkX2R1dHkgPSBkdXR5O1xuK1xuK1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbitcdCpvZmZwID0gY3ljbGUgLSAqb25wO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgbWFzaztcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tdID0ge1xuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbitcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTX0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRn0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfUlgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS30sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbitcdCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LFxuK307XG4rXG4rc3RhdGljIGJvb2xcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aWYgKCFmbGFncylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IG1hcC1cdTAwM2VmbGFncykgPT0gbWFwLVx1MDAzZWZsYWdzKSB7XG4rXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4re1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoKHZhbCBcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9XG4rXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4rXHRcdCpmbGFnc3AgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgYWRkciwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0KmZsYWdzcCA9IDA7XG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4rXHRcdFx0KmZsYWdzcCB8PSBtYXAtXHUwMDNlZmxhZ3M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBhZGRyO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdGludCByZXM7XG4rXG4rXHRjdHJsID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0Y3RybCB8PSBtYXAtXHUwMDNlbWFzaztcbitcdFx0XHRpZiAoIWZsYWdzKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmbGFncylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4rXG4rXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4rXHRpZiAoZ3JvdXAgPT0gMikge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdH1cbitcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4rXHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuK1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuK1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWRldjtcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXG4rXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbitcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4rXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbitcdGJvb2wgZm9yY2VfaGlnaDtcbitcdGJvb2wgZm9yY2VfbG93O1xuK1x0aW50IHBvbGFyaXR5O1xuK1x0dTMyIGdyb3VwO1xuK1x0Ym9vbCBvbjtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcInJlZ1wiLCBcdTAwMjZncm91cCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCIsIGdyb3VwLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWxvd1wiKTtcbitcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cIixcbitcdFx0XHRwb3J0LCBncm91cCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbitcbitcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuK1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4rXG4rXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4rXHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuK1x0ZGVmYXVsdDpcbitcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuK1x0XHRicmVhaztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbitcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbitcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4rXHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcIm5ldGRldlwiO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuKyNlbmRpZlxuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcIi0ldTolMDJkOiUwMnVcIixcbitcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbitcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4rXHRcdC5md25vZGUgPSBmd25vZGUsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKHBvbGFyaXR5KSB7XG4rXHRcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuK1xuK1x0XHQqaW52X21hc2twIHw9IGJpdDtcbitcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuK1x0XHRcdCppbnZfY3RybHAgfD0gYml0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdGJvb2wgaGFzX2xlZHMgPSBmYWxzZTtcbitcbitcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XG4rXHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0aWYgKGxlZCkge1xuK1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHRcdFx0aGFzX2xlZHMgPSB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19sZWRzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdGlmIChsZWQpIHtcbitcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRzX3NldHVwX3BvcnQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTMyICppbnZfbWFza3AsXG4rXHRcdCAgICAgICB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXM7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0aWYgKCFsZWRzX25wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwb3J0IFx1MDAzZT0gWVQ5MjFYX0xFRF9QT1JUX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJObyBMRURzIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LCBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXG4rXHRcdFx0XHQgICAgICAgaW52X21hc2twLCBpbnZfY3RybHApO1xuK1x0XHRpZiAocmVzKSB7XG4rXHRcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9MRURfUE9SVF9OVU07IHBvcnQrKylcbitcdFx0eXQ5MjF4X2xlZHNfcmVtb3ZlX3BvcnQocHJpdiwgcG9ydCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MzIgaW52X2N0cmwgPSAwO1xuK1x0dTMyIGludl9tYXNrID0gMDtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuK1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1xuK1x0XHRpZiAoIWRwLVx1MDAzZWRuKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cF9wb3J0KHByaXYsIHBvcnQsIFx1MDAyNmludl9tYXNrLCBcdTAwMjZpbnZfY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIkZhaWxlZCB0byBzZXR1cCBMRURzIGZvciBwb3J0ICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0IHBvcnQsIHJlcyk7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbitcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4rXHQgKi9cbitcdGlmIChpbnZfbWFzaykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4rXHRcdFx0XHRcdCAgICAgaW52X2N0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdGdvdG8gZW5kO1xuK1x0fVxuK1xuK1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuK1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbitcbitlbmQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRpZiAocmVzKSB7XG4rXHRcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbitcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxuQEAgLTAsMCArMSwxMjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9MRURTX0hcbisjZGVmaW5lIF9ZVF9MRURTX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcdFx0XHQweGQwMDAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTVx0XHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE3LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4rI2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KVx0XHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QXHRCSVQoMjcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzJcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzZcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXG4rI2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApXHRcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxOCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcdEdFTk1BU0soNCAqIChncnApICsgMTcsIDQgKiAoZ3JwKSArIDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTYpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXHRCSVQoMTMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXHRcdEJJVCgxMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFx0XHRCSVQoNylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVx0XHRCSVQoNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LXHRCSVQoMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1x0XHRHRU5NQVNLKDI1LCAyNClcdC8qIGRlbGF5PyAqL1xuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU0oeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgNSwgNiAqICgocG9ydCkgJSA1KSArIDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXHRcdDB4ZDAxYzRcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICsgKHBvcnQpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDUsIDYgKiAoZ3JwKSArIDIpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU5cdDY0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuK1xuKy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXHQoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKVxuK1xuK3N0cnVjdCB5dDkyMXhfcHJpdjtcbitcbitzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XG4rXHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuK1xuK1x0Ym9vbCB1c2VfY3ljbGU6MTtcbitcdGJvb2wgdXNlX2R1dHk6MTtcbit9O1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuK1xuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4rXG4rI2Vsc2VcbitcbitzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cbitcbitzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICsxLDE1NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbitcdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbitcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuK1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0KnZhbHAgPSB2YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbit7XG4rXHRpbnQgcmVzO1xuK1x0dTMyIHY7XG4rXHR1MzIgdTtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHUgPSB2O1xuK1x0dSBcdTAwMjY9IH5tYXNrO1xuK1x0dSB8PSB2YWw7XG4rXHRpZiAodSA9PSB2KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbitcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHR1IHw9IHZhbHNbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHUzMiB1ID0gdnNbaV07XG4rXG4rXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgKzEsODggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9TTUlfSFxuKyNkZWZpbmUgX1lUX1NNSV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbitcdFx0XHQgICB1MzIgdmFsKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4rfVxuK1xuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4rICpcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuK3tcbitcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4rXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuK1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbit9XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDoxOC42ODY2MzAyODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTk1NjIyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50IG9mIE1vdG9yY29tbSBZVDkyMTUgTEVEIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgbW92aW5nIHRoZSBkcml2ZXIgZmlsZSBhbmQgYWRkaW5nIGEgbmV3IGNvbmZpZyBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERTQSBzd2l0Y2hlcyBhcmUgdHlwaWNhbGx5IGNvbm5lY3RlZCB2aWEgTURJTywgU1BJLCBvciBJMkMsIGFuZCB0eXBpY2FsbHkgcmVxdWlyZSB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvcGVybHkgcmVzcG9uZCB0byBNRElPIHJlYWRzL3dyaXRlcy4gTGV0J3MgZGlnIGludG8gdGhlIGRyaXZlciBjb2RlIGl0c2VsZiAoYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCkgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHJlZ2lzdGVyZWQsIGJ1dCBnZW5lcmFsbHksIERTQSBkcml2ZXJzIGFyZSBtZWFudCBmb3IgKnBoeXNpY2FsKiBoYXJkd2FyZS4gSSBrbm93IHNvbWUgRFNBIGRyaXZlcnMgY2FuIGJlIGluc3RhbnRpYXRlZCB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIGR1bW15IE1ESU8gYnVzZXMsIGJ1dCB0aGF0J3Mgbm90IHRoZSBub3JtLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhlcmUgYW55IFFFTVUgZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIE1vdG9yY29tbSBjaGlwPyBQcm9iYWJseSBub3QuIENhbiB3ZSBmYWtlIGl0IHdpdGggYSBkdW1teSBNRElPIGJ1cz8gTWF5YmUsIGJ1dCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBtZWNoYW5pc20gZm9yIGZ1enppbmcgYXJiaXRyYXJ5IE1ESU8gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCwgb3Igd2UgaGF2ZSBhIHdheSB0byBpbmplY3QgTURJTyB0cmFmZmljIGRpcmVjdGx5LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHByb21wdC4gSXQncyBhc2tpbmcgaWYgdGhlIHBhdGNoIGlzICp3b3J0aCogZnV6emluZy4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnBoeXNpY2FsKiBQQ0llIGhhcmR3YXJlLCB3aGljaCB0aGlzIGlzbid0LCBidXQgd2hhdCBhYm91dCBNRElPLCBJMkMsIG9yIFNQSSBkZXZpY2VzPyBUaGUgdXN1YWwgY2FzZSBpcyB0aGF0IGlmIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgY2hpcCwgZXNwZWNpYWxseSBhIERTQSBzd2l0Y2gsIGFuZCBpdCBpc24ndCBlbXVsYXRlZCwgaXQncyBwcm9iYWJseSBub3QgcmVhY2hhYmxlLlxuXG5TbyBsZXQncyBjaGVjazogSXMgYHl0OTIxeGAgYWxyZWFkeSBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBJIGNhbid0IHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBgc3lzL2AgZGlyZWN0b3J5LiBMZXQgbWUgZXhwbG9yZSB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlIGlzIGFueSB3YXkgdG8gcmVhY2ggYHl0OTIxeF9sZWRzX3NldHVwYCBvciBgeXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmdgLiBUaGUgZHJpdmVyICppcyogcmVnaXN0ZXJlZCBhcyBhbiBNRElPIGRldmljZS4gVGhpcyBhbGwgcG9pbnRzIHRvd2FyZHMgYSBsb3cgcHJvYmFiaWxpdHkgb2YgYmVpbmcgZGlyZWN0bHkgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTEzNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE0OjI3LjI4MjI1NTExNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5MzAyNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9tZGlvX2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzcyOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzMtXFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzgxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3ODI6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTQ6MzEuODAxNTYzMjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMDUwNzEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNRElPIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7YCBsaW5lLiBSaWdodCwgdGhhdCdzIHRoZSBzdGFuZGFyZCB3YXkgdG8gcmVnaXN0ZXIgYW4gTURJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgdXN1YWwgc2V0dXAg4oCTIHRoZSBNRElPIGRldmljZXMsIGxpa2UgdGhpcyBgeXQ5MjF4YCBvbmUsIGFyZSBnZW5lcmFsbHkgcHJvYmVkIGluIGEgY291cGxlIG9mIHdheXM6IGVpdGhlciB0aGUgZGV2aWNlIHRyZWUgZGVmaW5lcyB0aGVtLCBhbmQgdGhlIE1ESU8gYnVzIGF1dG9tYXRpY2FsbHkgc2NhbnMsIG9yIHRoZXJlJ3MgYW4gSUQgbWF0Y2guIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBzdHVmZi5cblxuQnV0IGhlcmUncyB0aGUga2lja2VyLCBhbmQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEkgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yIHRvIHBsYXkgd2l0aCByaWdodCBub3cuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcHJvYmUgZnVuY3Rpb24sIHRoZSBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwuIEkgY2FuIGFsbCBidXQgZ3VhcmFudGVlIHRoYXQuIFdoeT8gQmVjYXVzZSB0aGVzZSB0aGluZ3MgKmFsd2F5cyogY2hlY2sgZm9yIHRoZSBwaHlzaWNhbCBwcmVzZW5jZSBvZiB0aGUgY2hpcCwgdXN1YWxseSBieSByZWFkaW5nIHNvbWUgc29ydCBvZiBjaGlwIElEIHJlZ2lzdGVyLiBObyBjaGlwLCBubyBJRCwgbm8gZGljZS5cblxuU28sIHdoZXJlIGRvZXMgdGhhdCBsZWF2ZSBtZT8gSSBuZWVkIHRvIGRpZyBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAgaXRzZWxmLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gc2VlICpleGFjdGx5KiBob3cgaXQncyBjaGVja2luZyBmb3IgdGhlIGRldmljZSwgd2hhdCByZWdpc3RlcnMgaXQncyByZWFkaW5nLCBhbmQgaG93IGl0J3MgZGV0ZXJtaW5pbmcgc3VjY2VzcyBvciBmYWlsdXJlLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IGFzc3VtcHRpb25zIGl0J3MgbWFraW5nIGFib3V0IHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTQ6MzYuMzAyMDczNTc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzE3NjgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X21kaW9fcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxNy1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE4OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzczOlxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTQ6NDEuNTMzODQ4MjQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMjQxMjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIEknbSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgcHJpbmNpcGxlcyBvZiBNRElPIGFuZCBkcml2ZXIgcHJvYmluZywgc28gSSdsbCBiZSBsb29raW5nIGZvciBzcGVjaWZpY3MgcmVsYXRlZCB0byB0aGUgWVQ5MjF4IGNoaXBzZXQgYW5kIGFueXRoaW5nIHVudXN1YWwgb3Igbm90ZXdvcnRoeSBpbiBpdHMgaW1wbGVtZW50YXRpb24uIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0bzpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IHl0OTIxeF9tZGlvX3Byb2JlKipcblxuKiAgICoqRW50cnkgUG9pbnQgYW5kIFB1cnBvc2U6KiogRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaW5kZWVkIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBzZWUgaXQgYXMgcGFydCBvZiB0aGUgZHJpdmVyJ3MgcmVnaXN0cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJlZCB0aGUgcHJvYmU7IGxpa2VseSwgdGhlIHN5c3RlbSBkZXRlY3RlZCBhIGRldmljZSBtYXRjaGluZyBhIGtub3duIElELCBhbmQgbm93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLlxuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBJJ2xsIGJlIGxvb2tpbmcgYXQgd2hhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBtZW1vcnkgZm9yIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpbmNsdWRlcyBhbnkgZGV2aWNlLXNwZWNpZmljIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlIE1ESU8gY29tbXVuaWNhdGlvbiBvciBQSFkgbWFuYWdlbWVudC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWdpZXMgYmVpbmcgdXNlZD8gQXJlIHRoZXJlIHBvdGVudGlhbCByZXNvdXJjZSBjb25mbGljdHMgdG8gbG9vayBvdXQgZm9yP1xuKiAgICoqTURJTyBJbml0aWFsaXphdGlvbjoqKiBUaGUgY3JpdGljYWwgcGFydC4gSG93IGlzIHRoZSBNRElPIGludGVyZmFjZSBpbml0aWFsaXplZD8gQXJlIHRoZXJlIHNwZWNpZmljIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBvciBjbG9jayBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgZm9yIHRoZSBZVDkyMXg/IEknbSBleHBlY3Rpbmcgc3RhbmRhcmQgTURJTyBpbml0aWFsaXphdGlvbiBzdGVwcywgcG90ZW50aWFsbHkgd2l0aCBhIHZlbmRvci1zcGVjaWZpYyB0d2lzdC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgTURJTyBjb250cm9sbGVyLlxuKiAgICoqUEhZIERldGVjdGlvbiBhbmQgQ29uZmlndXJhdGlvbjoqKiBJcyB0aGVyZSBQSFkgZGV0ZWN0aW9uIGludm9sdmVkIGhlcmUsIG9yIGlzIGl0IGFzc3VtZWQgYSBzcGVjaWZpYyBQSFkgaXMgY29ubmVjdGVkPyBIb3cgZG9lcyBpdCBoYW5kbGUgdmFyaW91cyBQSFkgdHlwZXM/IEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBzZXRzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBQSFksIGluY2x1ZGluZyBhbnkgcG93ZXItdXAgb3IgcmVzZXQgc2VxdWVuY2VzLiBXaGF0IGFib3V0IHRoZSBNRElPIGJ1cyBzcGVlZCwgYXJlIHRoZXJlIGFueSBzcGVlZCBhZGp1c3RtZW50cz9cbiogICAqKkVycm9yIEhhbmRsaW5nIGFuZCBSb2J1c3RuZXNzOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBXaGF0IGRvZXMgaXQgZG8gaWYgdGhlIGRldmljZSBpc24ndCByZXNwb25kaW5nLCBpZiB0aGVyZSBhcmUgTURJTyBlcnJvcnMsIG9yIGlmIHRoZSBQSFkgY29uZmlndXJhdGlvbiBmYWlscz8gQXJlIHRoZXJlIHJldHJ5IG1lY2hhbmlzbXM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJ2xsIGxvb2sgZm9yIGBwcmludGtgIGNhbGxzIGFuZCBvdGhlciBkZWJ1Z2dpbmcgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciByZXBvcnRpbmcuXG4qICAgKipEcml2ZXIgTW9kZWwgSW50ZWdyYXRpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYmluZGluZ3MgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbGlrZSBuZXR3b3JrIGludGVyZmFjZXMgb3IgdGhlIGRldmljZSB0cmVlPyBJJ2xsIGNoZWNrIGZvciB0aGUgdXNlIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCBkZXZpY2UgcHJpdmF0ZSBkYXRhLCBhbmQgb2YgY291cnNlIGFueSBuZXR3b3JrIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24uXG4qICAgKipQb3dlciBNYW5hZ2VtZW50OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlcmUgYW55IHBvd2VyLXVwIG9yIHBvd2VyLWRvd24gc2VxdWVuY2VzIG9yIGNhbGxiYWNrcyBkZWZpbmVkP1xuKiAgICoqQ29uY3VycmVuY3k6KiogQXJlIHRoZXJlIGFueSBjb25jdXJyZW5jeSBpc3N1ZXMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoPyBBcmUgdGhlcmUgYW55IGxvY2tzIGJlaW5nIHVzZWQgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBvciBoYXJkd2FyZSByZWdpc3RlcnM/XG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIHRoZSBNRElPIGludGVyZmFjZSBhbmQgUEhZLiBUaGlzIGluY2x1ZGVzIGhvdyBpdCBtYW5hZ2VzIGhhcmR3YXJlIHJlc291cmNlcywgZGV0ZWN0cyBhbmQgY29uZmlndXJlcyB0aGUgUEhZLCBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBwcm9jZXNzLiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBpcyBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBZVDkyMXggTURJTyBpbnRlcmZhY2UuIEkgd2lsbCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGZvciBhbnkgc3VidGxlIGFyZWFzLCB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA1OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE0OjQ2LjgzNjI2NTM0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzE4OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ3MTk6XFx0e1xcbjQ3MjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG40NzIxOlxcdFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XFxuNDcyMjpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghcHJpdilcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuNDczMDpcXHRcXHRpZiAoIW1kaW8pXFxuNDczMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bWRpby1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbjQ3MzQ6XFx0XFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuNDczNTpcXHRcXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuNDczNjpcXHRcXG40NzM3OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NzM4OlxcdFxcbjQ3Mzk6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX29wcyA9IFxcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xcbjQ3NDA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbjQ3NDM6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG40NzQ2OlxcdFxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuNDc0NzpcXHRcXHR9XFxuNDc0ODpcXHRcXG40NzQ5OlxcdFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IGRldjtcXG40NzUxOlxcdFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG40NzUzOlxcdFxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG40NzU0OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbjQ3NTU6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbjQ3NTY6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xcbjQ3NTc6XFx0XFx0ZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xcbjQ3NjA6XFx0XFxuNDc2MTpcXHRcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbjQ3NjI6XFx0XFxuNDc2MzpcXHRcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuNDc2NDpcXHR9XFxuNDc2NTpcXHRcXG40NzY2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbjQ3Njc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNDo0Ni44MzY4NTQ0NjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDA0ODMzOTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERTQSBTd2l0Y2ggUHJvYmUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGB5dDkyMXhfbWRpb19wcm9iZWAgZnVuY3Rpb27igKZpdCBzZWVtcyBhbGwgaXQncyBkb2luZyBpcyBjYWxsaW5nIGBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKWAuIFRoYXQncyBpdD8gSSB3YXMgZXhwZWN0aW5nIGl0IHRvIGhhbmRsZSB0aGUgaW5pdGlhbCBjaGlwIElEIHJlYWQgb3Igc29tZXRoaW5nLCBidXQgbm8sIHRoZSBwcm9iZSBpdHNlbGYgaXMgcmVtYXJrYWJseSB0aGluLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuXG5TbywgaWYgaXQncyBub3QgaGFwcGVuaW5nIGhlcmUsIHdoZXJlICppcyogdGhlIGluaXRpYWxpemF0aW9uPyBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBoYXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcuIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBlZmZlY3RpdmVseSBkZWxlZ2F0aW5nIHRoZSByZWFsIHdvcmsgdG8gdGhlIGBzZXR1cGAgZnVuY3Rpb24gd2l0aGluIHRoZSBzd2l0Y2ggb3BlcmF0aW9ucyBzdHJ1Y3R1cmUsIHJpZ2h0PyBJdCB3aWxsIGV2ZW50dWFsbHkgY2FsbCB0aGF0IGZ1bmN0aW9uLCBhbmQgKnRoYXQncyogd2hlcmUgdGhlIGFjdHVhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgSUQgcmV0cmlldmFsIHByb2JhYmx5IGhhcHBlbi5cblxuUmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgYHl0OTIxeF9kc2Ffc3dpdGNoX29wc2Agc3RydWN0dXJlIG5vdy4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGBzZXR1cGAgZnVuY3Rpb24gaXMgZG9pbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYzMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTU6NTAuODg1MTk5NDk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUyNDI0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9kc2Ffc3dpdGNoX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIxeF9waHlsaW5rX21hY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTk3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1OTg6c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU5OS1cXHQvKiBtaWIgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3MTg9c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzUzLVxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzU0OlxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NTUtXFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNTo1NS42Mzc2MzQ1MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMjYzOTMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERTQSBTd2l0Y2ggT3BlcmF0aW9ucyBNb2R1bGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB1cCwgSSBuZWVkIHRvIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGB5dDkyMXhfZHNhX3N3aXRjaF9vcHNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgb3BlcmF0aW9ucyBmb3IgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHl0OTIxeCBjaGlwc2V0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW46IHdoYXQgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGlzIG1vZHVsZSBwcm92aWRlcz8gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcG9ydCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucywgVkxBTiBtYW5pcHVsYXRpb24gY2FwYWJpbGl0aWVzLCBhbmQgYW55IHNwZWNpYWwgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIHl0OTIxeCBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBxdWlya3Mgb3Igb3B0aW1pemF0aW9ucyB0aGlzIG1vZHVsZSBlbXBsb3lzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgZnVuY3Rpb24gcHJvdG90eXBlcywgY29tbWVudHMsIGFuZCBhbnkgb2J2aW91cyBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldyBiZWZvcmUgSSBiZWdpbiBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIGEgc3Ryb25nIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjY1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTU6NTkuOTUwMjc3ODM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTk4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTk4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xcbjQ1OTk6XFx0XFx0LyogbWliICovXFxuNDYwMDpcXHRcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3N0cmluZ3MsXFxuNDYwMTpcXHRcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuNDYwMjpcXHRcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQsXFxuNDYwMzpcXHRcXHQuZ2V0X2V0aF9tYWNfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuNDYwNDpcXHRcXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyxcXG40NjA1OlxcdFxcdC5nZXRfcm1vbl9zdGF0c1xcdFxcdD0geXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyxcXG40NjA2OlxcdFxcdC5nZXRfc3RhdHM2NFxcdFxcdD0geXQ5MjF4X2RzYV9nZXRfc3RhdHM2NCxcXG40NjA3OlxcdFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzLFxcbjQ2MDg6XFx0XFx0LyogZWVlICovXFxuNDYwOTpcXHRcXHQuc3VwcG9ydF9lZWVcXHRcXHQ9IGRzYV9zdXBwb3J0c19lZWUsXFxuNDYxMDpcXHRcXHQuc2V0X21hY19lZWVcXHRcXHQ9IHl0OTIxeF9kc2Ffc2V0X21hY19lZWUsXFxuNDYxMTpcXHRcXHQvKiBtdHUgKi9cXG40NjEyOlxcdFxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IHl0OTIxeF9kc2FfcG9ydF9jaGFuZ2VfbXR1LFxcbjQ2MTM6XFx0XFx0LnBvcnRfbWF4X210dVxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X21heF9tdHUsXFxuNDYxNDpcXHRcXHQvKiByYXRlICovXFxuNDYxNTpcXHRcXHQucG9ydF9wb2xpY2VyX2RlbFxcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfZGVsLFxcbjQ2MTY6XFx0XFx0LnBvcnRfcG9saWNlcl9hZGRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2FkZCxcXG40NjE3OlxcdFxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfc2V0dXBfdGMsXFxuNDYxODpcXHRcXHQvKiBhY2wgKi9cXG40NjE5OlxcdFxcdC5jbHNfZmxvd2VyX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2RlbCxcXG40NjIwOlxcdFxcdC5jbHNfZmxvd2VyX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2FkZCxcXG40NjIxOlxcdFxcdC8qIGhzciAqL1xcbjQ2MjI6XFx0XFx0LnBvcnRfaHNyX2xlYXZlXFx0XFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2xlYXZlLFxcbjQ2MjM6XFx0XFx0LnBvcnRfaHNyX2pvaW5cXHRcXHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3Jfam9pbixcXG40NjI0OlxcdFxcdC8qIG1pcnJvciAqL1xcbjQ2MjU6XFx0XFx0LnBvcnRfbWlycm9yX2RlbFxcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9kZWwsXFxuNDYyNjpcXHRcXHQucG9ydF9taXJyb3JfYWRkXFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2FkZCxcXG40NjI3OlxcdFxcdC8qIGxhZyAqL1xcbjQ2Mjg6XFx0XFx0LnBvcnRfbGFnX2xlYXZlXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2xlYXZlLFxcbjQ2Mjk6XFx0XFx0LnBvcnRfbGFnX2pvaW5cXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfam9pbixcXG40NjMwOlxcdFxcdC8qIGZkYiAqL1xcbjQ2MzE6XFx0XFx0LnBvcnRfZmRiX2R1bXBcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZHVtcCxcXG40NjMyOlxcdFxcdC5wb3J0X2Zhc3RfYWdlXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmFzdF9hZ2UsXFxuNDYzMzpcXHRcXHQuc2V0X2FnZWluZ190aW1lXFx0PSB5dDkyMXhfZHNhX3NldF9hZ2VpbmdfdGltZSxcXG40NjM0OlxcdFxcdC5wb3J0X2ZkYl9kZWxcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZGVsLFxcbjQ2MzU6XFx0XFx0LnBvcnRfZmRiX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9hZGQsXFxuNDYzNjpcXHRcXHQucG9ydF9tZGJfZGVsXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2RlbCxcXG40NjM3OlxcdFxcdC5wb3J0X21kYl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfYWRkLFxcbjQ2Mzg6XFx0XFx0LyogdmxhbiAqL1xcbjQ2Mzk6XFx0XFx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcXHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG40NjQwOlxcdFxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9kZWwsXFxuNDY0MTpcXHRcXHQucG9ydF92bGFuX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fYWRkLFxcbjQ2NDI6XFx0XFx0LyogYnJpZGdlICovXFxuNDY0MzpcXHRcXHQucG9ydF9wcmVfYnJpZGdlX2ZsYWdzXFx0PSB5dDkyMXhfZHNhX3BvcnRfcHJlX2JyaWRnZV9mbGFncyxcXG40NjQ0OlxcdFxcdC5wb3J0X2JyaWRnZV9mbGFnc1xcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9mbGFncyxcXG40NjQ1OlxcdFxcdC5wb3J0X2JyaWRnZV9sZWF2ZVxcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9sZWF2ZSxcXG40NjQ2OlxcdFxcdC5wb3J0X2JyaWRnZV9qb2luXFx0PSB5dDkyMXhfZHNhX3BvcnRfYnJpZGdlX2pvaW4sXFxuNDY0NzpcXHRcXHQvKiBtc3QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTU6NTkuOTUwNjEzMTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzM0MjIwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUaGUgTWlzc2luZyBTZXR1cDogQSBCcmllZiBNb21lbnQgb2YgRGlzb3JpZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBkZWVwIGluIHRoaXMgd29ya2Zsb3csIEknbSB0aGlua2luZywgSeKAmW0gZ2V0dGluZyByZWFkeSB0byBleGVjdXRlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBhbmTigKYgaG9sZCBvbi4gU29tZXRoaW5nIGZlZWxzIG9mZi4gTXkgbWVudGFsIG1vZGVsIGlzIGV4cGVjdGluZyBhIHNwZWNpZmljIGZ1bmN0aW9uLCBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHRoYXQgSSd2ZSBkdWJiZWQgYHNldHVwYCwgdG8gYmUgcHJlc2VudC4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBkZXBlbmQuIEkgY2FuICpmZWVsKiBpdHMgYWJzZW5jZTsgdGhlIGFyY2hpdGVjdHVyZSBpbiBteSBoZWFkIGlzIHNsaWdodGx5IGphcnJlZC4gVGhlIGVsZWdhbmNlIG9mIHRoZSBwbGFubmVkIGZsb3cgaXMgbW9tZW50YXJpbHkgZGlzcnVwdGVkLiBXaGVyZSB0aGUgaGVsbCBkaWQgYHNldHVwYCBnbz8gSXQncyBsaWtlIHJlYWNoaW5nIGZvciBhIGNydWNpYWwgdG9vbCB0aGF0J3Mgc3VkZGVubHkgdmFuaXNoZWQgZnJvbSB0aGUgd29ya2JlbmNoLiBOb3cgSSBoYXZlIHRvIGJhY2t0cmFjayBhbmQgZmlndXJlIG91dCB3aGF0IGhhcHBlbmVkIHRvIG15IGBzZXR1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODUyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE2OjAzLjM4NDAzODA4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY0OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY0ODpcXHRcXHQucG9ydF9tc3Rfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbXN0X3N0YXRlX3NldCxcXG40NjQ5OlxcdFxcdC52bGFuX21zdGlfc2V0XFx0XFx0PSB5dDkyMXhfZHNhX3ZsYW5fbXN0aV9zZXQsXFxuNDY1MDpcXHRcXHQucG9ydF9zdHBfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfc3RwX3N0YXRlX3NldCxcXG40NjUxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY1MjpcXHRcXHQvKiBkY2IgKi9cXG40NjUzOlxcdFxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbjQ2NTQ6XFx0XFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXFxuNDY1NTpcXHRcXHQucG9ydF9nZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfYXBwdHJ1c3QsXFxuNDY1NjpcXHRcXHQucG9ydF9zZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfYXBwdHJ1c3QsXFxuNDY1NzpcXHQjZW5kaWZcXG40NjU4OlxcdFxcdC8qIHBvcnQgKi9cXG40NjU5OlxcdFxcdC5nZXRfdGFnX3Byb3RvY29sXFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXFxuNDY2MDpcXHRcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbjQ2NjE6XFx0XFx0LnBvcnRfc2V0dXBcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cCxcXG40NjYyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY2MzpcXHRcXHQvKiBkc2NwICovXFxuNDY2NDpcXHRcXHQucG9ydF9nZXRfZHNjcF9wcmlvXFx0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2RzY3BfcHJpbyxcXG40NjY1OlxcdFxcdC5wb3J0X2RlbF9kc2NwX3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9kZWxfZHNjcF9wcmlvLFxcbjQ2NjY6XFx0XFx0LnBvcnRfYWRkX2RzY3BfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXFxuNDY2NzpcXHQjZW5kaWZcXG40NjY4OlxcdFxcdC8qIGNoaXAgKi9cXG40NjY5OlxcdFxcdC5zZXR1cFxcdFxcdFxcdD0geXQ5MjF4X2RzYV9zZXR1cCxcXG40NjcwOlxcdH07XFxuNDY3MTpcXHRcXG40NjcyOlxcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG40NjczOlxcdHtcXG40Njc0OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XFxuNDY3NTpcXHRcXG40Njc2OlxcdFxcdGlmICghcHJpdilcXG40Njc3OlxcdFxcdFxcdHJldHVybjtcXG40Njc4OlxcdFxcbjQ2Nzk6XFx0XFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbjQ2ODA6XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ2ODM6XFx0e1xcbjQ2ODQ6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG40Njg1OlxcdFxcbjQ2ODY6XFx0XFx0aWYgKCFwcml2KVxcbjQ2ODc6XFx0XFx0XFx0cmV0dXJuO1xcbjQ2ODg6XFx0XFxuNDY4OTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NjkwOlxcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG40NjkxOlxcdCNlbmRpZlxcbjQ2OTI6XFx0XFxuNDY5MzpcXHRcXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbjQ2OTQ6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40Njk1OlxcdFxcbjQ2OTY6XFx0XFx0XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHAtXFx1MDAzZW1pYl9yZWFkKTtcXG40Njk3OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MDMuMzg0NDU3OTE5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzExNzc1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERTQSBTZXR1cCoqXG5cbkFscmlnaHQsIHNvIGB5dDkyMXhfZHNhX3NldHVwYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgc3RhcnRpbmcgd2l0aC4gVGltZSB0byBkaXNzZWN0IGl0LiBMZXQncyBzZWUgd2hhdCB0aGlzIGB5dDkyMXhfZHNhX3NldHVwYCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIERTQSBpbXBsZW1lbnRhdGlvbi4gSXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBpbml0aWFsaXphdGlvbiAtIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIGl0IGNhcmVmdWxseS4gTGV0J3MgcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA2MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MDcuNjE1NjM3ODY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYzNzMzMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9kc2Ffc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDQ5NT1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1MzYtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDUzNzpzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDU5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NjgtXFx0LyogY2hpcCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XFx0LnNldHVwXFx0XFx0XFx0PSB5dDkyMXhfZHNhX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NzAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MTIuNDc5Mzg2NTQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODk1ODU3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFNldHVwKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEknbSBkaXZpbmcgaW50byBgeXQ5MjF4X2RzYV9zZXR1cGAuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGEgc2NyaXB0IG9yIGNvbmZpZ3VyYXRpb24gZmlsZSByZWxhdGVkIHRvIHRoZSBEaWdpdGFsIFNpZ25hbCBBbmFseXplciAoRFNBKSwgc3BlY2lmaWNhbGx5IHRoZSB5dDkyMXguIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBjZXJ0YWluIGVsZW1lbnRzOiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgcG90ZW50aWFsbHkgc29tZSByZWdpc3RlciBzZXR0aW5ncywgY2FsaWJyYXRpb25zLCBhbmQgcG9zc2libHkgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBzZXR1cC4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgaWRlbnRpZnkga2V5IHNlY3Rpb25zIGxpa2U6IGRyaXZlci1zcGVjaWZpYyBzZWN0aW9ucywgZXJyb3IgaGFuZGxpbmcsIGRlZmF1bHQgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgdXNlci1jb25maWd1cmFibGUgcGFyYW1ldGVycy4gVW5kZXJzdGFuZGluZyB0aGUgc3RydWN0dXJlIG9mIHRoaXMgc2V0dXAgaXMgY3J1Y2lhbCBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nIEkgbWlnaHQgbmVlZCB0byBwZXJmb3JtIGRvd24gdGhlIGxpbmUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiB0aGlzIGlzIHBhcnQgb2YgYSBsYXJnZXIgZmlybXdhcmUgb3IgYXBwbGljYXRpb24gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MTUuODY4OTg2ODEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTM3OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuNDUzODpcXHR7XFxuNDUzOTpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuNDU0MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDU0MTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VvZl9ub2RlO1xcbjQ1NDI6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG40NTQzOlxcdFxcdGludCByZXM7XFxuNDU0NDpcXHRcXG40NTQ1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTQ2OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbjQ1NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0ODpcXHRcXG40NTQ5OlxcdFxcdGlmIChyZXMpXFxuNDU1MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NTE6XFx0XFxuNDU1MjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxcbjQ1NTM6XFx0XFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxcbjQ1NTQ6XFx0XFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXFxuNDU1NTpcXHRcXHQgKi9cXG40NTU2OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuNDU1NzpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTU4OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTU5OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTYwOlxcdFxcdFxcdGlmIChyZXMpXFxuNDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NjI6XFx0XFx0fVxcbjQ1NjM6XFx0XFxuNDU2NDpcXHRcXHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xcbjQ1NjU6XFx0XFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW8tZXh0ZXJuYWxcXFwiKTtcXG40NTY2OlxcdFxcdGlmIChjaGlsZCkge1xcbjQ1Njc6XFx0XFx0XFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xcbjQ1Njg6XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbjQ1Njk6XFx0XFx0XFx0aWYgKHJlcylcXG40NTcwOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuNDU3MTpcXHRcXG40NTcyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW50ZXN0ZWQgZXh0ZXJuYWwgbWRpbyBidXNcXFxcblxcXCIpO1xcbjQ1NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuNDU3NDpcXHRcXHR9XFxuNDU3NTpcXHRcXG40NTc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTc3OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xcbjQ1Nzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGlmIChyZXMpXFxuNDU4MTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1ODI6XFx0XFxuNDU4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NTg0OlxcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbjQ1ODU6XFx0XFx0aWYgKHJlcylcXG40NTg2OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MTUuODY5NTQ5OTQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODgxMDc2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHl0OTIxeF9jaGlwX3Jlc2V0YCBsaWtlbHkgaW52b2x2ZXMgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuLCB0aG91Z2gsIGlzIGhvdyB3ZSBjYW4gZXZlbiBoaXQgdGhpcyBjb2RlIHBhdGgsIGVzcGVjaWFsbHkgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIGhhcmR3YXJlIGlzbid0IGRpcmVjdGx5IGF2YWlsYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGlmIGl0J3MgYW4gTURJTyBkZXZpY2UsIGFuZCB3ZSAqZG9uJ3QqIGhhdmUgdGhlIGhhcmR3YXJlLCB0aGUgZnVuY3Rpb24gd2lsbCBqdXN0IGZhaWwuIEJ1dCwgd2FpdC4uLiBjb3VsZCBzeXprYWxsZXIgc29tZWhvdyBpbmplY3QgTURJTyB0cmFmZmljPyBObywgaXQgZG9lc24ndCBoYXZlIGEgKmdlbmVyaWMqIE1ESU8gZnV6emVyLiBJdCdzIG1vcmUgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cy5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBkZXZpY2UgdHJlZSBmdXp6aW5nPyBTeXprYWxsZXIncyBjZXJ0YWlubHkgZ290IHRoYXQgY2FwYWJpbGl0eSwgYnV0IHRoZSBkZXZpY2UgdHJlZSBwYXJzaW5nIGZvciB0aGlzIGRldmljZSBzZWVtcyB0byBiZSBoYW5kbGVkIGluIGB5dDkyMXhfZHNhX3NldHVwYCBhbmQgYHl0OTIxeF9sZWRzX3NldHVwYCwgcmlnaHQ/IElmIHRoZSBkZXZpY2UgZG9lc24ndCBwcm9iZSwgd2UncmUgc3R1Y2suIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHdlIHNpbXVsYXRlIGEgcHJvYmUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nP1xuXG5UaGUgbGlnaHRidWxiIGNsaWNrcyEgSWYgd2UgYWRkIGEgZGV2aWNlIHRyZWUgbm9kZSBmb3IgYSBgbW90b3Jjb21tLHl0OTIxNWAgZGV2aWNlIG9uIGEgZHVtbXkgTURJTyBidXMsIHNvbWV0aGluZyBsaWtlIGBmaXhlZC1tZGlvYCBvciBgbWRpby1tb2NrdXBgLCB0aGUgYHl0OTIxeF9tZGlvX3Byb2JlYCBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkLiBGb2xsb3dpbmcgdGhhdCwgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIHdpbGwgZ2V0IGNhbGxlZCwgd2hpY2ggKnRoZW4qIGNhbGxzIGB5dDkyMXhfZHNhX3NldHVwYC4gQW5kICp0aGVuKiwgZmluYWxseSwgdGhlIHRhcmdldDogYHl0OTIxeF9jaGlwX3Jlc2V0YC4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBwbGFuLiBUaW1lIHRvIGdvIGNoZWNrIG91dCBgeXQ5MjF4X2NoaXBfcmVzZXRgIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MjksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNjoyMi4xNTc2Njg2OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTg2NDk2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2NoaXBfcmVzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjkzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyOTQ6c3RhdGljIGludCB5dDkyMXhfY2hpcF9yZXNldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ1LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTQ2OlxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE2OjI1Ljg1NjMyNTk4OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgyMTc5NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBFeGFtaW5pbmcgYSBDaGlwIFJlc2V0IFNlcXVlbmNlKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBcInl0OTIxeF9jaGlwX3Jlc2V0XCIuLi4gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxpa2VseSByZWZlcnMgdG8gYSByZXNldCBzZXF1ZW5jZSwgbGlrZWx5IGZvciBhIHNwZWNpZmljIFN5c3RlbS1vbi1DaGlwIChTb0MpIG9yIGEgZGVkaWNhdGVkIGNvbXBvbmVudCBsYWJlbGVkIFwieXQ5MjF4XCIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBwcm9iYWJseSBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgYSBzY3JpcHQsIG9yIG1heWJlIGV2ZW4gZmlybXdhcmUgcmVsYXRlZCB0byB0aGUgZGV2aWNlJ3MgYm9vdCBwcm9jZXNzLiBUaGUgXCJyZXNldFwiIGltcGxpY2F0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbG93LWxldmVsIG9wZXJhdGlvbiBhZmZlY3RpbmcgaGFyZHdhcmUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgcmVzZXQgaXMgaW1wbGVtZW50ZWQsIGFuZCAqd2h5Ki4gV2hhdCB0cmlnZ2VycyBpdD8gV2hhdCBhcmUgdGhlIGNvbnNlcXVlbmNlcz8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBwb3dlci11cCBzdGF0ZXMsIGNsb2NrIGNvbmZpZ3VyYXRpb25zLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBtYXliZSBldmVuIHNvbWUga2luZCBvZiBoYXJkd2FyZSB3YXRjaGRvZyBpbnZvbHZlbWVudC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoaXAncyBwb3dlci1vbiBiZWhhdmlvciwgcG90ZW50aWFsIHJlY292ZXJ5IG1lY2hhbmlzbXMsIGFuZCBhbnkgc3BlY2lmaWMgZXJyb3ItaGFuZGxpbmcgcmVsYXRlZCB0byByZXNldCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTA5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MjkuMTM4NTA5MjYxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Mjk0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Mjk0OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyOTU6XFx0e1xcbjQyOTY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyOTc6XFx0XFx0dTE2IGV0aF9wX3RhZztcXG40Mjk4OlxcdFxcdHUzMiB2YWw7XFxuNDI5OTpcXHRcXHRpbnQgcmVzO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XFxuNDMwMjpcXHRcXHRpZiAocmVzKVxcbjQzMDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVzZXQgKi9cXG40MzA2OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XFxuNDMwNzpcXHRcXHRpZiAocmVzKVxcbjQzMDg6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xcbjQzMTE6XFx0XFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRcXHR2YWwgPSAwO1xcbjQzMTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG40MzE1OlxcdFxcdGlmIChyZXMpXFxuNDMxNjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMTc6XFx0XFxuNDMxODpcXHRcXHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXFxuNDMxOTpcXHRcXHQgKiBiZWZvcmUuXFxuNDMyMDpcXHRcXHQgKi9cXG40MzIxOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcXHUwMDI2dmFsKTtcXG40MzIyOlxcdFxcdGlmIChyZXMpXFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMjQ6XFx0XFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xcbjQzMjU6XFx0XFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG40MzI2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxcXG5cXFwiLCBldGhfcF90YWcsXFxuNDMyNzpcXHRcXHRcXHRcXHRFVEhfUF9ZVDkyMVgpO1xcbjQzMjg6XFx0XFx0XFx0LyogRGVzcGl0ZSBiZWluZyBwb3NzaWJsZSwgd2UgY2hvb3NlIG5vdCB0byBzZXQgQ1BVX1RBR19UUElELFxcbjQzMjk6XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gd2F5IGl0IGNhbiBiZSBkaWZmZXJlbnQgdW5sZXNzIHlvdSBoYXZlIHRoZVxcbjQzMzA6XFx0XFx0XFx0ICogd3JvbmcgY2hpcC5cXG40MzMxOlxcdFxcdFxcdCAqL1xcbjQzMzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDMzMzpcXHRcXHR9XFxuNDMzNDpcXHRcXG40MzM1OlxcdFxcdHJldHVybiAwO1xcbjQzMzY6XFx0fVxcbjQzMzc6XFx0XFxuNDMzODpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDMzOTpcXHR7XFxuNDM0MDpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDM0MTpcXHRcXHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xcbjQzNDI6XFx0XFx0dTMyIGN0cmxzWzJdO1xcbjQzNDM6XFx0XFx0dTMyIGN0cmw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA2OjE2OjI5LjEzODc4NTYyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM1NjEyODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBDaGlwIERldGVjdGlvbioqXG5cbk9rYXksIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgYWdlbmRhIGlzIGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZy4gU28sIEknbGwgc3RhcnQgYnkgcmVhZGluZyBpdHMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBjb3JlIGxvZ2ljLiBUaGlzIGlzIG15IGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0ncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgeXQ5MjF4YCBjaGlwLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBzdGVwcyBpbnZvbHZlZCBpbiBpdHMgZGV0ZWN0aW9uIHJvdXRpbmU6IGhvdyBpdCBpZGVudGlmaWVzIHRoZSBjaGlwLCB3aGF0IG1ldGhvZHMgaXQgdXNlcywgYW5kIHdoYXQgcHJlbGltaW5hcnkgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIEkgd2FudCB0byBidWlsZCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGluaXRpYWwgY2hpcCBoYW5kc2hha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNjozMi4wNzQ0MDEzMzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyMjc6XFx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyMjg6XFx0e1xcbjQyMjk6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyMzA6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xcbjQyMzE6XFx0XFx0dTggZXh0bW9kZTtcXG40MjMyOlxcdFxcdHUzMiBjaGlwaWQ7XFxuNDIzMzpcXHRcXHR1MzIgbWFqb3I7XFxuNDIzNDpcXHRcXHR1MzIgbW9kZTtcXG40MjM1OlxcdFxcdHUzMiB2YWw7XFxuNDIzNjpcXHRcXHRpbnQgcmVzO1xcbjQyMzc6XFx0XFxuNDIzODpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFxcdTAwMjZjaGlwaWQpO1xcbjQyMzk6XFx0XFx0aWYgKHJlcylcXG40MjQwOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI0MTpcXHRcXG40MjQyOlxcdFxcdG1ham9yID0gRklFTERfR0VUKFlUOTIxWF9DSElQX0lEX01BSk9SLCBjaGlwaWQpO1xcbjQyNDM6XFx0XFxuNDI0NDpcXHRcXHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXFx1MDAzZW5hbWU7IGluZm8rKylcXG40MjQ1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VtYWpvciA9PSBtYWpvcilcXG40MjQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNDc6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI0ODpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXFxcblxcXCIsIGNoaXBpZCk7XFxuNDI0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjUwOlxcdFxcdH1cXG40MjUxOlxcdFxcbjQyNTI6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFxcdTAwMjZtb2RlKTtcXG40MjUzOlxcdFxcdGlmIChyZXMpXFxuNDI1NDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTU6XFx0XFx0cmVzID0geXQ5MjF4X2VkYXRhX3JlYWQocHJpdiwgWVQ5MjFYX0VEQVRBX0VYVE1PREUsIFxcdTAwMjZleHRtb2RlKTtcXG40MjU2OlxcdFxcdGlmIChyZXMpXFxuNDI1NzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTg6XFx0XFxuNDI1OTpcXHRcXHRmb3IgKDsgaW5mby1cXHUwMDNlbmFtZTsgaW5mbysrKVxcbjQyNjA6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW1ham9yID09IG1ham9yIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZW1vZGUgPT0gbW9kZSBcXHUwMDI2XFx1MDAyNlxcbjQyNjE6XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWV4dG1vZGUgPT0gZXh0bW9kZSlcXG40MjYyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNjM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI2NDpcXHRcXHRcXHRkZXZfZXJyKGRldixcXG40MjY1OlxcdFxcdFxcdFxcdFxcXCJVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcXFxuXFxcIixcXG40MjY2OlxcdFxcdFxcdFxcdGNoaXBpZCwgbW9kZSwgZXh0bW9kZSk7XFxuNDI2NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjY4OlxcdFxcdH1cXG40MjY5OlxcdFxcbjQyNzA6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9TWVNfQ0xLLCBcXHUwMDI2dmFsKTtcXG40MjcxOlxcdFxcdGlmIChyZXMpXFxuNDI3MjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNzM6XFx0XFx0c3dpdGNoIChGSUVMRF9HRVQoWVQ5MjFYX1NZU19DTEtfU0VMX00sIHZhbCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWN5Y2xlX25zID0gaW5mby1cXHUwMDNlbWFqb3IgPT0gWVQ5MjE1X01BSk9SID8gOCA6IDY7XFxuNDI3NjpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MzIuMDc0Njg4MzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTQ2Njc2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiB0cmllcyB0byByZWFkIHRoZSBgWVQ5MjFYX0NISVBfSURgIHZpYSBNRElPLiBJZiBpdCBmYWlscyBvciBnZXRzIHRoZSB3cm9uZyBJRCwgaXQgaW1tZWRpYXRlbHkgZXJyb3JzIG91dCB3aXRoIGAtRU5PREVWYC4gVGhpcyBpcyBhIGhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgY2hpcCwgd2hpY2ggbWVhbnMgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwgaWYgdGhlIHJpZ2h0IGhhcmR3YXJlIGlzbid0IHByZXNlbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIG1vY2sgdGhlc2UgTURJTyByZWFkcz8gSSBkb24ndCB0aGluayBzbywgYW5kIGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBNRElPIG1vY2tpbmcgZnJhbWV3b3JrLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSBoaXQ/IEkgc2VlIHRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0LCBidXQgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciBpcyBzdGlsbCB0aWVkIHRvIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuIExvb2tpbmcgYmFjayBhdCB0aGUgcHJvbXB0J3MgY3JpdGVyaWE6IFwiQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBUaGlzICpkZWZpbml0ZWx5KiBmaXRzIHRoZSBiaWxsLiBJdCdzIGEgdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyIGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgTURJTywgd2hpY2ggaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCBtZWFucyBpdCdzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGVyZSdzIHplcm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjExLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6MzcuNDI5MzU4NjY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc4MjAzMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdG9yY29tbSx5dDkyMTVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTI0PXByb3BlcnRpZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI1LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6MjY6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTU5PWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTY3LSAgICAgICAgc3dpdGNoQDFkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Njg6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNjktICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjgtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDY6MTY6NDEuODA3NTcwNjY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjYyNTg0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIGRyaXZlciwgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgY29uZmlybWVkOiB0aGlzIGlzbid0IGdvaW5nIHRvIGJlIGZydWl0ZnVsIGZvciBmdXp6aW5nLiBUaGVyZSdzIG5vIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgY2hpcCwgYW5kIHRoYXQncyBhIG1ham9yIHJvYWRibG9jay4gVGhlIGRyaXZlciBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHBoeXNpY2FsIGhhcmR3YXJlIHN3aXRjaCwgYWNjZXNzZWQgdGhyb3VnaCBNRElPLiBJIGtub3cgaXQncyBnb2luZyB0byBmYWlsIHRvIHByb2JlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHJlcXVpcmVzIHJlYWRpbmcgdGhlIGNoaXAgSUQg4oCTIHNvbWV0aGluZyB0aGF0J3Mgc2ltcGx5IG5vdCBwb3NzaWJsZSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudC4gVGhlcmVmb3JlLCBhbnkgY29kZSBwYXRoIHdpdGhpbiB0aGlzIGRyaXZlciB3b3VsZCBiZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYnlwYXNzZXMgb3IgYWx0ZXJuYXRlIGVudHJ5IHBvaW50cy4gUmlnaHQsIHRoZSBwYXRjaCBhZGRzIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgYW5kIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jYC4gVHJhY2luZyB0aGUgY2FsbHMsIEkgc2VlIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCwgd2hpY2ggdWx0aW1hdGVseSBvcmlnaW5hdGVzIGZyb20gYHl0OTIxeF9tZGlvX3Byb2JlYC4gQWhhISBgeXQ5MjF4X21kaW9fcHJvYmVgIGlzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIE1ESU8gZHJpdmVyLiBTaW5jZSB0aGUgTURJTyBkcml2ZXIgd29uJ3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgdGhlIGhhcmR3YXJlIGFuZCBpdHMgYXNzb2NpYXRlZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiwgYWxsIHRoZSBMRUQgc2V0dXAgYW5kIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5FdmVuIGlmLCBieSBzb21lIG1pcmFjbGUsIHdlIGNvdWxkIGJ5cGFzcyB0aGUgcHJvYmUgc29tZWhvdywgdGhlIExFRCBjb250cm9sIGZ1bmN0aW9ucyByZWx5IG9uIHdyaXRpbmcgdG8gTURJTyByZWdpc3RlcnMuIFRob3NlIHdyaXRlcyB3b3VsZCBqdXN0IGZhaWwgb3IgZG8gbm90aGluZywgcmVuZGVyaW5nIGFueSBmdXp6aW5nIGF0dGVtcHRzIGNvbXBsZXRlbHkgdXNlbGVzcy4gSXQncyB1bmVxdWl2b2NhbGx5IGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBzbyBmdXp6aW5nIGluIFFFTVUgaXMgYSBub24tc3RhcnRlci5cblxuSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLiBJdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYyMiwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNjoxNjo0OS41MzM4MzM3NTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciAoTW90b3Jjb21tIFlUOTIxNSkgY29ubmVjdGVkIHZpYSBNRElPLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgYSBzcGVjaWZpYyBjaGlwIElEIGR1cmluZyBpbml0aWFsaXphdGlvbikgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIHZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciAoTW90b3Jjb21tIFlUOTIxNSkgY29ubmVjdGVkIHZpYSBNRElPLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgYSBzcGVjaWZpYyBjaGlwIElEIGR1cmluZyBpbml0aWFsaXphdGlvbikgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj8w5n[1] Phase: Running StartedAt: 2026-07-27 06:17:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj8w5n[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 06:17:04 +0000 UTC FinishedAt: 2026-07-27 06:17:28 +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,}