Name: series-workflow59cnb Phase: Succeeded StartedAt: 2026-07-03 00:15:07 +0000 UTC FinishedAt: 2026-07-03 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[0] Phase: Succeeded StartedAt: 2026-07-03 00:15:07 +0000 UTC FinishedAt: 2026-07-03 00:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 00:15:07 +0000 UTC FinishedAt: 2026-07-03 00:27:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_NET_SMALL_RTNL", "BAREUDP", "IPVLAN", "IPVTAP", "VETH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_NET_SMALL_RTNL", "BAREUDP", "IPVLAN", "IPVTAP", "VETH" ], "series_id": "38748afc-2bf4-4bf5-9a26-a3d7a5923f6f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "unregister_netdevice_queue_net", "unregister_netdevice_many_net", "unregister_netdevice_queue_many_net", "rtnl_net_work_func", "bareudp_dellink", "__bareudp_dellink", "ipvlan_link_delete", "__ipvlan_link_delete", "ipvtap_dellink", "__ipvtap_dellink", "veth_dellink", "default_device_exit_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "a8a0740d-fdec-4a20-9aa5-7cb955707913" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX05FVF9TTUFMTF9SVE5MJiMzNDssCiAgICAmIzM0O0JBUkVVRFAmIzM0OywKICAgICYjMzQ7SVBWTEFOJiMzNDssCiAgICAmIzM0O0lQVlRBUCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3J0bmxfbmV0X3dvcmtfZnVuYyYjMzQ7LAogICAgJiMzNDtiYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19iYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7aXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O19faXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O2lwdnRhcF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O19faXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7dmV0aF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O2RlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIHVucmVnaXN0ZXJpbmcgbmV0d29yayBkZXZpY2VzIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMsIGFkZGluZyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHN1cHBvcnQgKENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTCkuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyBzZXZlcmFsIHZpcnR1YWwgbmV0d29yayBkcml2ZXJzIChiYXJldWRwLCBpcHZsYW4sIGlwdnRhcCwgdmV0aCkgdG8gdXNlIHRoZSBuZXcgbG9ja2luZyBhbmQgdW5yZWdpc3RyYXRpb24gQVBJcy4gVGhpcyBpbnZvbHZlcyBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgbmV0d29yayBkZXZpY2VzLCB3aGljaCBpcyBoaWdobHkgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1OGQ0MGE5NjYyNzExY2JiNjY0ZTQwMGE5MzYwZTcwZDY4M2YyMGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwMDoyNjozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iYXJldWRwLmMgYi9kcml2ZXJzL25ldC9iYXJldWRwLmNcbmluZGV4IDVlZjg0MWM4NTUyNjk3Li5jM2I1ZWQ1MmQ4Nzc4OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYmFyZXVkcC5jXG5AQCAtMzYsNiAmIzQzOzM2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBiYXJldWRwX25ldF9pZDtcbiBcbiBzdHJ1Y3QgYmFyZXVkcF9uZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgYmFyZXVkcF9saXN0O1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJhcmV1ZHBfY29uZiB7XG5AQCAtNjM2LDEwICYjNDM7NjM3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHBfZmluZF9kZXYoc3RydWN0IGJhcmV1ZHBfbmV0ICpibixcbiB7XG4gXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAsICp0ID0gTlVMTDtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmFyZXVkcCwgXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0LCBuZXh0KSB7XG4gXHRcdGlmIChjb25mLVx1MDAzZXBvcnQgPT0gYmFyZXVkcC1cdTAwM2Vwb3J0KVxuIFx0XHRcdHQgPSBiYXJldWRwO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Ym4tXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0cmV0dXJuIHQ7XG4gfVxuIFxuQEAgLTY3NSw3ICYjNDM7NjgxLDEwIEBAIHN0YXRpYyBpbnQgYmFyZXVkcF9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2YmFyZXVkcC1cdTAwM2VuZXh0LCBcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjkyLDEyICYjNDM7NzAxLDI2IEBAIHN0YXRpYyBpbnQgYmFyZXVkcF9saW5rX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNmJhcmV1ZHAtXHUwMDNlbmV4dCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBiYXJldWRwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdHN0cnVjdCBiYXJldWRwX25ldCAqYm47XG4gXG4tXHRsaXN0X2RlbChcdTAwMjZiYXJldWRwLVx1MDAzZW5leHQpO1xuLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbiYjNDM7XHRibiA9IG5ldF9nZW5lcmljKGJhcmV1ZHAtXHUwMDNlbmV0LCBiYXJldWRwX25ldF9pZCk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Ym4tXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmJhcmV1ZHAtXHUwMDNlbmV4dCkpXG4mIzQzO1x0XHRfX2JhcmV1ZHBfZGVsbGluayhkZXZfbmV0KGRldiksIGRldiwgaGVhZCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTc3Niw2ICYjNDM7Nzk5LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IGJhcmV1ZHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0c3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0KTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC03ODUsMTMgJiM0Mzs4MTAsMjUgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBiYXJldWRwX2V4aXRfcnRubF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpO1xuIFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCAqbmV4dDtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCBcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QsIG5leHQpXG4tXHRcdGJhcmV1ZHBfZGVsbGluayhiYXJldWRwLVx1MDAzZWRldiwgZGV2X2tpbGxfbGlzdCk7XG4mIzQzO1x0XHRfX2JhcmV1ZHBfZGVsbGluayhuZXQsIGJhcmV1ZHAtXHUwMDNlZGV2LCBkZXZfa2lsbF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0KSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYmFyZXVkcF9uZXRfb3BzID0ge1xuIFx0LmluaXQgPSBiYXJldWRwX2luaXRfbmV0LFxuIFx0LmV4aXRfcnRubCA9IGJhcmV1ZHBfZXhpdF9ydG5sX25ldCxcbiYjNDM7XHQuZXhpdCA9IGJhcmV1ZHBfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNmJhcmV1ZHBfbmV0X2lkLFxuIFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJhcmV1ZHBfbmV0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaCBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaFxuaW5kZXggODBmODRmYzg3MDA4YjMuLjhkMDVhZDQ4MDQzOGZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmhcbkBAIC02OSw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgaXB2bF9kZXYge1xuIFx0REVDTEFSRV9CSVRNQVAobWFjX2ZpbHRlcnMsIElQVkxBTl9NQUNfRklMVEVSX1NJWkUpO1xuIFx0bmV0ZGV2X2ZlYXR1cmVzX3RcdHNmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4mIzQzO1x0Ym9vbFx0XHRcdGR5aW5nO1xuIH07XG4gXG4gc3RydWN0IGlwdmxfYWRkciB7XG5AQCAtOTEsMTIgJiM0Mzs5MiwxMyBAQCBzdHJ1Y3QgaXB2bF9wb3J0IHtcbiBcdHN0cnVjdCBobGlzdF9oZWFkXHRobGhlYWRbSVBWTEFOX0hBU0hfU0laRV07XG4gXHRzcGlubG9ja190XHRcdGFkZHJzX2xvY2s7IC8qIGd1YXJkcyBoYXNoLXRhYmxlIGFuZCBhZGRycyAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aXB2bGFucztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0cG5vZGVzX2xvY2s7XG4gXHR1MTZcdFx0XHRtb2RlO1xuIFx0dTE2XHRcdFx0ZmxhZ3M7XG4gXHR1MTZcdFx0XHRkZXZfaWRfc3RhcnQ7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdxO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0YmFja2xvZztcbi1cdGludFx0XHRcdGNvdW50O1xuJiM0MztcdHJlZmNvdW50X3RcdFx0Y291bnQ7XG4gXHRzdHJ1Y3QgaWRhXHRcdGlkYTtcbiBcdG5ldGRldmljZV90cmFja2VyXHRkZXZfdHJhY2tlcjtcbiB9O1xuQEAgLTE2OCw3ICYjNDM7MTcwLDggQEAgdm9pZCBpcHZsYW5fY291bnRfcngoY29uc3Qgc3RydWN0IGlwdmxfZGV2ICppcHZsYW4sXG4gXHRcdCAgICAgdW5zaWduZWQgaW50IGxlbiwgYm9vbCBzdWNjZXNzLCBib29sIG1jYXN0KTtcbiBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4gXHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLXZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuJiM0Mzt2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiB2b2lkIGlwdmxhbl9saW5rX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBpcHZsYW5fbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTtcbiAjaWZkZWYgQ09ORklHX0lQVkxBTl9MM1NcbkBAIC0yMDcsNCAmIzQzOzIxMCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRpZl9pc19pcHZsYW5fcG9ydChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gaXB2bGFuX2hhbmRsZV9mcmFtZTtcbiB9XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXG4mIzQzO2V4dGVybiB2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjZW5kaWYgLyogX19JUFZMQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcbmluZGV4IGVkNDY0MzlhOWY0ZWIxLi5lZTQ2YTU1ZjczZDE0YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uY1xuQEAgLTcsNiAmIzQzOzcsMTIgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpcHZsYW4uaFwmIzM0O1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWVEFQKVxuJiM0Mzt2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiYjNDM7RVhQT1JUX1NZTUJPTChfX2lwdnRhcF9kZWxsaW5rX3B0cik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbkBAIC0xNiw2ICYjNDM7MjIsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxuIFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcdGlmIChwb3J0LVx1MDAzZW1vZGUgIT0gbnZhbCkge1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXB2bGFuLCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XG4gXHRcdFx0ZmxhZ3MgPSBpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzO1xuIFx0XHRcdGlmIChudmFsID09IElQVkxBTl9NT0RFX0wzIHx8IG52YWwgPT0gSVBWTEFOX01PREVfTDNTKSB7XG5AQCAtNDAsNiAmIzQzOzQ4LDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCxcbiBcdFx0XHRpcHZsYW5fbDNzX3VucmVnaXN0ZXIocG9ydCk7XG4gXHRcdH1cbiBcdFx0cG9ydC1cdTAwM2Vtb2RlID0gbnZhbDtcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cG9ydC1cdTAwM2Vwbm9kZXNfbG9jayk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC01Niw2ICYjNDM7NjYsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxuIFx0XHRcdFx0XHQgTlVMTCk7XG4gXHR9XG4gXG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuJiM0MztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTc2LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZwb3J0LVx1MDAzZWhsaGVhZFtpZHhdKTtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlYWRkcnNfbG9jayk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cG9ydC1cdTAwM2ViYWNrbG9nKTtcbiBcdElOSVRfV09SSyhcdTAwMjZwb3J0LVx1MDAzZXdxLCBpcHZsYW5fcHJvY2Vzc19tdWx0aWNhc3QpO1xuIFx0aWRhX2luaXQoXHUwMDI2cG9ydC1cdTAwM2VpZGEpO1xuQEAgLTg2LDYgJiM0Mzs5OSw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZwb3J0LVx1MDAzZWRldl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnI6XG5AQCAtOTMsMTYgJiM0MzsxMDcsMTggQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0KVxuIHtcbi1cdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cG9ydC1cdTAwM2VkZXZfdHJhY2tlcik7XG4gXHRpZiAocG9ydC1cdTAwM2Vtb2RlID09IElQVkxBTl9NT0RFX0wzUylcbiBcdFx0aXB2bGFuX2wzc191bnJlZ2lzdGVyKHBvcnQpO1xuJiM0MztcbiBcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cG9ydC1cdTAwM2V3cSk7XG4mIzQzO1x0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnBvcnQtXHUwMDNlZGV2X3RyYWNrZXIpO1xuJiM0MztcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZwb3J0LVx1MDAzZWJhY2tsb2cpKSAhPSBOVUxMKSB7XG4gXHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTExMSw2ICYjNDM7MTI3LDI3IEBAIHN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGtmcmVlKHBvcnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX3BvcnRfcHV0KHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBvcnQtXHUwMDNlY291bnQpKVxuJiM0MztcdFx0aXB2bGFuX3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpcHZsX3BvcnQgKmlwdmxhbl9wb3J0X2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkge1xuJiM0MztcdFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9yY3UoZGV2KTtcbiYjNDM7XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnBvcnQtXHUwMDNlY291bnQpKVxuJiM0MztcdFx0XHRwb3J0ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwb3J0O1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgSVBWTEFOX0FMV0FZU19PTl9PRkxPQURTIFxcXG4gXHQoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IFxcXG4gXHQgTkVUSUZfRl9HU09fUk9CVVNUIHwgTkVUSUZfRl9HU09fU09GVFdBUkUgfCBORVRJRl9GX0dTT19FTkNBUF9BTEwpXG5AQCAtMTUzLDMwICYjNDM7MTkwLDQ1IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmICghaXB2bGFuLVx1MDAzZXBjcHVfc3RhdHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdG5ldGRldl9sb2NrKHBoeV9kZXYpO1xuJiM0MztcbiBcdGlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQocGh5X2RldikpIHtcbiBcdFx0ZXJyID0gaXB2bGFuX3BvcnRfY3JlYXRlKHBoeV9kZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdG5ldGRldl91bmxvY2socGh5X2Rldik7XG4gXHRcdFx0ZnJlZV9wZXJjcHUoaXB2bGFuLVx1MDAzZXBjcHVfc3RhdHMpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiYjNDM7XHRcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcbiYjNDM7XHRcdHJlZmNvdW50X3NldChcdTAwMjZwb3J0LVx1MDAzZWNvdW50LCAxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuJiM0MztcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBvcnQtXHUwMDNlY291bnQpO1xuIFx0fVxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuLVx0cG9ydC1cdTAwM2Vjb3VudCAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcbiYjNDM7XG4mIzQzO1x0aXB2bGFuLVx1MDAzZXBvcnQgPSBwb3J0O1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcHZsYW5fdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwdmxfZGV2ICppcHZsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2Rldjtcbi1cdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQ7XG4mIzQzO1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXY7XG4gXG4gXHRmcmVlX3BlcmNwdShpcHZsYW4tXHUwMDNlcGNwdV9zdGF0cyk7XG4gXG4tXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XG4tXHRwb3J0LVx1MDAzZWNvdW50IC09IDE7XG4tXHRpZiAoIXBvcnQtXHUwMDNlY291bnQpXG4tXHRcdGlwdmxhbl9wb3J0X2Rlc3Ryb3kocG9ydC1cdTAwM2VkZXYpO1xuJiM0MztcdHBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2RldjtcbiYjNDM7XHRuZXRkZXZfaG9sZChwaHlfZGV2LCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0bmV0ZGV2X2xvY2socGh5X2Rldik7XG4mIzQzO1xuJiM0MztcdGlwdmxhbl9wb3J0X3B1dChpcHZsYW4tXHUwMDNlcG9ydCk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl91bmxvY2socGh5X2Rldik7XG4mIzQzO1x0bmV0ZGV2X3B1dChwaHlfZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaXB2bGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC01OTQsOSAmIzQzOzY0Niw3IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQvKiBpcHZsYW5faW5pdCgpIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgcG9ydCwgaWYgcmVxdWlyZWQgKi9cbi1cdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcbi1cdGlwdmxhbi1cdTAwM2Vwb3J0ID0gcG9ydDtcbiYjNDM7XHRwb3J0ID0gaXB2bGFuLVx1MDAzZXBvcnQ7XG4gXG4gXHQvKiBJZiB0aGUgcG9ydC1pZCBiYXNlIGlzIGF0IHRoZSBNQVggdmFsdWUsIHRoZW4gd3JhcCBpdCBhcm91bmQgYW5kXG4gXHQgKiBiZWdpbiBmcm9tIDB4MSBhZ2Fpbi4gVGhpcyBtYXkgYmUgZHVlIHRvIGEgYnVzeSBzeXN0ZW0gd2hlcmUgbG90c1xuQEAgLTYzOSw3ICYjNDM7Njg5LDEwIEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gdW5saW5rX25ldGRldjtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuIFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2aXB2bGFuLVx1MDAzZXBub2RlLCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XG4gXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwaHlfZGV2LCBkZXYpO1xuIFx0cmV0dXJuIDA7XG4gXG5AQCAtNjUzLDcgJiM0Mzs3MDYsOCBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlwdmxhbl9saW5rX25ldyk7XG4gXG4tdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7dm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaXB2bF9hZGRyICphZGRyLCAqbmV4dDtcbkBAIC02NjgsMTAgJiM0Mzs3MjIsMjAgQEAgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiBcbiBcdGlkYV9mcmVlKFx1MDAyNmlwdmxhbi1cdTAwM2Vwb3J0LVx1MDAzZWlkYSwgZGV2LVx1MDAzZWRldl9pZCk7XG4gXHRsaXN0X2RlbF9yY3UoXHUwMDI2aXB2bGFuLVx1MDAzZXBub2RlKTtcbi1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbiBcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi1cdTAwM2VwaHlfZGV2LCBkZXYpO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19kZWxldGUpO1xuJiM0MztFWFBPUlRfU1lNQk9MKF9faXB2bGFuX2xpbmtfZGVsZXRlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdmxfZGV2ICppcHZsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlwdmxhbi1cdTAwM2Vwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XHRpZiAoIWlwdmxhbi1cdTAwM2VkeWluZylcbiYjNDM7XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2aXB2bGFuLVx1MDAzZXBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuJiM0Mzt9XG4gXG4gdm9pZCBpcHZsYW5fbGlua19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbkBAIC03MjksMTQgJiM0Mzs3OTMsMTkgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuLCAqbmV4dDtcbiYjNDM7XHRpbnQgZXJyLCByZXQgPSBOT1RJRllfRE9ORTtcbiBcdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQ7XG4gXHRMSVNUX0hFQUQobHN0X2tpbGwpO1xuLVx0aW50IGVycjtcbiBcbi1cdGlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSlcbi1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdGlmIChldmVudCA9PSBORVRERVZfUFJFQ0hBTkdFVVBQRVIgfHxcbiYjNDM7XHQgICAgZXZlbnQgPT0gTkVUREVWX0NIQU5HRVVQUEVSKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xuJiM0MztcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXQoZGV2KTtcbiYjNDM7XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuIFx0Y2FzZSBORVRERVZfVVA6XG5AQCAtNzYwLDE2ICYjNDM7ODI5LDI2IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcdFx0XHRpcHZsYW5fbWlncmF0ZV9sM3NfaG9vayhvbGRuZXQsIG5ld25ldCk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbiYjNDM7XHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOiB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4mIzQzO1xuIFx0XHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORylcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlwdmxhbiwgbmV4dCwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zLCBwbm9kZSlcbi1cdFx0XHRpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNlZGVsbGluayhpcHZsYW4tXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmxzdF9raWxsKTtcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcHZsYW4sIG5leHQsIFx1MDAyNnBvcnQtXHUwMDNlaXB2bGFucywgcG5vZGUpIHtcbiYjNDM7XHRcdFx0aXB2bGFuLVx1MDAzZWR5aW5nID0gdHJ1ZTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXG4mIzQzO1x0XHRcdGlmIChpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgIT0gXHUwMDI2aXB2bGFuX2xpbmtfb3BzKVxuJiM0MztcdFx0XHRcdF9faXB2dGFwX2RlbGxpbmtfcHRyKG5ldCwgaXB2bGFuLVx1MDAzZWRldiwgXHUwMDI2bHN0X2tpbGwpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVx1MDAzZWRldiwgXHUwMDI2bHN0X2tpbGwpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsc3Rfa2lsbCk7XG4gXHRcdGJyZWFrO1xuLVxuJiM0MztcdH1cbiBcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zLCBwbm9kZSkge1xuIFx0XHRcdG5ldGlmX2luaGVyaXRfdHNvX21heChpcHZsYW4tXHUwMDNlZGV2LCBkZXYpO1xuQEAgLTc4OCw4ICYjNDM7ODY3LDEwIEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcdFx0XHRlcnIgPSBuZXRpZl9wcmVfY2hhbmdlYWRkcl9ub3RpZnkoaXB2bGFuLVx1MDAzZWRldixcbiBcdFx0XHRcdFx0XHRcdCAgcHJlY2hhZGRyX2luZm8tXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdFx0XHQgIGV4dGFjayk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbkBAIC04MDIsNyAmIzQzOzg4Myw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcbiBcdGNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRTpcbiBcdFx0LyogRm9yYmlkIHVuZGVybHlpbmcgZGV2aWNlIHRvIGNoYW5nZSBpdHMgdHlwZS4gKi9cbi1cdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4mIzQzO1x0XHRyZXQgPSBOT1RJRllfQkFEO1xuJiM0MztcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6XG4gXHRjYXNlIE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSOlxuQEAgLTgxMCw3ICYjNDM7ODkyLDEyIEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpcHZsYW4sIFx1MDAyNnBvcnQtXHUwMDNlaXB2bGFucywgcG5vZGUpXG4gXHRcdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKGV2ZW50LCBpcHZsYW4tXHUwMDNlZGV2KTtcbiBcdH1cbi1cdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpcHZsYW5fcG9ydF9wdXQocG9ydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIHRoZSBjYWxsZXIgbXVzdCBoZWxkIHRoZSBhZGRycyBsb2NrICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jXG5pbmRleCAyZDZiYmRkZDFlZGQ1MS4uNjZjOTQ5ZDk0MjYxMDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuY1xuQEAgLTEwOSwxNCAmIzQzOzEwOSwyNiBAQCBzdGF0aWMgaW50IGlwdnRhcF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgX19pcHZ0YXBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpO1xuJiM0MztcdHRhcF9kZWxfcXVldWVzKFx1MDAyNnZsYW50YXAtXHUwMDNldGFwKTtcbiYjNDM7XHRfX2lwdmxhbl9saW5rX2RlbGV0ZShuZXQsIGRldiwgaGVhZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbi1cdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbnRhcCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IHZsYW50YXAtXHUwMDNldmxhbi5wb3J0O1xuIFxuLVx0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpO1xuLVx0dGFwX2RlbF9xdWV1ZXMoXHUwMDI2dmxhbi1cdTAwM2V0YXApO1xuLVx0aXB2bGFuX2xpbmtfZGVsZXRlKGRldiwgaGVhZCk7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XHRpZiAoIXZsYW50YXAtXHUwMDNldmxhbi5keWluZylcbiYjNDM7XHRcdF9faXB2dGFwX2RlbGxpbmsoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2dGFwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtMTk4LDYgJiM0MzsyMTAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpcHZ0YXBfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0X19pcHZ0YXBfZGVsbGlua19wdHIgPSBfX2lwdnRhcF9kZWxsaW5rO1xuJiM0MztcbiBcdGVyciA9IHRhcF9jcmVhdGVfY2RldihcdTAwMjZpcHZ0YXBfY2RldiwgXHUwMDI2aXB2dGFwX21ham9yLCBcJiMzNDtpcHZ0YXBcJiMzNDssXG4gXHRcdFx0ICAgICAgVEhJU19NT0RVTEUpO1xuIFx0aWYgKGVycilcbkBAIC0yMjQsNiAmIzQzOzIzOCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXG4gb3V0MjpcbiBcdHRhcF9kZXN0cm95X2NkZXYoaXB2dGFwX21ham9yLCBcdTAwMjZpcHZ0YXBfY2Rldik7XG4gb3V0MTpcbiYjNDM7XHRfX2lwdnRhcF9kZWxsaW5rX3B0ciA9IE5VTEw7XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gbW9kdWxlX2luaXQoaXB2dGFwX2luaXQpO1xuQEAgLTIzNCw2ICYjNDM7MjUwLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGlwdnRhcF9leGl0KHZvaWQpXG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcHZ0YXBfbm90aWZpZXJfYmxvY2spO1xuIFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZpcHZ0YXBfY2xhc3MpO1xuIFx0dGFwX2Rlc3Ryb3lfY2RldihpcHZ0YXBfbWFqb3IsIFx1MDAyNmlwdnRhcF9jZGV2KTtcbiYjNDM7XHRfX2lwdnRhcF9kZWxsaW5rX3B0ciA9IE5VTEw7XG4gfVxuIG1vZHVsZV9leGl0KGlwdnRhcF9leGl0KTtcbiBNT0RVTEVfQUxJQVNfUlROTF9MSU5LKFwmIzM0O2lwdnRhcFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5pbmRleCAxYzUxNDIxNDkxNzUzNi4uODE3MGJmMzNjY2Y5NTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTc3LDYgJiM0Mzs3Nyw3IEBAIHN0cnVjdCB2ZXRoX3ByaXYge1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCpfeGRwX3Byb2c7XG4gXHRzdHJ1Y3QgdmV0aF9ycVx0XHQqcnE7XG4gXHR1bnNpZ25lZCBpbnRcdFx0cmVxdWVzdGVkX2hlYWRyb29tO1xuJiM0MztcdG5ldGRldmljZV90cmFja2VyXHRwZWVyX3RyYWNrZXI7XG4gfTtcbiBcbiBzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xuQEAgLTE5MDEsMTUgJiM0MzsxOTAyLDE3IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVx1MDAzZXBlZXIsIHBlZXIpO1xuJiM0MztcdG5ldGRldl9ob2xkKHBlZXIsIFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbiBcdGVyciA9IHZldGhfaW5pdF9xdWV1ZXMoZGV2LCB0Yik7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9xdWV1ZXM7XG4gXG4gXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocHJpdi1cdTAwM2VwZWVyLCBkZXYpO1xuJiM0MztcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuIFx0ZXJyID0gdmV0aF9pbml0X3F1ZXVlcyhwZWVyLCB0Yik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycl9xdWV1ZXM7XG4mIzQzO1x0XHRnb3RvIGVycl9wZWVyX3F1ZXVlcztcbiBcbiBcdHZldGhfZGlzYWJsZV9ncm8oZGV2KTtcbiBcdC8qIHVwZGF0ZSBYRFAgc3VwcG9ydGVkIGZlYXR1cmVzICovXG5AQCAtMTkxOCw3ICYjNDM7MTkyMSwxMSBAQCBzdGF0aWMgaW50IHZldGhfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9wZWVyX3F1ZXVlczpcbiYjNDM7XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuJiM0MztcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIGVycl9xdWV1ZXM6XG4mIzQzO1x0bmV0ZGV2X3B1dChwZWVyLCBcdTAwMjZwcml2LVx1MDAzZXBlZXJfdHJhY2tlcik7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIGVycl9yZWdpc3Rlcl9kZXY6XG4gXHQvKiBub3RoaW5nIHRvIGRvICovXG5AQCAtMTkzMywyNCAmIzQzOzE5NDAsMjUgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBzdGF0aWMgdm9pZCB2ZXRoX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xuJiM0MztcdG5ldGRldmljZV90cmFja2VyICpwZWVyX3RyYWNrZXI7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcjtcbiYjNDM7XHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xuIFxuIFx0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4tXHRwZWVyID0gcnRubF9kZXJlZmVyZW5jZShwcml2LVx1MDAzZXBlZXIpO1xuJiM0MztcdHBlZXJfdHJhY2tlciA9IFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyO1xuJiM0MztcdHBlZXIgPSB1bnJjdV9wb2ludGVyKHhjaGcoXHUwMDI2cHJpdi1cdTAwM2VwZWVyLCBOVUxMKSk7XG4mIzQzO1x0aWYgKCFwZWVyKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuLVx0LyogTm90ZSA6IGRlbGxpbmsoKSBpcyBjYWxsZWQgZnJvbSBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKCksXG4tXHQgKiBiZWZvcmUgYSByY3Vfc3luY2hyb25pemUoKSBwb2ludC4gVGhlIGRldmljZXMgYXJlIGd1YXJhbnRlZWRcbi1cdCAqIG5vdCBiZWluZyBmcmVlZCBiZWZvcmUgb25lIFJDVSBncmFjZSBwZXJpb2QuXG4tXHQgKi9cbi1cdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4gXG4tXHRpZiAocGVlcikge1xuLVx0XHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4tXHRcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbi1cdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUocGVlciwgaGVhZCk7XG4tXHR9XG4mIzQzO1x0cHJpdiA9IG5ldGRldl9wcml2KHBlZXIpO1xuJiM0MztcdGRldiA9IHVucmN1X3BvaW50ZXIoeGNoZyhcdTAwMjZwcml2LVx1MDAzZXBlZXIsIE5VTEwpKTtcbiYjNDM7XHRpZiAoZGV2KVxuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KGRldl9uZXQoZGV2KSwgcGVlciwgaGVhZCk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9wdXQocGVlciwgcGVlcl90cmFja2VyKTtcbiYjNDM7XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdmV0aF9wb2xpY3lbVkVUSF9JTkZPX01BWCAmIzQzOyAxXSA9IHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjhkYjI1Yjc5NTczZTNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTE4NDUsNiAmIzQzOzE4NDUsOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAbmFwaV9saXN0Olx0TGlzdCBlbnRyeSB1c2VkIGZvciBwb2xsaW5nIE5BUEkgZGV2aWNlc1xuICAqXHRAdW5yZWdfbGlzdDpcdExpc3QgZW50cnkgIHdoZW4gd2UgYXJlIHVucmVnaXN0ZXJpbmcgdGhlXG4gICpcdFx0XHRkZXZpY2U7IHNlZSB0aGUgZnVuY3Rpb24gdW5yZWdpc3Rlcl9uZXRkZXZcbiYjNDM7ICpcdEB1bnJlZ19saXN0X25ldDpMaXN0IGVudHJ5IHdoZW4gd2UgYXJlIHVucmVnaXN0ZXJpbmcgdGhlIGNyb3NzLW5ldG5zXG4mIzQzOyAqXHRcdFx0ZGV2aWNlOyBzZWUgdGhlIGZ1bmN0aW9uIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldCgpXG4gICpcdEBjbG9zZV9saXN0Olx0TGlzdCBlbnRyeSB1c2VkIHdoZW4gd2UgYXJlIGNsb3NpbmcgdGhlIGRldmljZVxuICAqXHRAcHR5cGVfYWxsOiAgICAgRGV2aWNlLXNwZWNpZmljIHBhY2tldCBoYW5kbGVycyBmb3IgYWxsIHByb3RvY29sc1xuICAqXHRAcHR5cGVfc3BlY2lmaWM6IERldmljZS1zcGVjaWZpYywgcHJvdG9jb2wtc3BlY2lmaWMgcGFja2V0IGhhbmRsZXJzXG5AQCAtMjI0MSw2ICYjNDM7MjI0Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmFwaV9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0dW5yZWdfbGlzdDtcbiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdHVucmVnX2xpc3RfbmV0O1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGNsb3NlX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwdHlwZV9hbGw7XG4gXG5AQCAtMzQ3Miw2ICYjNDM7MzQ3NywyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgTlVMTCk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0KTtcbiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IGVhMzlkZDIzYTE5NzZlLi45NTcyOTMzOWU3YTU0OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbkBAIC0xMTUsNiAmIzQzOzExNSwxMCBAQCBib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xuIFxuIGJvb2wgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKHN0cnVjdCBuZXQgKm5ldCk7XG4gXG4mIzQzO3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpO1xuJiM0Mzt2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKTtcbiYjNDM7dm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7XG4gI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfcnRubF9uZXQobmV0LCBwKVx0XHRcdFx0XFxcbiBcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQobmV0KSlcbiAjZGVmaW5lIHJ0bmxfbmV0X2RlcmVmZXJlbmNlKG5ldCwgcClcdFx0XHRcdFx0XFxcbkBAIC0xNTAsNiAmIzQzOzE1NCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgQVNTRVJUX1JUTkxfTkVUKHN0cnVjdCBuZXQgKm5ldClcbiBcdEFTU0VSVF9SVE5MKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApXHRcdFxcXG4gXHRyY3VfZGVyZWZlcmVuY2VfcnRubChwKVxuICNkZWZpbmUgcnRubF9uZXRfZGVyZWZlcmVuY2UobmV0LCBwKVx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5pbmRleCA4MGRlNWU5OGE2NmQ2Yy4uNTAxYWYxOTk5ZmU4MzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuQEAgLTE5Nyw2ICYjNDM7MTk3LDkgQEAgc3RydWN0IG5ldCB7XG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuIFx0LyogTW92ZSB0byBhIGJldHRlciBwbGFjZSB3aGVuIHRoZSBjb25maWcgZ3VhcmQgaXMgcmVtb3ZlZC4gKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRydG5sX211dGV4O1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cnRubF93b3JrO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl91bnJlZ19oZWFkO1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0ZGV2X3VucmVnX2xvY2s7XG4gI2VuZGlmXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZTT0NLRVRTKVxuIFx0c3RydWN0IG5ldG5zX3Zzb2NrXHR2c29jaztcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uYzQzYTQ0ZmI2NDlmYTIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTYwOCw4ICYjNDM7MTE2MDgsMTMgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFx0XHRcdHJ0bmxfbG9jaygpO1xuIFxuIFx0XHRcdC8qIFJlYnJvYWRjYXN0IHVucmVnaXN0ZXIgbm90aWZpY2F0aW9uICovXG4tXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdClcbiYjNDM7XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4gXHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVIsIGRldik7XG4mIzQzO1x0XHRcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7XHRcdFx0fVxuIFxuIFx0XHRcdF9fcnRubF91bmxvY2soKTtcbiBcdFx0XHRyY3VfYmFycmllcigpO1xuQEAgLTEyMDg3LDYgJiM0MzsxMjA5Miw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbiYjNDM7I2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlY2xvc2VfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbGlua193YXRjaF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VhZGpfbGlzdC51cHBlcik7XG5AQCAtMTIzMDQsNiAmIzQzOzEyMzEyLDEwIEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4gXHRBU1NFUlRfUlROTCgpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0aWYgKGhlYWQpIHtcbiBcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QsIGhlYWQpO1xuIFx0fSBlbHNlIHtcbkBAIC0xMjQ4MCw2ICYjNDM7MTI0OTIsMTYgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkge1xuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO1x0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4mIzQzO1xuJiM0MztcdFx0Lyogc3Bpbl9sb2NrKCkgY2FuIGJlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGxvb3BcbiYjNDM7XHRcdCAqIG9uY2UgdGhlIHBlci1uZXRucyBSVE5MIGNvbnZlcnNpb24gY29tcGxldGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0MzsjZW5kaWZcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2VkZXZfcmVnaXN0ZXJlZF90cmFja2VyKTtcbiBcdFx0bmV0X3NldF90b2RvKGRldik7XG4gXHRcdGNudCYjNDM7JiM0Mzs7XG5AQCAtMTI1MDIsNiAmIzQzOzEyNTI0LDk2IEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrKGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKSB7XG4mIzQzO1x0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4mIzQzO1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ID0gZGV2X25ldChkZXYpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCkpO1xuJiM0MztcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KSk7XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0LCBcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuJiM0MztcdHJ0bmxfbmV0X3F1ZXVlX3dvcmsobmV0KTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnRtcDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCBoZWFkLCB1bnJlZ19saXN0KSB7XG4mIzQzO1x0XHQvKiBPbmNlIGFsbCBjcm9zcy1uZXRucyB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIGlzXG4mIzQzO1x0XHQgKiBjb252ZXJ0ZWQgdG8gX25ldCgpIChvciBmb3IgZGVidWdnaW5nKSwgcmVtb3ZlIHRoaXMgY2hlY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0REVCVUdfTkVUX1dBUk5fT05DRSghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7JXMgd2FzIHVucmVnaXN0ZXJlZCBmcm9tIGEgZGlmZmVyZW50IG5ldG5zLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgZGV2LVx1MDAzZW5hbWUpO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuJiM0MztcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0LCBcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChzdHJ1Y3QgbmV0ICpuZXRfb2xkLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAobmV0X29sZCBcdTAwM2UgbmV0KSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2bmV0X29sZC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0X29sZC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCkpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCk7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCwgXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19oZWFkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldF9vbGQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnRtcDtcbiYjNDM7XHRMSVNUX0hFQUQodW5yZWdfaGVhZF9uZXQpO1xuJiM0MztcdExJU1RfSEVBRCh1bnJlZ19oZWFkKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQsIFx1MDAyNnVucmVnX2hlYWRfbmV0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsIFx1MDAyNnVucmVnX2hlYWRfbmV0LCB1bnJlZ19saXN0X25ldCkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCwgXHUwMDI2dW5yZWdfaGVhZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNnVucmVnX2hlYWQpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKlx0dW5yZWdpc3Rlcl9uZXRkZXYgLSByZW1vdmUgZGV2aWNlIGZyb20gdGhlIGtlcm5lbFxuICAqXHRAZGV2OiBkZXZpY2VcbkBAIC0xMjY1OCw2ICYjNDM7MTI3NzAsMTAgQEAgaW50IF9fZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdG5ldGRldl91bmxvY2soZGV2KTtcbiBcdGRldi1cdTAwM2VpZmluZGV4ID0gbmV3X2lmaW5kZXg7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChuZXRfb2xkLCBuZXQsIGRldik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChuZXdfbmFtZVswXSkge1xuIFx0XHQvKiBSZW5hbWUgdGhlIG5ldGRldiB0byBwcmVwYXJlZCBuYW1lICovXG4gXHRcdHdyaXRlX3NlcWxvY2tfYmgoXHUwMDI2bmV0ZGV2X3JlbmFtZV9sb2NrKTtcbkBAIC0xMzAzNCw3ICYjNDM7MTMxNTAsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGRlZmF1bHRfZGV2aWNlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdCAqIFB1c2ggYWxsIG1pZ3JhdGFibGUgbmV0d29yayBkZXZpY2VzIGJhY2sgdG8gdGhlXG4gXHQgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXG4gXHQgKi9cbi1cdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuIFx0Zm9yX2VhY2hfbmV0ZGV2X3NhZmUobmV0LCBkZXYsIGF1eCkge1xuIFx0XHRpbnQgZXJyO1xuIFx0XHRjaGFyIGZiX25hbWVbSUZOQU1TSVpdO1xuQEAgLTEzMDc3LDIxICYjNDM7MTMxOTMsMzYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxuIFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuIFxuIFx0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdF9fcnRubF9uZXRfbG9jayhcdTAwMjZpbml0X25ldCk7XG4mIzQzO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShuZXQsIG5ldF9saXN0LCBleGl0X2xpc3QpIHtcbiYjNDM7XHRcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xuIFx0XHRkZWZhdWx0X2RldmljZV9leGl0X25ldChuZXQpO1xuJiM0MztcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuJiM0MztcdF9fcnRubF9uZXRfdW5sb2NrKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldCwgbmV0X2xpc3QsIGV4aXRfbGlzdCkge1xuJiM0MztcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4mIzQzO1xuIFx0XHRmb3JfZWFjaF9uZXRkZXZfcmV2ZXJzZShuZXQsIGRldikge1xuIFx0XHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNlZGVsbGluaylcbiBcdFx0XHRcdGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XG4gXHR9XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgZGVmYXVsdF9kZXZpY2Vfb3BzID0ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggZDlkYWZlMjRmNTdlM2YuLmE5MWQyYjU4YWFkZGY4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbkBAIC0xODEsNiAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIG9wc19leGl0X3J0bmxfbGlzdChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpvcHNfbGlzdCxcbiBcdFx0XHRcdG9wcy1cdTAwM2VleGl0X3J0bmwobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiBcdH1cbiBcbkBAIC00MjIsNiAmIzQzOzQyMyw5IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uXG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCk7XG4gXHRsb2NrX3NldF9jbXBfZm4oXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgsIHJ0bmxfbmV0X2xvY2tfY21wX2ZuLCBOVUxMKTtcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfd29yaywgcnRubF9uZXRfd29ya19mdW5jKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4gI2VuZGlmXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlcHR5cGVfYWxsKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCAxMmFhM2FhMTY4OGIxMy4uYjEyOWY3OTNkODUxNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC0xOTcsNiAmIzQzOzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQobmV0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCk7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19ydG5sX25ldF91bmxvY2spO1xuQEAgLTI3Myw2ICYjNDM7Mjc0LDI5IEBAIGJvb2wgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIFx1MDAyNlx1MDAyNiBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJ0bmxfbmV0X3dxO1xuJiM0MztcbiYjNDM7dm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHF1ZXVlX3dvcmsocnRubF9uZXRfd3EsIFx1MDAyNm5ldC1cdTAwM2VydG5sX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJ0bmxfbmV0X3dxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7XG4mIzQzO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ0bmxfbmV0X2xvY2sobmV0KTtcbiYjNDM7XHRydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7fVxuICNlbHNlXG4gc3RhdGljIGludCBydG5sX25ldF9jbXBfbG9ja3MoY29uc3Qgc3RydWN0IG5ldCAqbmV0X2EsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9iKVxuIHtcbkBAIC0yODIsMTAgJiM0MzszMDYsMTEgQEAgc3RhdGljIGludCBydG5sX25ldF9jbXBfbG9ja3MoY29uc3Qgc3RydWN0IG5ldCAqbmV0X2EsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9iKVxuICNlbmRpZlxuIFxuIHN0cnVjdCBydG5sX25ldHMge1xuLVx0LyogLVx1MDAzZW5ld2xpbmsoKSBuZWVkcyB0byBmcmVlemUgMyBuZXRucyBhdCBtb3N0O1xuLVx0ICogMiBmb3IgdGhlIG5ldyBkZXZpY2UsIDEgZm9yIGl0cyBwZWVyLlxuJiM0MztcdC8qIC1cdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDQgbmV0bnMgYXQgbW9zdDtcbiYjNDM7XHQgKiAyIGZvciB0aGUgbmV3IGRldmljZSwgMSBmb3IgaXRzIHBlZXIsIDEgZm9yXG4mIzQzO1x0ICogYW4gZXhpc3RpbmcgZGV2aWNlIChkb19zZXRsaW5rKCkgcGF0aCkuXG4gXHQgKi9cbi1cdHN0cnVjdCBuZXQgKm5ldFszXTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRbNF07XG4gXHR1bnNpZ25lZCBjaGFyIGxlbjtcbiB9O1xuIFxuQEAgLTYzNiwxNiAmIzQzOzY2MSwxNSBAQCBpbnQgcnRubF9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfbGlua19yZWdpc3Rlcik7XG4gXG4tc3RhdGljIHZvaWQgX19ydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKVxuJiM0MztzdGF0aWMgdm9pZCBfX3J0bmxfa2lsbF9saW5rcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuIFxuIFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG4gXHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyA9PSBvcHMpXG4tXHRcdFx0b3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZsaXN0X2tpbGwpO1xuJiM0MztcdFx0XHRvcHMtXHUwMDNlZGVsbGluayhkZXYsIGRldl9raWxsX2xpc3QpO1xuIFx0fVxuLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsaXN0X2tpbGwpO1xuIH1cbiBcbiAvKiBSZXR1cm4gd2l0aCB0aGUgcnRubF9sb2NrIGhlbGQgd2hlbiB0aGVyZSBhcmUgbm8gbmV0d29ya1xuQEAgLTY3Niw2ICYjNDM7NzAwLDcgQEAgc3RhdGljIHZvaWQgcnRubF9sb2NrX3VucmVnaXN0ZXJpbmdfYWxsKHZvaWQpXG4gICovXG4gdm9pZCBydG5sX2xpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKVxuIHtcbiYjNDM7XHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpbmtfb3BzX211dGV4KTtcbkBAIC02ODksOCAmIzQzOzcxNCwxNCBAQCB2b2lkIHJ0bmxfbGlua191bnJlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXG4gXHRkb3duX3dyaXRlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIFx0cnRubF9sb2NrX3VucmVnaXN0ZXJpbmdfYWxsKCk7XG4gXG4tXHRmb3JfZWFjaF9uZXQobmV0KVxuLVx0XHRfX3J0bmxfa2lsbF9saW5rcyhuZXQsIG9wcyk7XG4mIzQzO1x0Zm9yX2VhY2hfbmV0KG5ldCkge1xuJiM0MztcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4mIzQzO1x0XHRfX3J0bmxfa2lsbF9saW5rcyhuZXQsIG9wcywgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4mIzQzO1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuJiM0MztcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXG4gXHRydG5sX3VubG9jaygpO1xuIFx0dXBfd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG5AQCAtNDE1NSw2ICYjNDM7NDE4Niw4IEBAIHN0YXRpYyBpbnQgcnRubF9uZXdsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cnRubF9uZXRzX2FkZChcdTAwMjZydG5sX25ldHMsIGdldF9uZXQoc29ja19uZXQoc2tiLVx1MDAzZXNrKSkpO1xuJiM0MztcbiBcdHJ0bmxfbmV0c19sb2NrKFx1MDAyNnJ0bmxfbmV0cyk7XG4gXHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcbiBcdHJ0bmxfbmV0c191bmxvY2soXHUwMDI2cnRubF9uZXRzKTtcbkBAIC03MjIxLDQgJiM0Mzs3MjU0LDEwIEBAIHZvaWQgX19pbml0IHJ0bmV0bGlua19pbml0KHZvaWQpXG4gXHRyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2cnRuZXRsaW5rX2Rldl9ub3RpZmllcik7XG4gXG4gXHRydG5sX3JlZ2lzdGVyX21hbnkocnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzKTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbiYjNDM7XHRydG5sX25ldF93cSA9IGNyZWF0ZV93b3JrcXVldWUoXCYjMzQ7cnRubF9uZXRcJiMzNDspO1xuJiM0MztcdGlmICghcnRubF9uZXRfd3EpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtDb3VsZCBub3QgY3JlYXRlIHJ0bmxfbmV0IHdvcmtxXCYjMzQ7KTtcbiYjNDM7I2VuZGlmXG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX05FVF9TTUFMTF9SVE5MJiMzNDssCiAgICAmIzM0O0JBUkVVRFAmIzM0OywKICAgICYjMzQ7SVBWTEFOJiMzNDssCiAgICAmIzM0O0lQVlRBUCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3J0bmxfbmV0X3dvcmtfZnVuYyYjMzQ7LAogICAgJiMzNDtiYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19iYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7aXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O19faXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O2lwdnRhcF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O19faXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7dmV0aF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O2RlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIHVucmVnaXN0ZXJpbmcgbmV0d29yayBkZXZpY2VzIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMsIGFkZGluZyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHN1cHBvcnQgKENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTCkuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyBzZXZlcmFsIHZpcnR1YWwgbmV0d29yayBkcml2ZXJzIChiYXJldWRwLCBpcHZsYW4sIGlwdnRhcCwgdmV0aCkgdG8gdXNlIHRoZSBuZXcgbG9ja2luZyBhbmQgdW5yZWdpc3RyYXRpb24gQVBJcy4gVGhpcyBpbnZvbHZlcyBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgbmV0d29yayBkZXZpY2VzLCB3aGljaCBpcyBoaWdobHkgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4ZDQwYTk2NjI3MTFjYmI2NjRlNDAwYTkzNjBlNzBkNjgzZjIwZDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDAwOjI2OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jIGIvZHJpdmVycy9uZXQvYmFyZXVkcC5jCmluZGV4IDVlZjg0MWM4NTUyNjk3Li5jM2I1ZWQ1MmQ4Nzc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JhcmV1ZHAuYwpAQCAtMzYsNiAmIzQzOzM2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBiYXJldWRwX25ldF9pZDsKIAogc3RydWN0IGJhcmV1ZHBfbmV0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBiYXJldWRwX2xpc3Q7CiYjNDM7CXN0cnVjdCBtdXRleAkJbG9jazsKIH07CiAKIHN0cnVjdCBiYXJldWRwX2NvbmYgewpAQCAtNjM2LDEwICYjNDM7NjM3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHBfZmluZF9kZXYoc3RydWN0IGJhcmV1ZHBfbmV0ICpibiwKIHsKIAlzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAsICp0ID0gTlVMTDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmFyZXVkcCwgJmFtcDtibi0mZ3Q7YmFyZXVkcF9saXN0LCBuZXh0KSB7CiAJCWlmIChjb25mLSZndDtwb3J0ID09IGJhcmV1ZHAtJmd0O3BvcnQpCiAJCQl0ID0gYmFyZXVkcDsKIAl9CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JuLSZndDtsb2NrKTsKJiM0MzsKIAlyZXR1cm4gdDsKIH0KIApAQCAtNjc1LDcgJiM0Mzs2ODEsMTAgQEAgc3RhdGljIGludCBiYXJldWRwX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwogCWxpc3RfYWRkKCZhbXA7YmFyZXVkcC0mZ3Q7bmV4dCwgJmFtcDtibi0mZ3Q7YmFyZXVkcF9saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC02OTIsMTIgJiM0Mzs3MDEsMjYgQEAgc3RhdGljIGludCBiYXJldWRwX2xpbmtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtiYXJldWRwLSZndDtuZXh0KTsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBiYXJldWRwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuOwogCi0JbGlzdF9kZWwoJmFtcDtiYXJldWRwLSZndDtuZXh0KTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwomIzQzOwlibiA9IG5ldF9nZW5lcmljKGJhcmV1ZHAtJmd0O25ldCwgYmFyZXVkcF9uZXRfaWQpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtiYXJldWRwLSZndDtuZXh0KSkKJiM0MzsJCV9fYmFyZXVkcF9kZWxsaW5rKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwogfQogCiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzc2LDYgJiM0Mzs3OTksOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgYmFyZXVkcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJc3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtibi0mZ3Q7YmFyZXVkcF9saXN0KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2JuLSZndDtsb2NrKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzg1LDEzICYjNDM7ODEwLDI1IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYmFyZXVkcF9leGl0X3J0bmxfbmV0KHN0cnVjdCBuZXQgKm5ldCwKIAlzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7CiAJc3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCAqbmV4dDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCAmYW1wO2JuLSZndDtiYXJldWRwX2xpc3QsIG5leHQpCi0JCWJhcmV1ZHBfZGVsbGluayhiYXJldWRwLSZndDtkZXYsIGRldl9raWxsX2xpc3QpOwomIzQzOwkJX19iYXJldWRwX2RlbGxpbmsobmV0LCBiYXJldWRwLSZndDtkZXYsIGRldl9raWxsX2xpc3QpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtibi0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYmFyZXVkcF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7CiYjNDM7CiYjNDM7CVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO2JuLSZndDtiYXJldWRwX2xpc3QpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBiYXJldWRwX25ldF9vcHMgPSB7CiAJLmluaXQgPSBiYXJldWRwX2luaXRfbmV0LAogCS5leGl0X3J0bmwgPSBiYXJldWRwX2V4aXRfcnRubF9uZXQsCiYjNDM7CS5leGl0ID0gYmFyZXVkcF9leGl0X25ldCwKIAkuaWQgICA9ICZhbXA7YmFyZXVkcF9uZXRfaWQsCiAJLnNpemUgPSBzaXplb2Yoc3RydWN0IGJhcmV1ZHBfbmV0KSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmggYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmgKaW5kZXggODBmODRmYzg3MDA4YjMuLjhkMDVhZDQ4MDQzOGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oCkBAIC02OSw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgaXB2bF9kZXYgewogCURFQ0xBUkVfQklUTUFQKG1hY19maWx0ZXJzLCBJUFZMQU5fTUFDX0ZJTFRFUl9TSVpFKTsKIAluZXRkZXZfZmVhdHVyZXNfdAlzZmVhdHVyZXM7CiAJdTMyCQkJbXNnX2VuYWJsZTsKJiM0MzsJYm9vbAkJCWR5aW5nOwogfTsKIAogc3RydWN0IGlwdmxfYWRkciB7CkBAIC05MSwxMiAmIzQzOzkyLDEzIEBAIHN0cnVjdCBpcHZsX3BvcnQgewogCXN0cnVjdCBobGlzdF9oZWFkCWhsaGVhZFtJUFZMQU5fSEFTSF9TSVpFXTsKIAlzcGlubG9ja190CQlhZGRyc19sb2NrOyAvKiBndWFyZHMgaGFzaC10YWJsZSBhbmQgYWRkcnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWlwdmxhbnM7CiYjNDM7CXN0cnVjdCBtdXRleAkJcG5vZGVzX2xvY2s7CiAJdTE2CQkJbW9kZTsKIAl1MTYJCQlmbGFnczsKIAl1MTYJCQlkZXZfaWRfc3RhcnQ7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdxOwogCXN0cnVjdCBza19idWZmX2hlYWQJYmFja2xvZzsKLQlpbnQJCQljb3VudDsKJiM0MzsJcmVmY291bnRfdAkJY291bnQ7CiAJc3RydWN0IGlkYQkJaWRhOwogCW5ldGRldmljZV90cmFja2VyCWRldl90cmFja2VyOwogfTsKQEAgLTE2OCw3ICYjNDM7MTcwLDggQEAgdm9pZCBpcHZsYW5fY291bnRfcngoY29uc3Qgc3RydWN0IGlwdmxfZGV2ICppcHZsYW4sCiAJCSAgICAgdW5zaWduZWQgaW50IGxlbiwgYm9vbCBzdWNjZXNzLCBib29sIG1jYXN0KTsKIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcywKIAkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKJiM0Mzt2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogdm9pZCBpcHZsYW5fbGlua19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBpcHZsYW5fbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTsKICNpZmRlZiBDT05GSUdfSVBWTEFOX0wzUwpAQCAtMjA3LDQgJiM0MzsyMTAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0aWZfaXNfaXB2bGFuX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi0mZ3Q7cnhfaGFuZGxlcikgPT0gaXB2bGFuX2hhbmRsZV9mcmFtZTsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApCiYjNDM7ZXh0ZXJuIHZvaWQgKCpfX2lwdnRhcF9kZWxsaW5rX3B0cikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYgLyogX19JUFZMQU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYwppbmRleCBlZDQ2NDM5YTlmNGViMS4uZWU0NmE1NWY3M2QxNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jCkBAIC03LDYgJiM0Mzs3LDEyIEBACiAKICNpbmNsdWRlICYjMzQ7aXB2bGFuLmgmIzM0OwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUCkKJiM0Mzt2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwomIzQzO0VYUE9SVF9TWU1CT0woX19pcHZ0YXBfZGVsbGlua19wdHIpOwomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCwKIAkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CkBAIC0xNiw2ICYjNDM7MjIsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLAogCiAJQVNTRVJUX1JUTkwoKTsKIAlpZiAocG9ydC0mZ3Q7bW9kZSAhPSBudmFsKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgJmFtcDtwb3J0LSZndDtpcHZsYW5zLCBwbm9kZSkgewogCQkJZmxhZ3MgPSBpcHZsYW4tJmd0O2Rldi0mZ3Q7ZmxhZ3M7CiAJCQlpZiAobnZhbCA9PSBJUFZMQU5fTU9ERV9MMyB8fCBudmFsID09IElQVkxBTl9NT0RFX0wzUykgewpAQCAtNDAsNiAmIzQzOzQ4LDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCwKIAkJCWlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTsKIAkJfQogCQlwb3J0LSZndDttb2RlID0gbnZhbDsKJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTU2LDYgJiM0Mzs2Niw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsCiAJCQkJCSBOVUxMKTsKIAl9CiAKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTc2LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCUlOSVRfSExJU1RfSEVBRCgmYW1wO3BvcnQtJmd0O2hsaGVhZFtpZHhdKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7cG9ydC0mZ3Q7YWRkcnNfbG9jayk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwb3J0LSZndDtwbm9kZXNfbG9jayk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO3BvcnQtJmd0O2JhY2tsb2cpOwogCUlOSVRfV09SSygmYW1wO3BvcnQtJmd0O3dxLCBpcHZsYW5fcHJvY2Vzc19tdWx0aWNhc3QpOwogCWlkYV9pbml0KCZhbXA7cG9ydC0mZ3Q7aWRhKTsKQEAgLTg2LDYgJiM0Mzs5OSw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWdvdG8gZXJyOwogCiAJbmV0ZGV2X2hvbGQoZGV2LCAmYW1wO3BvcnQtJmd0O2Rldl90cmFja2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyOgpAQCAtOTMsMTYgJiM0MzsxMDcsMTggQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydC0mZ3Q7ZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQluZXRkZXZfcHV0KGRldiwgJmFtcDtwb3J0LSZndDtkZXZfdHJhY2tlcik7CiAJaWYgKHBvcnQtJmd0O21vZGUgPT0gSVBWTEFOX01PREVfTDNTKQogCQlpcHZsYW5fbDNzX3VucmVnaXN0ZXIocG9ydCk7CiYjNDM7CiAJbmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwb3J0LSZndDt3cSk7CiYjNDM7CW5ldGRldl9wdXQoZGV2LCAmYW1wO3BvcnQtJmd0O2Rldl90cmFja2VyKTsKJiM0MzsKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtwb3J0LSZndDtiYWNrbG9nKSkgIT0gTlVMTCkgewogCQlkZXZfcHV0KHNrYi0mZ3Q7ZGV2KTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xMTEsNiAmIzQzOzEyNywyNyBAQCBzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJa2ZyZWUocG9ydCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9wdXQoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtwb3J0LSZndDtjb3VudCkpCiYjNDM7CQlpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlwdmxfcG9ydCAqaXB2bGFuX3BvcnRfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0ID0gTlVMTDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkgewomIzQzOwkJcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9yY3UoZGV2KTsKJiM0MzsJCWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7cG9ydC0mZ3Q7Y291bnQpKQomIzQzOwkJCXBvcnQgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcG9ydDsKJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIElQVkxBTl9BTFdBWVNfT05fT0ZMT0FEUyBcCiAJKE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfCBcCiAJIE5FVElGX0ZfR1NPX1JPQlVTVCB8IE5FVElGX0ZfR1NPX1NPRlRXQVJFIHwgTkVUSUZfRl9HU09fRU5DQVBfQUxMKQpAQCAtMTUzLDMwICYjNDM7MTkwLDQ1IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAoIWlwdmxhbi0mZ3Q7cGNwdV9zdGF0cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJbmV0ZGV2X2xvY2socGh5X2Rldik7CiYjNDM7CiAJaWYgKCFuZXRpZl9pc19pcHZsYW5fcG9ydChwaHlfZGV2KSkgewogCQllcnIgPSBpcHZsYW5fcG9ydF9jcmVhdGUocGh5X2Rldik7CiAJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJbmV0ZGV2X3VubG9jayhwaHlfZGV2KTsKIAkJCWZyZWVfcGVyY3B1KGlwdmxhbi0mZ3Q7cGNwdV9zdGF0cyk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiYjNDM7CQlwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7CiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtwb3J0LSZndDtjb3VudCwgMSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7CiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDtwb3J0LSZndDtjb3VudCk7CiAJfQotCXBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTsKLQlwb3J0LSZndDtjb3VudCAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJbmV0ZGV2X3VubG9jayhwaHlfZGV2KTsKJiM0MzsKJiM0MzsJaXB2bGFuLSZndDtwb3J0ID0gcG9ydDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaXB2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5X2RldiA9IGlwdmxhbi0mZ3Q7cGh5X2RldjsKLQlzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0OwomIzQzOwluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXY7CiAKIAlmcmVlX3BlcmNwdShpcHZsYW4tJmd0O3BjcHVfc3RhdHMpOwogCi0JcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpOwotCXBvcnQtJmd0O2NvdW50IC09IDE7Ci0JaWYgKCFwb3J0LSZndDtjb3VudCkKLQkJaXB2bGFuX3BvcnRfZGVzdHJveShwb3J0LSZndDtkZXYpOwomIzQzOwlwaHlfZGV2ID0gaXB2bGFuLSZndDtwaHlfZGV2OwomIzQzOwluZXRkZXZfaG9sZChwaHlfZGV2LCAmYW1wO2Rldl90cmFja2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsJbmV0ZGV2X2xvY2socGh5X2Rldik7CiYjNDM7CiYjNDM7CWlwdmxhbl9wb3J0X3B1dChpcHZsYW4tJmd0O3BvcnQpOwomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrKHBoeV9kZXYpOwomIzQzOwluZXRkZXZfcHV0KHBoeV9kZXYsICZhbXA7ZGV2X3RyYWNrZXIpOwogfQogCiBzdGF0aWMgaW50IGlwdmxhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01OTQsOSAmIzQzOzY0Niw3IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcywKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIGlwdmxhbl9pbml0KCkgd291bGQgaGF2ZSBjcmVhdGVkIHRoZSBwb3J0LCBpZiByZXF1aXJlZCAqLwotCXBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTsKLQlpcHZsYW4tJmd0O3BvcnQgPSBwb3J0OwomIzQzOwlwb3J0ID0gaXB2bGFuLSZndDtwb3J0OwogCiAJLyogSWYgdGhlIHBvcnQtaWQgYmFzZSBpcyBhdCB0aGUgTUFYIHZhbHVlLCB0aGVuIHdyYXAgaXQgYXJvdW5kIGFuZAogCSAqIGJlZ2luIGZyb20gMHgxIGFnYWluLiBUaGlzIG1heSBiZSBkdWUgdG8gYSBidXN5IHN5c3RlbSB3aGVyZSBsb3RzCkBAIC02MzksNyAmIzQzOzY4OSwxMCBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsCiAJaWYgKGVycikKIAkJZ290byB1bmxpbmtfbmV0ZGV2OwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb3J0LSZndDtwbm9kZXNfbG9jayk7CiAJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtpcHZsYW4tJmd0O3Bub2RlLCAmYW1wO3BvcnQtJmd0O2lwdmxhbnMpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwb3J0LSZndDtwbm9kZXNfbG9jayk7CiYjNDM7CiAJbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocGh5X2RldiwgZGV2KTsKIAlyZXR1cm4gMDsKIApAQCAtNjUzLDcgJiM0Mzs3MDYsOCBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19uZXcpOwogCi12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQomIzQzO3ZvaWQgX19pcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwdmxfYWRkciAqYWRkciwgKm5leHQ7CkBAIC02NjgsMTAgJiM0Mzs3MjIsMjAgQEAgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIAogCWlkYV9mcmVlKCZhbXA7aXB2bGFuLSZndDtwb3J0LSZndDtpZGEsIGRldi0mZ3Q7ZGV2X2lkKTsKIAlsaXN0X2RlbF9yY3UoJmFtcDtpcHZsYW4tJmd0O3Bub2RlKTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwomIzQzOwl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQobmV0LCBkZXYsIGhlYWQpOwogCW5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi0mZ3Q7cGh5X2RldiwgZGV2KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwdmxhbl9saW5rX2RlbGV0ZSk7CiYjNDM7RVhQT1JUX1NZTUJPTChfX2lwdmxhbl9saW5rX2RlbGV0ZSk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpcHZsYW4tJmd0O3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKJiM0MzsJaWYgKCFpcHZsYW4tJmd0O2R5aW5nKQomIzQzOwkJX19pcHZsYW5fbGlua19kZWxldGUoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtpcHZsYW4tJmd0O3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKJiM0Mzt9CiAKIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTcyOSwxNCAmIzQzOzc5MywxOSBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAJc3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAJc3RydWN0IGlwdmxfZGV2ICppcHZsYW4sICpuZXh0OwomIzQzOwlpbnQgZXJyLCByZXQgPSBOT1RJRllfRE9ORTsKIAlzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0OwogCUxJU1RfSEVBRChsc3Rfa2lsbCk7Ci0JaW50IGVycjsKIAotCWlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwlpZiAoZXZlbnQgPT0gTkVUREVWX1BSRUNIQU5HRVVQUEVSIHx8CiYjNDM7CSAgICBldmVudCA9PSBORVRERVZfQ0hBTkdFVVBQRVIpCiYjNDM7CQlyZXR1cm4gcmV0OwogCi0JcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKGRldik7CiYjNDM7CXBvcnQgPSBpcHZsYW5fcG9ydF9nZXQoZGV2KTsKJiM0MzsJaWYgKCFwb3J0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9VUDoKQEAgLTc2MCwxNiAmIzQzOzgyOSwyNiBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAJCQlpcHZsYW5fbWlncmF0ZV9sM3NfaG9vayhvbGRuZXQsIG5ld25ldCk7CiAJCWJyZWFrOwogCX0KLQljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgomIzQzOwljYXNlIE5FVERFVl9VTlJFR0lTVEVSOiB7CiYjNDM7CQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiYjNDM7CiAJCWlmIChkZXYtJmd0O3JlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORykKIAkJCWJyZWFrOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcHZsYW4sIG5leHQsICZhbXA7cG9ydC0mZ3Q7aXB2bGFucywgcG5vZGUpCi0JCQlpcHZsYW4tJmd0O2Rldi0mZ3Q7cnRubF9saW5rX29wcy0mZ3Q7ZGVsbGluayhpcHZsYW4tJmd0O2RldiwKLQkJCQkJCQkgICAgJmFtcDtsc3Rfa2lsbCk7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCAmYW1wO3BvcnQtJmd0O2lwdmxhbnMsIHBub2RlKSB7CiYjNDM7CQkJaXB2bGFuLSZndDtkeWluZyA9IHRydWU7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUCkKJiM0MzsJCQlpZiAoaXB2bGFuLSZndDtkZXYtJmd0O3J0bmxfbGlua19vcHMgIT0gJmFtcDtpcHZsYW5fbGlua19vcHMpCiYjNDM7CQkJCV9faXB2dGFwX2RlbGxpbmtfcHRyKG5ldCwgaXB2bGFuLSZndDtkZXYsICZhbXA7bHN0X2tpbGwpOwomIzQzOwkJCWVsc2UKJiM0MzsjZW5kaWYKJiM0MzsJCQkJX19pcHZsYW5fbGlua19kZWxldGUobmV0LCBpcHZsYW4tJmd0O2RldiwgJmFtcDtsc3Rfa2lsbCk7CiYjNDM7CQl9CiYjNDM7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtsc3Rfa2lsbCk7CiAJCWJyZWFrOwotCiYjNDM7CX0KIAljYXNlIE5FVERFVl9GRUFUX0NIQU5HRToKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShpcHZsYW4sICZhbXA7cG9ydC0mZ3Q7aXB2bGFucywgcG5vZGUpIHsKIAkJCW5ldGlmX2luaGVyaXRfdHNvX21heChpcHZsYW4tJmd0O2RldiwgZGV2KTsKQEAgLTc4OCw4ICYjNDM7ODY3LDEwIEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKIAkJCWVyciA9IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShpcHZsYW4tJmd0O2RldiwKIAkJCQkJCQkgIHByZWNoYWRkcl9pbmZvLSZndDtkZXZfYWRkciwKIAkJCQkJCQkgIGV4dGFjayk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCQlicmVhazsKIApAQCAtODAyLDcgJiM0Mzs4ODMsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAKIAljYXNlIE5FVERFVl9QUkVfVFlQRV9DSEFOR0U6CiAJCS8qIEZvcmJpZCB1bmRlcmx5aW5nIGRldmljZSB0byBjaGFuZ2UgaXRzIHR5cGUuICovCi0JCXJldHVybiBOT1RJRllfQkFEOwomIzQzOwkJcmV0ID0gTk9USUZZX0JBRDsKJiM0MzsJCWJyZWFrOwogCiAJY2FzZSBORVRERVZfTk9USUZZX1BFRVJTOgogCWNhc2UgTkVUREVWX0JPTkRJTkdfRkFJTE9WRVI6CkBAIC04MTAsNyAmIzQzOzg5MiwxMiBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXB2bGFuLCAmYW1wO3BvcnQtJmd0O2lwdmxhbnMsIHBub2RlKQogCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKGV2ZW50LCBpcHZsYW4tJmd0O2Rldik7CiAJfQotCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwomIzQzOwlpcHZsYW5fcG9ydF9wdXQocG9ydCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qIHRoZSBjYWxsZXIgbXVzdCBoZWxkIHRoZSBhZGRycyBsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMKaW5kZXggMmQ2YmJkZGQxZWRkNTEuLjY2Yzk0OWQ5NDI2MTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jCkBAIC0xMDksMTQgJiM0MzsxMDksMjYgQEAgc3RhdGljIGludCBpcHZ0YXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX2lwdnRhcF9kZWxsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbnRhcCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CW5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTsKJiM0MzsJdGFwX2RlbF9xdWV1ZXMoJmFtcDt2bGFudGFwLSZndDt0YXApOwomIzQzOwlfX2lwdmxhbl9saW5rX2RlbGV0ZShuZXQsIGRldiwgaGVhZCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0Jc3RydWN0IGlwdnRhcF9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbnRhcCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSB2bGFudGFwLSZndDt2bGFuLnBvcnQ7CiAKLQluZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKGRldik7Ci0JdGFwX2RlbF9xdWV1ZXMoJmFtcDt2bGFuLSZndDt0YXApOwotCWlwdmxhbl9saW5rX2RlbGV0ZShkZXYsIGhlYWQpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwlpZiAoIXZsYW50YXAtJmd0O3ZsYW4uZHlpbmcpCiYjNDM7CQlfX2lwdnRhcF9kZWxsaW5rKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBpcHZ0YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE5OCw2ICYjNDM7MjEwLDggQEAgc3RhdGljIGludCBfX2luaXQgaXB2dGFwX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CV9faXB2dGFwX2RlbGxpbmtfcHRyID0gX19pcHZ0YXBfZGVsbGluazsKJiM0MzsKIAllcnIgPSB0YXBfY3JlYXRlX2NkZXYoJmFtcDtpcHZ0YXBfY2RldiwgJmFtcDtpcHZ0YXBfbWFqb3IsICYjMzQ7aXB2dGFwJiMzNDssCiAJCQkgICAgICBUSElTX01PRFVMRSk7CiAJaWYgKGVycikKQEAgLTIyNCw2ICYjNDM7MjM4LDggQEAgc3RhdGljIGludCBfX2luaXQgaXB2dGFwX2luaXQodm9pZCkKIG91dDI6CiAJdGFwX2Rlc3Ryb3lfY2RldihpcHZ0YXBfbWFqb3IsICZhbXA7aXB2dGFwX2NkZXYpOwogb3V0MToKJiM0MzsJX19pcHZ0YXBfZGVsbGlua19wdHIgPSBOVUxMOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiBtb2R1bGVfaW5pdChpcHZ0YXBfaW5pdCk7CkBAIC0yMzQsNiAmIzQzOzI1MCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHZ0YXBfZXhpdCh2b2lkKQogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7aXB2dGFwX25vdGlmaWVyX2Jsb2NrKTsKIAljbGFzc191bnJlZ2lzdGVyKCZhbXA7aXB2dGFwX2NsYXNzKTsKIAl0YXBfZGVzdHJveV9jZGV2KGlwdnRhcF9tYWpvciwgJmFtcDtpcHZ0YXBfY2Rldik7CiYjNDM7CV9faXB2dGFwX2RlbGxpbmtfcHRyID0gTlVMTDsKIH0KIG1vZHVsZV9leGl0KGlwdnRhcF9leGl0KTsKIE1PRFVMRV9BTElBU19SVE5MX0xJTksoJiMzNDtpcHZ0YXAmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMWM1MTQyMTQ5MTc1MzYuLjgxNzBiZjMzY2NmOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92ZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jCkBAIC03Nyw2ICYjNDM7NzcsNyBAQCBzdHJ1Y3QgdmV0aF9wcml2IHsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSpfeGRwX3Byb2c7CiAJc3RydWN0IHZldGhfcnEJCSpycTsKIAl1bnNpZ25lZCBpbnQJCXJlcXVlc3RlZF9oZWFkcm9vbTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIJcGVlcl90cmFja2VyOwogfTsKIAogc3RydWN0IHZldGhfeGRwX3R4X2JxIHsKQEAgLTE5MDEsMTUgJiM0MzsxOTAyLDE3IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlyY3VfYXNzaWduX3BvaW50ZXIocHJpdi0mZ3Q7cGVlciwgcGVlcik7CiYjNDM7CW5ldGRldl9ob2xkKHBlZXIsICZhbXA7cHJpdi0mZ3Q7cGVlcl90cmFja2VyLCBHRlBfS0VSTkVMKTsKIAllcnIgPSB2ZXRoX2luaXRfcXVldWVzKGRldiwgdGIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3F1ZXVlczsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIocHJpdi0mZ3Q7cGVlciwgZGV2KTsKJiM0MzsJbmV0ZGV2X2hvbGQoZGV2LCAmYW1wO3ByaXYtJmd0O3BlZXJfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiAJZXJyID0gdmV0aF9pbml0X3F1ZXVlcyhwZWVyLCB0Yik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfcXVldWVzOwomIzQzOwkJZ290byBlcnJfcGVlcl9xdWV1ZXM7CiAKIAl2ZXRoX2Rpc2FibGVfZ3JvKGRldik7CiAJLyogdXBkYXRlIFhEUCBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KQEAgLTE5MTgsNyAmIzQzOzE5MjEsMTEgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCXJldHVybiAwOwogCiYjNDM7ZXJyX3BlZXJfcXVldWVzOgomIzQzOwluZXRkZXZfcHV0KGRldiwgJmFtcDtwcml2LSZndDtwZWVyX3RyYWNrZXIpOwomIzQzOwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIGVycl9xdWV1ZXM6CiYjNDM7CW5ldGRldl9wdXQocGVlciwgJmFtcDtwcml2LSZndDtwZWVyX3RyYWNrZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiBlcnJfcmVnaXN0ZXJfZGV2OgogCS8qIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTE5MzMsMjQgJiM0MzsxOTQwLDI1IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIHN0YXRpYyB2b2lkIHZldGhfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewotCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7CiYjNDM7CW5ldGRldmljZV90cmFja2VyICpwZWVyX3RyYWNrZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBlZXI7CiYjNDM7CXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwZWVyID0gcnRubF9kZXJlZmVyZW5jZShwcml2LSZndDtwZWVyKTsKJiM0MzsJcGVlcl90cmFja2VyID0gJmFtcDtwcml2LSZndDtwZWVyX3RyYWNrZXI7CiYjNDM7CXBlZXIgPSB1bnJjdV9wb2ludGVyKHhjaGcoJmFtcDtwcml2LSZndDtwZWVyLCBOVUxMKSk7CiYjNDM7CWlmICghcGVlcikKJiM0MzsJCXJldHVybjsKIAotCS8qIE5vdGUgOiBkZWxsaW5rKCkgaXMgY2FsbGVkIGZyb20gZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCgpLAotCSAqIGJlZm9yZSBhIHJjdV9zeW5jaHJvbml6ZSgpIHBvaW50LiBUaGUgZGV2aWNlcyBhcmUgZ3VhcmFudGVlZAotCSAqIG5vdCBiZWluZyBmcmVlZCBiZWZvcmUgb25lIFJDVSBncmFjZSBwZXJpb2QuCi0JICovCi0JUkNVX0lOSVRfUE9JTlRFUihwcml2LSZndDtwZWVyLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwogCi0JaWYgKHBlZXIpIHsKLQkJcHJpdiA9IG5ldGRldl9wcml2KHBlZXIpOwotCQlSQ1VfSU5JVF9QT0lOVEVSKHByaXYtJmd0O3BlZXIsIE5VTEwpOwotCQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShwZWVyLCBoZWFkKTsKLQl9CiYjNDM7CXByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTsKJiM0MzsJZGV2ID0gdW5yY3VfcG9pbnRlcih4Y2hnKCZhbXA7cHJpdi0mZ3Q7cGVlciwgTlVMTCkpOwomIzQzOwlpZiAoZGV2KQomIzQzOwkJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KGRldl9uZXQoZGV2KSwgcGVlciwgaGVhZCk7CiYjNDM7CiYjNDM7CW5ldGRldl9wdXQocGVlciwgcGVlcl90cmFja2VyKTsKJiM0MzsJbmV0ZGV2X3B1dChkZXYsICZhbXA7cHJpdi0mZ3Q7cGVlcl90cmFja2VyKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHZldGhfcG9saWN5W1ZFVEhfSU5GT19NQVggJiM0MzsgMV0gPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Ni4uOGRiMjViNzk1NzNlM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMTg0NSw2ICYjNDM7MTg0NSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKglAbmFwaV9saXN0OglMaXN0IGVudHJ5IHVzZWQgZm9yIHBvbGxpbmcgTkFQSSBkZXZpY2VzCiAgKglAdW5yZWdfbGlzdDoJTGlzdCBlbnRyeSAgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGUKICAqCQkJZGV2aWNlOyBzZWUgdGhlIGZ1bmN0aW9uIHVucmVnaXN0ZXJfbmV0ZGV2CiYjNDM7ICoJQHVucmVnX2xpc3RfbmV0Okxpc3QgZW50cnkgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGUgY3Jvc3MtbmV0bnMKJiM0MzsgKgkJCWRldmljZTsgc2VlIHRoZSBmdW5jdGlvbiB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoKQogICoJQGNsb3NlX2xpc3Q6CUxpc3QgZW50cnkgdXNlZCB3aGVuIHdlIGFyZSBjbG9zaW5nIHRoZSBkZXZpY2UKICAqCUBwdHlwZV9hbGw6ICAgICBEZXZpY2Utc3BlY2lmaWMgcGFja2V0IGhhbmRsZXJzIGZvciBhbGwgcHJvdG9jb2xzCiAgKglAcHR5cGVfc3BlY2lmaWM6IERldmljZS1zcGVjaWZpYywgcHJvdG9jb2wtc3BlY2lmaWMgcGFja2V0IGhhbmRsZXJzCkBAIC0yMjQxLDYgJiM0MzsyMjQzLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQJZGV2X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAluYXBpX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAl1bnJlZ19saXN0OwomIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAl1bnJlZ19saXN0X25ldDsKJiM0MzsjZW5kaWYKIAlzdHJ1Y3QgbGlzdF9oZWFkCWNsb3NlX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAlwdHlwZV9hbGw7CiAKQEAgLTM0NzIsNiAmIzQzOzM0NzcsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBOVUxMKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKJiM0Mzt2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKJiM0Mzt2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIGludCBuZXRkZXZfcmVmY250X3JlYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCBlYTM5ZGQyM2ExOTc2ZS4uOTU3MjkzMzllN2E1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMTE1LDYgJiM0MzsxMTUsMTAgQEAgYm9vbCBydG5sX25ldF9pc19sb2NrZWQoc3RydWN0IG5ldCAqbmV0KTsKIAogYm9vbCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQoc3RydWN0IG5ldCAqbmV0KTsKIAomIzQzO3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpOwomIzQzO3ZvaWQgcnRubF9uZXRfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7CiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApCQkJCVwKIAlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKG5ldCkpCiAjZGVmaW5lIHJ0bmxfbmV0X2RlcmVmZXJlbmNlKG5ldCwgcCkJCQkJCVwKQEAgLTE1MCw2ICYjNDM7MTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBBU1NFUlRfUlROTF9ORVQoc3RydWN0IG5ldCAqbmV0KQogCUFTU0VSVF9SVE5MKCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsKICNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3J0bmxfbmV0KG5ldCwgcCkJCVwKIAlyY3VfZGVyZWZlcmVuY2VfcnRubChwKQogI2RlZmluZSBydG5sX25ldF9kZXJlZmVyZW5jZShuZXQsIHApCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCmluZGV4IDgwZGU1ZTk4YTY2ZDZjLi41MDFhZjE5OTlmZTgzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtMTk3LDYgJiM0MzsxOTcsOSBAQCBzdHJ1Y3QgbmV0IHsKICNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKIAkvKiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHdoZW4gdGhlIGNvbmZpZyBndWFyZCBpcyByZW1vdmVkLiAqLwogCXN0cnVjdCBtdXRleAkJcnRubF9tdXRleDsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXJ0bmxfd29yazsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAlkZXZfdW5yZWdfaGVhZDsKJiM0MzsJc3BpbmxvY2tfdAkJZGV2X3VucmVnX2xvY2s7CiAjZW5kaWYKICNpZiBJU19FTkFCTEVEKENPTkZJR19WU09DS0VUUykKIAlzdHJ1Y3QgbmV0bnNfdnNvY2sJdnNvY2s7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jNDNhNDRmYjY0OWZhMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExNjA4LDggJiM0MzsxMTYwOCwxMyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAJCQlydG5sX2xvY2soKTsKIAogCQkJLyogUmVicm9hZGNhc3QgdW5yZWdpc3RlciBub3RpZmljYXRpb24gKi8KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBsaXN0LCB0b2RvX2xpc3QpCiYjNDM7CQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkgewomIzQzOwkJCQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiYjNDM7CiYjNDM7CQkJCV9fcnRubF9uZXRfbG9jayhuZXQpOwogCQkJCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfVU5SRUdJU1RFUiwgZGV2KTsKJiM0MzsJCQkJX19ydG5sX25ldF91bmxvY2sobmV0KTsKJiM0MzsJCQl9CiAKIAkJCV9fcnRubF91bmxvY2soKTsKIAkJCXJjdV9iYXJyaWVyKCk7CkBAIC0xMjA4Nyw2ICYjNDM7MTIwOTIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7bmFwaV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdCk7CiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQpOwomIzQzOyNlbmRpZgogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtjbG9zZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7bGlua193YXRjaF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7YWRqX2xpc3QudXBwZXIpOwpAQCAtMTIzMDQsNiAmIzQzOzEyMzEyLDEwIEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlBU1NFUlRfUlROTCgpOwogCiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDt1bnJlZ19saXN0X25ldCkpOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChoZWFkKSB7CiAJCWxpc3RfbW92ZV90YWlsKCZhbXA7ZGV2LSZndDt1bnJlZ19saXN0LCBoZWFkKTsKIAl9IGVsc2UgewpAQCAtMTI0ODAsNiAmIzQzOzEyNDkyLDE2IEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7CiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwkJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwomIzQzOwomIzQzOwkJLyogc3Bpbl9sb2NrKCkgY2FuIGJlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGxvb3AKJiM0MzsJCSAqIG9uY2UgdGhlIHBlci1uZXRucyBSVE5MIGNvbnZlcnNpb24gY29tcGxldGVzLgomIzQzOwkJICovCiYjNDM7CQlzcGluX2xvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7ZGV2LSZndDt1bnJlZ19saXN0X25ldCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzOyNlbmRpZgogCQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXYtJmd0O2Rldl9yZWdpc3RlcmVkX3RyYWNrZXIpOwogCQluZXRfc2V0X3RvZG8oZGV2KTsKIAkJY250JiM0MzsmIzQzOzsKQEAgLTEyNTAyLDYgJiM0MzsxMjUyNCw5NiBAQCB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MCiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CW5ldGRldl9sb2NrKGRldik7CiYjNDM7CiYjNDM7CWlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKSB7CiYjNDM7CQluZXRkZXZfdW5sb2NrKGRldik7CiYjNDM7CQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldCA9IGRldl9uZXQoZGV2KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiYjNDM7CiYjNDM7CURFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3QpKTsKJiM0MzsJREVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQpKTsKJiM0MzsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQsICZhbXA7bmV0LSZndDtkZXZfdW5yZWdfaGVhZCk7CiYjNDM7CXJ0bmxfbmV0X3F1ZXVlX3dvcmsobmV0KTsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsKJiM0MzsJbmV0ZGV2X3VubG9jayhkZXYpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldCk7CiYjNDM7CiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAqdG1wOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCBoZWFkLCB1bnJlZ19saXN0KSB7CiYjNDM7CQkvKiBPbmNlIGFsbCBjcm9zcy1uZXRucyB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIGlzCiYjNDM7CQkgKiBjb252ZXJ0ZWQgdG8gX25ldCgpIChvciBmb3IgZGVidWdnaW5nKSwgcmVtb3ZlIHRoaXMgY2hlY2suCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCURFQlVHX05FVF9XQVJOX09OQ0UoIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCksCiYjNDM7CQkJCSAgICAmIzM0OyVzIHdhcyB1bnJlZ2lzdGVyZWQgZnJvbSBhIGRpZmZlcmVudCBuZXRucy5cbiYjMzQ7LAomIzQzOwkJCQkgICAgZGV2LSZndDtuYW1lKTsKJiM0MzsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3QpOwomIzQzOwkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0LCAmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2hlYWQpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21vdmVfbmV0KHN0cnVjdCBuZXQgKm5ldF9vbGQsCiYjNDM7CQkJCQkgIHN0cnVjdCBuZXQgKm5ldCwKJiM0MzsJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CWlmIChuZXRfb2xkICZndDsgbmV0KSB7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsJCXNwaW5fbG9ja19uZXN0ZWQoJmFtcDtuZXRfb2xkLSZndDtkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bmV0X29sZC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX25lc3RlZCgmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0KSkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0KTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0LCAmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2hlYWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bmV0X29sZC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzOwlzcGluX3VubG9jaygmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7CiYjNDM7CUxJU1RfSEVBRCh1bnJlZ19oZWFkX25ldCk7CiYjNDM7CUxJU1RfSEVBRCh1bnJlZ19oZWFkKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiYjNDM7CWxpc3Rfc3BsaWNlX2luaXQoJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19oZWFkLCAmYW1wO3VucmVnX2hlYWRfbmV0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmYW1wO3VucmVnX2hlYWRfbmV0LCB1bnJlZ19saXN0X25ldCkgewomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdCwgJmFtcDt1bnJlZ19oZWFkKTsKJiM0MzsJfQomIzQzOwomIzQzOwl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZhbXA7dW5yZWdfaGVhZCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKgl1bnJlZ2lzdGVyX25ldGRldiAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsCiAgKglAZGV2OiBkZXZpY2UKQEAgLTEyNjU4LDYgJiM0MzsxMjc3MCwxMCBAQCBpbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LAogCW5ldGRldl91bmxvY2soZGV2KTsKIAlkZXYtJmd0O2lmaW5kZXggPSBuZXdfaWZpbmRleDsKIAomIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbW92ZV9uZXQobmV0X29sZCwgbmV0LCBkZXYpOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChuZXdfbmFtZVswXSkgewogCQkvKiBSZW5hbWUgdGhlIG5ldGRldiB0byBwcmVwYXJlZCBuYW1lICovCiAJCXdyaXRlX3NlcWxvY2tfYmgoJmFtcDtuZXRkZXZfcmVuYW1lX2xvY2spOwpAQCAtMTMwMzQsNyAmIzQzOzEzMTUwLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJICogUHVzaCBhbGwgbWlncmF0YWJsZSBuZXR3b3JrIGRldmljZXMgYmFjayB0byB0aGUKIAkgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlCiAJICovCi0JQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAlmb3JfZWFjaF9uZXRkZXZfc2FmZShuZXQsIGRldiwgYXV4KSB7CiAJCWludCBlcnI7CiAJCWNoYXIgZmJfbmFtZVtJRk5BTVNJWl07CkBAIC0xMzA3NywyMSAmIzQzOzEzMTkzLDM2IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdCkKIAlMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJX19ydG5sX25ldF9sb2NrKCZhbXA7aW5pdF9uZXQpOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7CiYjNDM7CQlfX3J0bmxfbmV0X2xvY2sobmV0KTsKIAkJZGVmYXVsdF9kZXZpY2VfZXhpdF9uZXQobmV0KTsKJiM0MzsJCV9fcnRubF9uZXRfdW5sb2NrKG5ldCk7CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAomIzQzOwlfX3J0bmxfbmV0X3VubG9jaygmYW1wO2luaXRfbmV0KTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldCwgbmV0X2xpc3QsIGV4aXRfbGlzdCkgewomIzQzOwkJX19ydG5sX25ldF9sb2NrKG5ldCk7CiYjNDM7CiAJCWZvcl9lYWNoX25ldGRldl9yZXZlcnNlKG5ldCwgZGV2KSB7CiAJCQlpZiAoZGV2LSZndDtydG5sX2xpbmtfb3BzICZhbXA7JmFtcDsgZGV2LSZndDtydG5sX2xpbmtfb3BzLSZndDtkZWxsaW5rKQogCQkJCWRldi0mZ3Q7cnRubF9saW5rX29wcy0mZ3Q7ZGVsbGluayhkZXYsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiAJCQllbHNlCiAJCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCAmYW1wO2Rldl9raWxsX2xpc3QpOwogCQl9CiYjNDM7CiYjNDM7CQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQlfX3J0bmxfbmV0X3VubG9jayhuZXQpOwogCX0KIAl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZhbXA7ZGV2X2tpbGxfbGlzdCk7CiAJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgZGVmYXVsdF9kZXZpY2Vfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IGQ5ZGFmZTI0ZjU3ZTNmLi5hOTFkMmI1OGFhZGRmOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwpAQCAtMTgxLDYgJiM0MzsxODEsNyBAQCBzdGF0aWMgdm9pZCBvcHNfZXhpdF9ydG5sX2xpc3QoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqb3BzX2xpc3QsCiAJCQkJb3BzLSZndDtleGl0X3J0bmwobmV0LCAmYW1wO2Rldl9raWxsX2xpc3QpOwogCQl9CiAKJiM0MzsJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0KG5ldCwgJmFtcDtkZXZfa2lsbF9saXN0KTsKIAkJX19ydG5sX25ldF91bmxvY2sobmV0KTsKIAl9CiAKQEAgLTQyMiw2ICYjNDM7NDIzLDkgQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX24KICNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKIAltdXRleF9pbml0KCZhbXA7bmV0LSZndDtydG5sX211dGV4KTsKIAlsb2NrX3NldF9jbXBfZm4oJmFtcDtuZXQtJmd0O3J0bmxfbXV0ZXgsIHJ0bmxfbmV0X2xvY2tfY21wX2ZuLCBOVUxMKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV0LSZndDtydG5sX3dvcmssIHJ0bmxfbmV0X3dvcmtfZnVuYyk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfaGVhZCk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiAjZW5kaWYKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtwdHlwZV9hbGwpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAxMmFhM2FhMTY4OGIxMy4uYjEyOWY3OTNkODUxNjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xOTcsNiAmIzQzOzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KQogewogCUFTU0VSVF9SVE5MKCk7CiAKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQobmV0KTsKIAltdXRleF91bmxvY2soJmFtcDtuZXQtJmd0O3J0bmxfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChfX3J0bmxfbmV0X3VubG9jayk7CkBAIC0yNzMsNiAmIzQzOzI3NCwyOSBAQCBib29sIGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZChzdHJ1Y3QgbmV0ICpuZXQpCiAJcmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgJmFtcDsmYW1wOyBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZXQtJmd0O3J0bmxfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnRubF9uZXRfd3E7CiYjNDM7CiYjNDM7dm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXF1ZXVlX3dvcmsocnRubF9uZXRfd3EsICZhbXA7bmV0LSZndDtydG5sX3dvcmspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKQomIzQzO3sKJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJ0bmxfbmV0X3dxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7CiYjNDM7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfaGVhZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJ0bmxfbmV0X2xvY2sobmV0KTsKJiM0MzsJcnRubF9uZXRfdW5sb2NrKG5ldCk7CiYjNDM7fQogI2Vsc2UKIHN0YXRpYyBpbnQgcnRubF9uZXRfY21wX2xvY2tzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9hLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYikKIHsKQEAgLTI4MiwxMCAmIzQzOzMwNiwxMSBAQCBzdGF0aWMgaW50IHJ0bmxfbmV0X2NtcF9sb2Nrcyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYSwgY29uc3Qgc3RydWN0IG5ldCAqbmV0X2IpCiAjZW5kaWYKIAogc3RydWN0IHJ0bmxfbmV0cyB7Ci0JLyogLSZndDtuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDMgbmV0bnMgYXQgbW9zdDsKLQkgKiAyIGZvciB0aGUgbmV3IGRldmljZSwgMSBmb3IgaXRzIHBlZXIuCiYjNDM7CS8qIC0mZ3Q7bmV3bGluaygpIG5lZWRzIHRvIGZyZWV6ZSA0IG5ldG5zIGF0IG1vc3Q7CiYjNDM7CSAqIDIgZm9yIHRoZSBuZXcgZGV2aWNlLCAxIGZvciBpdHMgcGVlciwgMSBmb3IKJiM0MzsJICogYW4gZXhpc3RpbmcgZGV2aWNlIChkb19zZXRsaW5rKCkgcGF0aCkuCiAJICovCi0Jc3RydWN0IG5ldCAqbmV0WzNdOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRbNF07CiAJdW5zaWduZWQgY2hhciBsZW47CiB9OwogCkBAIC02MzYsMTYgJiM0Mzs2NjEsMTUgQEAgaW50IHJ0bmxfbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRubF9saW5rX3JlZ2lzdGVyKTsKIAotc3RhdGljIHZvaWQgX19ydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQomIzQzO3N0YXRpYyB2b2lkIF9fcnRubF9raWxsX2xpbmtzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JTElTVF9IRUFEKGxpc3Rfa2lsbCk7CiAKIAlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHsKIAkJaWYgKGRldi0mZ3Q7cnRubF9saW5rX29wcyA9PSBvcHMpCi0JCQlvcHMtJmd0O2RlbGxpbmsoZGV2LCAmYW1wO2xpc3Rfa2lsbCk7CiYjNDM7CQkJb3BzLSZndDtkZWxsaW5rKGRldiwgZGV2X2tpbGxfbGlzdCk7CiAJfQotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtsaXN0X2tpbGwpOwogfQogCiAvKiBSZXR1cm4gd2l0aCB0aGUgcnRubF9sb2NrIGhlbGQgd2hlbiB0aGVyZSBhcmUgbm8gbmV0d29yawpAQCAtNjc2LDYgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgdm9pZCBydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwodm9pZCkKICAqLwogdm9pZCBydG5sX2xpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQogewomIzQzOwlMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7CiAJc3RydWN0IG5ldCAqbmV0OwogCiAJbXV0ZXhfbG9jaygmYW1wO2xpbmtfb3BzX211dGV4KTsKQEAgLTY4OSw4ICYjNDM7NzE0LDE0IEBAIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcykKIAlkb3duX3dyaXRlKCZhbXA7cGVybmV0X29wc19yd3NlbSk7CiAJcnRubF9sb2NrX3VucmVnaXN0ZXJpbmdfYWxsKCk7CiAKLQlmb3JfZWFjaF9uZXQobmV0KQotCQlfX3J0bmxfa2lsbF9saW5rcyhuZXQsIG9wcyk7CiYjNDM7CWZvcl9lYWNoX25ldChuZXQpIHsKJiM0MzsJCV9fcnRubF9uZXRfbG9jayhuZXQpOwomIzQzOwkJX19ydG5sX2tpbGxfbGlua3MobmV0LCBvcHMsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQlfX3J0bmxfbmV0X3VubG9jayhuZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtkZXZfa2lsbF9saXN0KTsKIAogCXJ0bmxfdW5sb2NrKCk7CiAJdXBfd3JpdGUoJmFtcDtwZXJuZXRfb3BzX3J3c2VtKTsKQEAgLTQxNTUsNiAmIzQzOzQxODYsOCBAQCBzdGF0aWMgaW50IHJ0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJfQogCX0KIAomIzQzOwlydG5sX25ldHNfYWRkKCZhbXA7cnRubF9uZXRzLCBnZXRfbmV0KHNvY2tfbmV0KHNrYi0mZ3Q7c2spKSk7CiYjNDM7CiAJcnRubF9uZXRzX2xvY2soJmFtcDtydG5sX25ldHMpOwogCXJldCA9IF9fcnRubF9uZXdsaW5rKHNrYiwgbmxoLCBvcHMsIHRndF9uZXQsIGxpbmtfbmV0LCBwZWVyX25ldCwgdGJzLCBkYXRhLCBleHRhY2spOwogCXJ0bmxfbmV0c191bmxvY2soJmFtcDtydG5sX25ldHMpOwpAQCAtNzIyMSw0ICYjNDM7NzI1NCwxMCBAQCB2b2lkIF9faW5pdCBydG5ldGxpbmtfaW5pdCh2b2lkKQogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYW1wO3J0bmV0bGlua19kZXZfbm90aWZpZXIpOwogCiAJcnRubF9yZWdpc3Rlcl9tYW55KHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVycyk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwlydG5sX25ldF93cSA9IGNyZWF0ZV93b3JrcXVldWUoJiMzNDtydG5sX25ldCYjMzQ7KTsKJiM0MzsJaWYgKCFydG5sX25ldF93cSkKJiM0MzsJCXBhbmljKCYjMzQ7Q291bGQgbm90IGNyZWF0ZSBydG5sX25ldCB3b3JrcSYjMzQ7KTsKJiM0MzsjZW5kaWYKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JraW5nIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgYXBwbGllZCwgYW5kIG15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdGhhdCBuZWVkIGZ1enppbmcuIEkmIzM5O20gc2VlaW5nIGEgbG90IG9mIGNodXJuIGluIGNvcmUgbmV0d29ya2luZywgc28gdGhpcyBsb29rcyBwcm9taXNpbmcgZm9yIGZpbmRpbmcgcG90ZW50aWFsIGJ1Z3MuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLCBwcmltYXJpbHkgYXJvdW5kIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBhbmQgUlROTCAoUm91dGluZyBhbmQgVHJhZmZpYyBDb250cm9sIE5ldGxpbmspIGxvY2tpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgcGVyLW5ldG5zIFJUTkwgbG9ja2luZyB1c2luZyBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCwgd2hpY2ggaXMgYSBwcmV0dHkgYmlnIGRlYWwsIGFuZCB0aGUgYG5ldGRldmljZWAgY29kZSBpdHNlbGYgaXMgYmVpbmcgaGVhdmlseSBtb2RpZmllZC4gVGhpcyBpbmRpY2F0ZXMgdGhlIHByaW1hcnkgYXJlYSBvZiBpbnRlcmVzdCwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBsb2NraW5nIHNjaGVtZSwgYW5kIHRoZSB3YXkgZGV2aWNlcyBhcmUgdW5yZWdpc3RlcmVkLgoKU3BlY2lmaWMgZHJpdmVycyBhcmUgYWxzbyBiZWluZyBtb2RpZmllZCB0byBwbGF5IG5pY2VseSB3aXRoIHRoZXNlIGNoYW5nZXMuIEkgc2VlIGBiYXJldWRwLmNgIG5vdyBpbmNsdWRlcyBhIG11dGV4IGBsb2NrYCwgYW5kIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGxvY2sgYXJlIGBiYXJldWRwX2ZpbmRfZGV2YCwgYGJhcmV1ZHBfY29uZmlndXJlYCwgYGJhcmV1ZHBfZGVsbGlua2AsIGBiYXJldWRwX2luaXRfbmV0YCwgYGJhcmV1ZHBfZXhpdF9ydG5sX25ldGAsIHBsdXMgYF9fYmFyZXVkcF9kZWxsaW5rYCBpcyBhZGRlZC4gYGlwdmxhbmAsIGBpcHZ0YXBgLCBhbmQgYHZldGhgIGFsbCBzZWVtIHRvIGhhdmUgc2ltaWxhciB1cGRhdGVzLCB3aXRoIGxvY2tpbmcgb3IgbmV3IGRldmljZSB1bnJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGFkZGVkIHRvIHVzZSB0aGUgbmV3IGxvY2tpbmcgc2NoZW1lIGFuZCBgbmV0ZGV2aWNlYCBpbmZyYXN0cnVjdHVyZS4KCkZ1bmN0aW9uYWxseSwgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IGEgJiMzNDt5ZXMmIzM0Oy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBhbmQgYW55IGNoYW5nZSB0byBsb2NraW5nIG9yIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBjYW4gZWFzaWx5IGludHJvZHVjZSBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4gQW5kIHllcywgYWxsIHRoZXNlIG5ldyBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlLCBzaW5jZSB0aGV5JiMzOTtyZSBiYXNpYyBuZXR3b3JrIGRldmljZXMgYW5kIHVucmVnaXN0cmF0aW9uIGxvZ2ljLCBzbyB0aGV5JiMzOTtyZSBhbGwgcHJldHR5IHN0YW5kYXJkLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2N1c2VkLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLCBpdCYjMzk7cyB0aGUgbHluY2hwaW4gZm9yIHRoZSB3aG9sZSB0aGluZy4gVGhlbiwgdGhlIGluZGl2aWR1YWwgZHJpdmVyIGNvbmZpZ3Mgd2lsbCBuZWVkIHRvIGJlIGVuYWJsZWQ6IGBDT05GSUdfQkFSRVVEUGAsIGBDT05GSUdfSVBWTEFOYCwgYENPTkZJR19JUFZUQVBgLCBhbmQgYENPTkZJR19WRVRIYC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCBpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBjb25maXJtIHRoYXQsIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQgb3B0aW9uIGlzIGRlc2lnbmVkIGZvciwgaWYgcG9zc2libGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoYXQgb25lLgoKU28gdGhlIHBsYW46IHZlcmlmeSBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCwgaWRlbnRpZnkga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBhbmQgdGhlIENPTkZJRyBvcHRpb25zIHJlcXVpcmVkIHRvIHRlc3QgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFQlVHX05FVF9TTUFMTF9SVE5MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE0OT1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMjQ1LVx0c3RydWN0IGxpc3RfaGVhZFx0dW5yZWdfbGlzdDtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjI0NjojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIyNDctXHRzdHJ1Y3QgbGlzdF9oZWFkXHR1bnJlZ19saXN0X25ldDtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0NzU9c3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDc5LVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDgwOiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzQ4MS12b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLTk5LVxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaDoxMDA6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC0xMDEtdm9pZCBfX3J0bmxfbmV0X2xvY2soc3RydWN0IG5ldCAqbmV0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE5Ni0jZW5kaWZcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoxOTc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE5OC1cdC8qIE1vdmUgdG8gYSBiZXR0ZXIgcGxhY2Ugd2hlbiB0aGUgY29uZmlnIGd1YXJkIGlzIHJlbW92ZWQuICovXG4tLVxubmV0L0tjb25maWcuZGVidWc9MjE9Y29uZmlnIERFQlVHX05FVFxuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTI3LVxubmV0L0tjb25maWcuZGVidWc6Mjg6Y29uZmlnIERFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvS2NvbmZpZy5kZWJ1Zy0yOS1cdGJvb2wgXCYjMzQ7QWRkIGV4dHJhIHBlci1uZXRucyBtdXRleCBpbnNpZGUgUlROTFwmIzM0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyMDMwPXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjA5NC1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0KTtcbm5ldC9jb3JlL2Rldi5jOjEyMDk1OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbm5ldC9jb3JlL2Rldi5jLTEyMDk2LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjMxMT12b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIzMTQtXG5uZXQvY29yZS9kZXYuYzoxMjMxNTojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9kZXYuYy0xMjMxNi1cdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTIzNzY9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNDk0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpIHtcbm5ldC9jb3JlL2Rldi5jOjEyNDk1OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbm5ldC9jb3JlL2Rldi5jLTEyNDk2LVx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI1MjU9RVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTI2LVxubmV0L2NvcmUvZGV2LmM6MTI1Mjc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxubmV0L2NvcmUvZGV2LmMtMTI1Mjgtdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNjM2PWludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI3NzItXG5uZXQvY29yZS9kZXYuYzoxMjc3MzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9kZXYuYy0xMjc3NC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21vdmVfbmV0KG5ldF9vbGQsIG5ldCwgZGV2KTtcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NDAzPXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDIyLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjQyMzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDI0LVx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTg0PUVYUE9SVF9TWU1CT0wobG9ja2RlcF9ydG5sX2lzX2hlbGQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE4Ni1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE4NzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xODgtdm9pZCBfX3J0bmxfbmV0X2xvY2soc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyNDk9dm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjU3LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzI1ODojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjU5LVx0cnRubF9uZXRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKFwmIzM0O3J0bmxfbmV0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZGV2aWNlIFVucmVnaXN0cmF0aW9uIGFuZCBQb3RlbnRpYWwgSW1wYWN0IG9mIERFQlVHX05FVF9TTUFMTF9SVE5MKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgREVCVUdfTkVUX1NNQUxMX1JUTkxgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgYXJlYXM6IGBiYXJldWRwYCwgYGlwdmxhbmAsIGBpcHZ0YXBgLCBgdmV0aGAsIGFuZCBjb3JlIG5ldGRldmljZSB1bnJlZ2lzdHJhdGlvbi4gRnJvbSB0aGUgaW5pdGlhbCBnbGFuY2UsIGl0ICpzZWVtcyogZnVuY3Rpb25hbCwgYnV0IHdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXRhaWxzLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2Ugc3ltYm9scyBhbmQgYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Q6CgoqICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAKKiAgIGBydG5sX25ldF93b3JrX2Z1bmNgCiogICBgYmFyZXVkcF9kZWxsaW5rYAoqICAgYGlwdmxhbl9saW5rX2RlbGV0ZWAKKiAgIGBpcHZ0YXBfZGVsbGlua2AKKiAgIGB2ZXRoX2RlbGxpbmtgCiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGAKCkkmIzM5O20gbm93IGNoZWNraW5nIHRoZSB2aXNpYmlsaXR5IG9mIGNlcnRhaW4gZnVuY3Rpb25zLiBXZSBhbHJlYWR5IGtub3cgdGhhdCBgX19iYXJldWRwX2RlbGxpbmtgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gcmVtZW1iZXIuIGBfX2lwdmxhbl9saW5rX2RlbGV0ZWAgaXMgZXhwb3J0ZWQsIGFuZCB0aGF0IGlzIGltcG9ydGFudCB0b28uIGBfX2lwdnRhcF9kZWxsaW5rYCBhbmQgYHZldGhfZGVsbGlua2AgYXJlIHN0YXRpYy4gYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAgaXMgZXhwb3J0ZWQsIHdoaWxlIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAgYW5kIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAgYXJlIGdsb2JhbC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBlc3NlbnRpYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgdGhlc2U6CgoqICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAKKiAgIGBydG5sX25ldF93b3JrX2Z1bmNgCiogICBgYmFyZXVkcF9kZWxsaW5rYAoqICAgYGlwdmxhbl9saW5rX2RlbGV0ZWAKKiAgIGBpcHZ0YXBfZGVsbGlua2AKKiAgIGB2ZXRoX2RlbGxpbmtgCiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGAKCldlIGFsc28gbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczoKCiogICBgREVCVUdfTkVUX1NNQUxMX1JUTkxgCiogICBgQkFSRVVEUGAKKiAgIGBJUFZMQU5gCiogICBgSVBWVEFQYAoqICAgYFZFVEhgCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY29ycmVsYXRlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpdGggdGhlIHN5bWJvbHMuIEkgbmVlZCB0byBkaXZlIGluIGFuZCBjb25maXJtIGhvdyB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQgYW5kIGhvdyB0aGUgb3B0aW9uIGFmZmVjdHMgdGhlc2UgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgYW5kIGdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBrZXkgc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkFSRVVEUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTI0NT1jb25maWcgR0VORVZFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTktXG5kcml2ZXJzL25ldC9LY29uZmlnOjI2MDpjb25maWcgQkFSRVVEUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjEtXHR0cmlzdGF0ZSBcJiMzNDtCYXJlIFVEUCBFbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipWZXJpZnlpbmcgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2dpZXMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHNvbWUgY29yZSBuZXR3b3JrIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMuIEkgbmVlZCB0byByZWZyZXNoIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIGFuZCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBnbyB0aHJvdWdoIElQVkxBTiwgSVBWVEFQLCBhbmQgVkVUSC4gVGhlcmUgYXJlIHNvIG1hbnkgc3VidGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbSB0aGF0IGEgcXVpY2sgcmV2aWV3IGlzIGFsd2F5cyBnb29kLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgZXhhY3QgYmVoYXZpb3IgYW5kIHVzZS1jYXNlcyBmb3IgZWFjaC4gSG93IHRoZXkgaGFuZGxlIE1BQyBhZGRyZXNzZXMsIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBpbnRlcmZhY2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciByb3V0aW5nIGFuZCBicmlkZ2luZyBhcmUgYWxsIHRvcCBvZiBtaW5kLiBUaW1lIHRvIHJ1biBzb21lIHRlc3RzLCBtYXliZSBzcGluIHVwIGEgZmV3IGNvbnRhaW5lcnMgdG8gc2ltdWxhdGUgdHJhZmZpYyBhbmQgcHJvYmUgYXQgYSBncmFudWxhciBsZXZlbC4gV2UmIzM5O2xsIHNlZSBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJhY3QuIEl0JiMzOTtzIHRpbWUgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgYW5kIGVuc3VyZSBteSBrbm93bGVkZ2UgaXMgdXAtdG8tZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWTEFOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0xOTItXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5Mzpjb25maWcgSVBWTEFOX0wzU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0xOTQtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMTk4LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTk6Y29uZmlnIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUC1WTEFOIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFZUQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xOTk9Y29uZmlnIElQVkxBTlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjE1LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTY6Y29uZmlnIElQVlRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMTctXHR0cmlzdGF0ZSBcJiMzNDtJUC1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkVUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIFVucmVnaXN0cmF0aW9uIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgYEJBUkVVRFBgLCBgSVBWTEFOYCwgYElQVlRBUGAsIGFuZCBgVkVUSGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBkZXZpY2VzIGFyZSB1bnJlZ2lzdGVyZWQgaW4gdmFyaW91cyBzY2VuYXJpb3MuIE15IG1pbmQga2VlcHMganVtcGluZyB0byB0aGVzZSBrZXkgc3ltYm9sczogYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAsIGBydG5sX25ldF93b3JrX2Z1bmNgLCBhbG9uZyB3aXRoIHRoZSBkZXZpY2Utc3BlY2lmaWMgdW5saW5raW5nIGZ1bmN0aW9uczogYGJhcmV1ZHBfZGVsbGlua2AsIGBpcHZsYW5fbGlua19kZWxldGVgLCBgaXB2dGFwX2RlbGxpbmtgLCBgdmV0aF9kZWxsaW5rYCwgYW5kIGBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgZWFjaCBvZiB0aGVtIGNvbWVzIGludG8gcGxheS4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGlwdmxhbl9saW5rX2RlbGV0ZWAgbWFya2VkIGFzIHN0YXRpYyBhdCBzb21lIHBvaW50PyBBaCB5ZXMsIG5vdyBgX19pcHZsYW5fbGlua19kZWxldGVgIGlzIGV4cG9ydGVkLCBzbyBJIHRoaW5rIEkgbmVlZCB0byBhY2NvdW50IGZvciBib3RoIGhlcmUuIFNob3VsZCBJIGp1c3QgaW5jbHVkZSBib3RoIG9yIHJlbHkgb24gdGhlIGV4cG9ydGVkIHZlcnNpb24/IEFoLCBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGluY2x1ZGUgYm90aCwgdG8gYmUgdGhvcm91Z2guIE5vdywgbGV0JiMzOTtzIGluY2x1ZGUgYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBhbmQgYGlwdmxhbl9saW5rX2RlbGV0ZWAuIEFjdHVhbGx5LCB3YWl0LCBgaXB2bGFuX2xpbmtfZGVsZXRlYCBpcyBpbmRlZWQgc3RhdGljIHdpdGhpbiBgaXB2bGFuX21haW4uY2AuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwdmxhbl9saW5rX2RlbGV0ZWAgaW4gYGlwdmxhbl9tYWluLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdmxhbl9saW5rX2RlbGV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmg9MTcxPWludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaC0xNzItXHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oOjE3Mzp2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaC0xNzQtXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYz03MDc9RVhQT1JUX1NZTUJPTF9HUEwoaXB2bGFuX2xpbmtfbmV3KTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTcwOC1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjcwOTp2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTcxMC1cdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzI3LX1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjcyODpFWFBPUlRfU1lNQk9MKF9faXB2bGFuX2xpbmtfZGVsZXRlKTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTcyOS1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjczMDpzdGF0aWMgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTczMS17XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzM1LVx0aWYgKCFpcHZsYW4tXHUwMDNlZHlpbmcpXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3MzY6XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTczNy1cdG11dGV4X3VubG9jayhcdTAwMjZpcHZsYW4tXHUwMDNlcG9ydC1cdTAwM2Vwbm9kZXNfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM9NzY3PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcHZsYW5fbGlua19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzcyLVx0Lm5ld2xpbmtcdD0gaXB2bGFuX2xpbmtfbmV3LFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM6NzczOlx0LmRlbGxpbmtcdD0gaXB2bGFuX2xpbmtfZGVsZXRlLFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzc0LVx0LmdldF9saW5rX25ldCAgID0gaXB2bGFuX2dldF9saW5rX25ldCxcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYz03ODk9c3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTg0NS0jZW5kaWZcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjg0NjpcdFx0XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVx1MDAzZWRldiwgXHUwMDI2bHN0X2tpbGwpO1xuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtODQ3LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jPTExMj1zdGF0aWMgdm9pZCBfX2lwdnRhcF9kZWxsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMtMTE4LVx0dGFwX2RlbF9xdWV1ZXMoXHUwMDI2dmxhbnRhcC1cdTAwM2V0YXApO1xuZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jOjExOTpcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgZGV2LCBoZWFkKTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYy0xMjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg4MQoJCQkJCQkJb3V0cHV0OiAyOTUKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBSZWNvbW1lbmRhdGlvbjogV29ydGhGdXp6aW5nPXRydWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBuZXR3b3JrIGRldmljZXMgYXJlIHVucmVnaXN0ZXJlZCwgcGFydGljdWxhcmx5IGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuIFRoZSBpbmNsdXNpb24gb2YgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAsIGBydG5sX25ldF93b3JrX2Z1bmNgLCBgYmFyZXVkcF9kZWxsaW5rYCwgYF9fYmFyZXVkcF9kZWxsaW5rYCwgYGlwdmxhbl9saW5rX2RlbGV0ZWAsIGBfX2lwdmxhbl9saW5rX2RlbGV0ZWAsIGBpcHZ0YXBfZGVsbGlua2AsIGBfX2lwdnRhcF9kZWxsaW5rYCwgYHZldGhfZGVsbGlua2AsIGFuZCBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGAgc3VnZ2VzdHMgYSBzdWJzdGFudGlhbCBzaGlmdCBpbiBkZXZpY2UgbWFuYWdlbWVudC4gQm90aCBgX19pcHZsYW5fbGlua19kZWxldGVgIGFuZCBgaXB2bGFuX2xpbmtfZGVsZXRlYCBhcmUgc29saWQgY2FuZGlkYXRlcyBmb3IgYXR0ZW50aW9uLgoKVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIChgREVCVUdfTkVUX1NNQUxMX1JUTkxgLCBgQkFSRVVEUGAsIGBJUFZMQU5gLCBgSVBWVEFQYCwgYFZFVEhgKSBjb25maXJtIHRoYXQgdGhpcyB0b3VjaGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgZGlyZWN0bHksIHdpdGggdGhlIGNoYW5nZXMgc3ByZWFkIGFjcm9zcyBgYmFyZXVkcC5jYCwgYGlwdmxhbi9pcHZsYW4uaGAsIGBpcHZsYW4vaXB2bGFuX21haW4uY2AsIGBpcHZsYW4vaXB2dGFwLmNgLCBgdmV0aC5jYCwgYG5ldGRldmljZS5oYCwgYHJ0bmV0bGluay5oYCwgYG5ldF9uYW1lc3BhY2UuaGAsIGBkZXYuY2AsIGBuZXRfbmFtZXNwYWNlLmNgLCBhbmQgYHJ0bmV0bGluay5jYC4gR29vZCwgYWxsIHRoZSByZWxldmFudCBmaWxlcyBzZWVtIHRvIGJlIGFjY291bnRlZCBmb3IgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb25zLgoKVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEgaXMgb3VyIGd1aWRlIGhlcmUuIFRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycy4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHVzaW5nIGBERUJVR19ORVRfU01BTExfUlROTGAgYW5kIHVwZGF0ZXMgdG8gaG93IHZhcmlvdXMgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgaGFuZGxlIHVucmVnaXN0cmF0aW9uLCBzeW5jaHJvbml6YXRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSBzY3JlYW1zIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZSBpbnRlZ3JhdGlvbiBvZiBSVE5MIGxvY2tpbmcgaW50byBleGlzdGluZyB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMsIGVzcGVjaWFsbHkgYWNyb3NzIG5hbWVzcGFjZXMsIGlzIHJpcGUgZm9yIHN1YnRsZSBlcnJvcnMuIFRoZXJlZm9yZSwgZnV6emluZyBpcyBlc3NlbnRpYWwuIEl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGlkZW50aWZ5aW5nIHRoZXNlIGNvbXBsZXggY29uY3VycmVuY3kgaXNzdWVzIGJlZm9yZSB0aGV5IGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTkVUX1NNQUxMX1JUTkwmIzM0OywKICAgICYjMzQ7QkFSRVVEUCYjMzQ7LAogICAgJiMzNDtJUFZMQU4mIzM0OywKICAgICYjMzQ7SVBWVEFQJiMzNDssCiAgICAmIzM0O1ZFVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7cnRubF9uZXRfd29ya19mdW5jJiMzNDssCiAgICAmIzM0O2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtfX2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtpcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7X19pcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7aXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19pcHZ0YXBfZGVsbGluayYjMzQ7LAogICAgJiMzNDt2ZXRoX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7ZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTkVUX1NNQUxMX1JUTkwmIzM0OywKICAgICYjMzQ7QkFSRVVEUCYjMzQ7LAogICAgJiMzNDtJUFZMQU4mIzM0OywKICAgICYjMzQ7SVBWVEFQJiMzNDssCiAgICAmIzM0O1ZFVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7cnRubF9uZXRfd29ya19mdW5jJiMzNDssCiAgICAmIzM0O2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtfX2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtpcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7X19pcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7aXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19pcHZ0YXBfZGVsbGluayYjMzQ7LAogICAgJiMzNDt2ZXRoX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7ZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAwOjI2OjQwLjQ3NzU3MTE1OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjkyMTY5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX05FVF9TTUFMTF9SVE5MXCIsXG4gICAgXCJCQVJFVURQXCIsXG4gICAgXCJJUFZMQU5cIixcbiAgICBcIklQVlRBUFwiLFxuICAgIFwiVkVUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldFwiLFxuICAgIFwidW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0XCIsXG4gICAgXCJydG5sX25ldF93b3JrX2Z1bmNcIixcbiAgICBcImJhcmV1ZHBfZGVsbGlua1wiLFxuICAgIFwiX19iYXJldWRwX2RlbGxpbmtcIixcbiAgICBcImlwdmxhbl9saW5rX2RlbGV0ZVwiLFxuICAgIFwiX19pcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcImlwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJfX2lwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJ2ZXRoX2RlbGxpbmtcIixcbiAgICBcImRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6MjY6NDAuNDc3NTc4NDM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjEyNzA5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OGQ0MGE5NjYyNzExY2JiNjY0ZTQwMGE5MzYwZTcwZDY4M2YyMGQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMDA6MjY6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jIGIvZHJpdmVycy9uZXQvYmFyZXVkcC5jXFxuaW5kZXggNWVmODQxYzg1NTI2OTcuLmMzYjVlZDUyZDg3Nzg5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xcbkBAIC0zNiw2ICszNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmFyZXVkcF9uZXRfaWQ7XFxuIFxcbiBzdHJ1Y3QgYmFyZXVkcF9uZXQge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBiYXJldWRwX2xpc3Q7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGxvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYmFyZXVkcF9jb25mIHtcXG5AQCAtNjM2LDEwICs2MzcsMTUgQEAgc3RhdGljIHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcF9maW5kX2RldihzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuLFxcbiB7XFxuIFxcdHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgKnQgPSBOVUxMO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbitcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShiYXJldWRwLCBcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCwgbmV4dCkge1xcbiBcXHRcXHRpZiAoY29uZi1cXHUwMDNlcG9ydCA9PSBiYXJldWRwLVxcdTAwM2Vwb3J0KVxcbiBcXHRcXHRcXHR0ID0gYmFyZXVkcDtcXG4gXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZibi1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHRyZXR1cm4gdDtcXG4gfVxcbiBcXG5AQCAtNjc1LDcgKzY4MSwxMCBAQCBzdGF0aWMgaW50IGJhcmV1ZHBfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJuLVxcdTAwM2Vsb2NrKTtcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQsIFxcdTAwMjZibi1cXHUwMDNlYmFyZXVkcF9saXN0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZibi1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNjkyLDEyICs3MDEsMjYgQEAgc3RhdGljIGludCBiYXJldWRwX2xpbmtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQpO1xcbitcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQobmV0LCBkZXYsIGhlYWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBiYXJldWRwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuO1xcbiBcXG4tXFx0bGlzdF9kZWwoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQpO1xcbi1cXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xcbitcXHRibiA9IG5ldF9nZW5lcmljKGJhcmV1ZHAtXFx1MDAzZW5ldCwgYmFyZXVkcF9uZXRfaWQpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQpKVxcbitcXHRcXHRfX2JhcmV1ZHBfZGVsbGluayhkZXZfbmV0KGRldiksIGRldiwgaGVhZCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC03NzYsNiArNzk5LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IGJhcmV1ZHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCk7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNmJuLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC03ODUsMTMgKzgxMCwyNSBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHN0cnVjdCBiYXJldWRwX25ldCAqYm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcXG4gXFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCAqbmV4dDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJuLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCBcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCwgbmV4dClcXG4tXFx0XFx0YmFyZXVkcF9kZWxsaW5rKGJhcmV1ZHAtXFx1MDAzZWRldiwgZGV2X2tpbGxfbGlzdCk7XFxuK1xcdFxcdF9fYmFyZXVkcF9kZWxsaW5rKG5ldCwgYmFyZXVkcC1cXHUwMDNlZGV2LCBkZXZfa2lsbF9saXN0KTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHN0cnVjdCBiYXJldWRwX25ldCAqYm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcXG4rXFxuK1xcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJhcmV1ZHBfbmV0X29wcyA9IHtcXG4gXFx0LmluaXQgPSBiYXJldWRwX2luaXRfbmV0LFxcbiBcXHQuZXhpdF9ydG5sID0gYmFyZXVkcF9leGl0X3J0bmxfbmV0LFxcbitcXHQuZXhpdCA9IGJhcmV1ZHBfZXhpdF9uZXQsXFxuIFxcdC5pZCAgID0gXFx1MDAyNmJhcmV1ZHBfbmV0X2lkLFxcbiBcXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmFyZXVkcF9uZXQpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmggYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmhcXG5pbmRleCA4MGY4NGZjODcwMDhiMy4uOGQwNWFkNDgwNDM4ZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXFxuQEAgLTY5LDYgKzY5LDcgQEAgc3RydWN0IGlwdmxfZGV2IHtcXG4gXFx0REVDTEFSRV9CSVRNQVAobWFjX2ZpbHRlcnMsIElQVkxBTl9NQUNfRklMVEVSX1NJWkUpO1xcbiBcXHRuZXRkZXZfZmVhdHVyZXNfdFxcdHNmZWF0dXJlcztcXG4gXFx0dTMyXFx0XFx0XFx0bXNnX2VuYWJsZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdGR5aW5nO1xcbiB9O1xcbiBcXG4gc3RydWN0IGlwdmxfYWRkciB7XFxuQEAgLTkxLDEyICs5MiwxMyBAQCBzdHJ1Y3QgaXB2bF9wb3J0IHtcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWRcXHRobGhlYWRbSVBWTEFOX0hBU0hfU0laRV07XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRhZGRyc19sb2NrOyAvKiBndWFyZHMgaGFzaC10YWJsZSBhbmQgYWRkcnMgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGlwdmxhbnM7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdHBub2Rlc19sb2NrO1xcbiBcXHR1MTZcXHRcXHRcXHRtb2RlO1xcbiBcXHR1MTZcXHRcXHRcXHRmbGFncztcXG4gXFx0dTE2XFx0XFx0XFx0ZGV2X2lkX3N0YXJ0O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3cTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZFxcdGJhY2tsb2c7XFxuLVxcdGludFxcdFxcdFxcdGNvdW50O1xcbitcXHRyZWZjb3VudF90XFx0XFx0Y291bnQ7XFxuIFxcdHN0cnVjdCBpZGFcXHRcXHRpZGE7XFxuIFxcdG5ldGRldmljZV90cmFja2VyXFx0ZGV2X3RyYWNrZXI7XFxuIH07XFxuQEAgLTE2OCw3ICsxNzAsOCBAQCB2b2lkIGlwdmxhbl9jb3VudF9yeChjb25zdCBzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbixcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuLCBib29sIHN1Y2Nlc3MsIGJvb2wgbWNhc3QpO1xcbiBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcXG4rdm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XFxuIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBpcHZsYW5fbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTtcXG4gI2lmZGVmIENPTkZJR19JUFZMQU5fTDNTXFxuQEAgLTIwNyw0ICsyMTAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0aWZfaXNfaXB2bGFuX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZXJ4X2hhbmRsZXIpID09IGlwdmxhbl9oYW5kbGVfZnJhbWU7XFxuIH1cXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXFxuK2V4dGVybiB2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbisjZW5kaWZcXG4rXFxuICNlbmRpZiAvKiBfX0lQVkxBTl9IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcXG5pbmRleCBlZDQ2NDM5YTlmNGViMS4uZWU0NmE1NWY3M2QxNGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uY1xcbkBAIC03LDYgKzcsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJpcHZsYW4uaFxcXCJcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXFxuK3ZvaWQgKCpfX2lwdnRhcF9kZWxsaW5rX3B0cikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbitFWFBPUlRfU1lNQk9MKF9faXB2dGFwX2RlbGxpbmtfcHRyKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG5AQCAtMTYsNiArMjIsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxcbiBcXG4gXFx0QVNTRVJUX1JUTkwoKTtcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZW1vZGUgIT0gbnZhbCkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2Vwbm9kZXNfbG9jayk7XFxuK1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XFxuIFxcdFxcdFxcdGZsYWdzID0gaXB2bGFuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzO1xcbiBcXHRcXHRcXHRpZiAobnZhbCA9PSBJUFZMQU5fTU9ERV9MMyB8fCBudmFsID09IElQVkxBTl9NT0RFX0wzUykge1xcbkBAIC00MCw2ICs0OCw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsXFxuIFxcdFxcdFxcdGlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRwb3J0LVxcdTAwM2Vtb2RlID0gbnZhbDtcXG4rXFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtNTYsNiArNjYsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuIFxcdH1cXG4gXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtNzYsNiArODgsNyBAQCBzdGF0aWMgaW50IGlwdmxhbl9wb3J0X2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnBvcnQtXFx1MDAzZWhsaGVhZFtpZHhdKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2VhZGRyc19sb2NrKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2ViYWNrbG9nKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZwb3J0LVxcdTAwM2V3cSwgaXB2bGFuX3Byb2Nlc3NfbXVsdGljYXN0KTtcXG4gXFx0aWRhX2luaXQoXFx1MDAyNnBvcnQtXFx1MDAzZWlkYSk7XFxuQEAgLTg2LDYgKzk5LDcgQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZwb3J0LVxcdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycjpcXG5AQCAtOTMsMTYgKzEwNywxOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9wb3J0X2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3N0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IGlwdmxfcG9ydCAqcG9ydClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwoZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnQtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuLVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2cG9ydC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiBcXHRpZiAocG9ydC1cXHUwMDNlbW9kZSA9PSBJUFZMQU5fTU9ERV9MM1MpXFxuIFxcdFxcdGlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTtcXG4rXFxuIFxcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cG9ydC1cXHUwMDNld3EpO1xcbitcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnBvcnQtXFx1MDAzZWRldl90cmFja2VyKTtcXG4rXFxuIFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2cG9ydC1cXHUwMDNlYmFja2xvZykpICE9IE5VTEwpIHtcXG4gXFx0XFx0ZGV2X3B1dChza2ItXFx1MDAzZWRldik7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbkBAIC0xMTEsNiArMTI3LDI3IEBAIHN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0a2ZyZWUocG9ydCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X3B1dChzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnBvcnQtXFx1MDAzZWNvdW50KSlcXG4rXFx0XFx0aXB2bGFuX3BvcnRfZGVzdHJveShwb3J0KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBpcHZsX3BvcnQgKmlwdmxhbl9wb3J0X2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSBOVUxMO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkge1xcbitcXHRcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3JjdShkZXYpO1xcbitcXHRcXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlY291bnQpKVxcbitcXHRcXHRcXHRwb3J0ID0gTlVMTDtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBwb3J0O1xcbit9XFxuK1xcbiAjZGVmaW5lIElQVkxBTl9BTFdBWVNfT05fT0ZMT0FEUyBcXFxcXFxuIFxcdChORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgXFxcXFxcbiBcXHQgTkVUSUZfRl9HU09fUk9CVVNUIHwgTkVUSUZfRl9HU09fU09GVFdBUkUgfCBORVRJRl9GX0dTT19FTkNBUF9BTEwpXFxuQEAgLTE1MywzMCArMTkwLDQ1IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKCFpcHZsYW4tXFx1MDAzZXBjcHVfc3RhdHMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0bmV0ZGV2X2xvY2socGh5X2Rldik7XFxuK1xcbiBcXHRpZiAoIW5ldGlmX2lzX2lwdmxhbl9wb3J0KHBoeV9kZXYpKSB7XFxuIFxcdFxcdGVyciA9IGlwdmxhbl9wb3J0X2NyZWF0ZShwaHlfZGV2KTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcXG4gXFx0XFx0XFx0ZnJlZV9wZXJjcHUoaXB2bGFuLVxcdTAwM2VwY3B1X3N0YXRzKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbitcXHRcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XFxuK1xcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2cG9ydC1cXHUwMDNlY291bnQsIDEpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cG9ydC1cXHUwMDNlY291bnQpO1xcbiBcXHR9XFxuLVxcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcXG4tXFx0cG9ydC1cXHUwMDNlY291bnQgKz0gMTtcXG4rXFxuK1xcdG5ldGRldl91bmxvY2socGh5X2Rldik7XFxuK1xcbitcXHRpcHZsYW4tXFx1MDAzZXBvcnQgPSBwb3J0O1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGlwdmxhbl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpwaHlfZGV2ID0gaXB2bGFuLVxcdTAwM2VwaHlfZGV2O1xcbi1cXHRzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0O1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXY7XFxuIFxcbiBcXHRmcmVlX3BlcmNwdShpcHZsYW4tXFx1MDAzZXBjcHVfc3RhdHMpO1xcbiBcXG4tXFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xcbi1cXHRwb3J0LVxcdTAwM2Vjb3VudCAtPSAxO1xcbi1cXHRpZiAoIXBvcnQtXFx1MDAzZWNvdW50KVxcbi1cXHRcXHRpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQtXFx1MDAzZWRldik7XFxuK1xcdHBoeV9kZXYgPSBpcHZsYW4tXFx1MDAzZXBoeV9kZXY7XFxuK1xcdG5ldGRldl9ob2xkKHBoeV9kZXYsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuK1xcdG5ldGRldl9sb2NrKHBoeV9kZXYpO1xcbitcXG4rXFx0aXB2bGFuX3BvcnRfcHV0KGlwdmxhbi1cXHUwMDNlcG9ydCk7XFxuK1xcbitcXHRuZXRkZXZfdW5sb2NrKHBoeV9kZXYpO1xcbitcXHRuZXRkZXZfcHV0KHBoeV9kZXYsIFxcdTAwMjZkZXZfdHJhY2tlcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaXB2bGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtNTk0LDkgKzY0Niw3IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHQvKiBpcHZsYW5faW5pdCgpIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgcG9ydCwgaWYgcmVxdWlyZWQgKi9cXG4tXFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xcbi1cXHRpcHZsYW4tXFx1MDAzZXBvcnQgPSBwb3J0O1xcbitcXHRwb3J0ID0gaXB2bGFuLVxcdTAwM2Vwb3J0O1xcbiBcXG4gXFx0LyogSWYgdGhlIHBvcnQtaWQgYmFzZSBpcyBhdCB0aGUgTUFYIHZhbHVlLCB0aGVuIHdyYXAgaXQgYXJvdW5kIGFuZFxcbiBcXHQgKiBiZWdpbiBmcm9tIDB4MSBhZ2Fpbi4gVGhpcyBtYXkgYmUgZHVlIHRvIGEgYnVzeSBzeXN0ZW0gd2hlcmUgbG90c1xcbkBAIC02MzksNyArNjg5LDEwIEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byB1bmxpbmtfbmV0ZGV2O1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiBcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2aXB2bGFuLVxcdTAwM2Vwbm9kZSwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4rXFxuIFxcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHBoeV9kZXYsIGRldik7XFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtNjUzLDcgKzcwNiw4IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19uZXcpO1xcbiBcXG4tdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4rdm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHN0cnVjdCBpcHZsX2FkZHIgKmFkZHIsICpuZXh0O1xcbkBAIC02NjgsMTAgKzcyMiwyMCBAQCB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiBcXG4gXFx0aWRhX2ZyZWUoXFx1MDAyNmlwdmxhbi1cXHUwMDNlcG9ydC1cXHUwMDNlaWRhLCBkZXYtXFx1MDAzZWRldl9pZCk7XFxuIFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2aXB2bGFuLVxcdTAwM2Vwbm9kZSk7XFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChuZXQsIGRldiwgaGVhZCk7XFxuIFxcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi1cXHUwMDNlcGh5X2RldiwgZGV2KTtcXG4gfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19kZWxldGUpO1xcbitFWFBPUlRfU1lNQk9MKF9faXB2bGFuX2xpbmtfZGVsZXRlKTtcXG4rXFxuK3N0YXRpYyB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmlwdmxhbi1cXHUwMDNlcG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbitcXHRpZiAoIWlwdmxhbi1cXHUwMDNlZHlpbmcpXFxuK1xcdFxcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpcHZsYW4tXFx1MDAzZXBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4rfVxcbiBcXG4gdm9pZCBpcHZsYW5fbGlua19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuQEAgLTcyOSwxNCArNzkzLDE5IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4gXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbztcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiBcXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiwgKm5leHQ7XFxuK1xcdGludCBlcnIsIHJldCA9IE5PVElGWV9ET05FO1xcbiBcXHRzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0O1xcbiBcXHRMSVNUX0hFQUQobHN0X2tpbGwpO1xcbi1cXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFuZXRpZl9pc19pcHZsYW5fcG9ydChkZXYpKVxcbi1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK1xcdGlmIChldmVudCA9PSBORVRERVZfUFJFQ0hBTkdFVVBQRVIgfHxcXG4rXFx0ICAgIGV2ZW50ID09IE5FVERFVl9DSEFOR0VVUFBFUilcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xcbitcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0KGRldik7XFxuK1xcdGlmICghcG9ydClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4gXFxuIFxcdHN3aXRjaCAoZXZlbnQpIHtcXG4gXFx0Y2FzZSBORVRERVZfVVA6XFxuQEAgLTc2MCwxNiArODI5LDI2IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4gXFx0XFx0XFx0aXB2bGFuX21pZ3JhdGVfbDNzX2hvb2sob2xkbmV0LCBuZXduZXQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxcbitcXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOiB7XFxuK1xcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4rXFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCBcXHUwMDI2cG9ydC1cXHUwMDNlaXB2bGFucywgcG5vZGUpXFxuLVxcdFxcdFxcdGlwdmxhbi1cXHUwMDNlZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzLVxcdTAwM2VkZWxsaW5rKGlwdmxhbi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxzdF9raWxsKTtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlwdmxhbiwgbmV4dCwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XFxuK1xcdFxcdFxcdGlwdmxhbi1cXHUwMDNlZHlpbmcgPSB0cnVlO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUClcXG4rXFx0XFx0XFx0aWYgKGlwdmxhbi1cXHUwMDNlZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzICE9IFxcdTAwMjZpcHZsYW5fbGlua19vcHMpXFxuK1xcdFxcdFxcdFxcdF9faXB2dGFwX2RlbGxpbmtfcHRyKG5ldCwgaXB2bGFuLVxcdTAwM2VkZXYsIFxcdTAwMjZsc3Rfa2lsbCk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rI2VuZGlmXFxuK1xcdFxcdFxcdFxcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVxcdTAwM2VkZXYsIFxcdTAwMjZsc3Rfa2lsbCk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmxzdF9raWxsKTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcbitcXHR9XFxuIFxcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XFxuIFxcdFxcdFxcdG5ldGlmX2luaGVyaXRfdHNvX21heChpcHZsYW4tXFx1MDAzZWRldiwgZGV2KTtcXG5AQCAtNzg4LDggKzg2NywxMCBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuIFxcdFxcdFxcdGVyciA9IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShpcHZsYW4tXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwcmVjaGFkZHJfaW5mby1cXHUwMDNlZGV2X2FkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4rXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcbkBAIC04MDIsNyArODgzLDggQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbiBcXG4gXFx0Y2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOlxcbiBcXHRcXHQvKiBGb3JiaWQgdW5kZXJseWluZyBkZXZpY2UgdG8gY2hhbmdlIGl0cyB0eXBlLiAqL1xcbi1cXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4rXFx0XFx0cmV0ID0gTk9USUZZX0JBRDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6XFxuIFxcdGNhc2UgTkVUREVWX0JPTkRJTkdfRkFJTE9WRVI6XFxuQEAgLTgxMCw3ICs4OTIsMTIgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKVxcbiBcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoZXZlbnQsIGlwdmxhbi1cXHUwMDNlZGV2KTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4rXFxuK1xcdGlwdmxhbl9wb3J0X3B1dChwb3J0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qIHRoZSBjYWxsZXIgbXVzdCBoZWxkIHRoZSBhZGRycyBsb2NrICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuY1xcbmluZGV4IDJkNmJiZGRkMWVkZDUxLi42NmM5NDlkOTQyNjEwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcXG5AQCAtMTA5LDE0ICsxMDksMjYgQEAgc3RhdGljIGludCBpcHZ0YXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2lwdnRhcF9kZWxsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcXG4rXFx0dGFwX2RlbF9xdWV1ZXMoXFx1MDAyNnZsYW50YXAtXFx1MDAzZXRhcCk7XFxuK1xcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgZGV2LCBoZWFkKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IHZsYW50YXAtXFx1MDAzZXZsYW4ucG9ydDtcXG4gXFxuLVxcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcXG4tXFx0dGFwX2RlbF9xdWV1ZXMoXFx1MDAyNnZsYW4tXFx1MDAzZXRhcCk7XFxuLVxcdGlwdmxhbl9saW5rX2RlbGV0ZShkZXYsIGhlYWQpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2Vwbm9kZXNfbG9jayk7XFxuK1xcdGlmICghdmxhbnRhcC1cXHUwMDNldmxhbi5keWluZylcXG4rXFx0XFx0X19pcHZ0YXBfZGVsbGluayhkZXZfbmV0KGRldiksIGRldiwgaGVhZCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcHZ0YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtMTk4LDYgKzIxMCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gX19pcHZ0YXBfZGVsbGluaztcXG4rXFxuIFxcdGVyciA9IHRhcF9jcmVhdGVfY2RldihcXHUwMDI2aXB2dGFwX2NkZXYsIFxcdTAwMjZpcHZ0YXBfbWFqb3IsIFxcXCJpcHZ0YXBcXFwiLFxcbiBcXHRcXHRcXHQgICAgICBUSElTX01PRFVMRSk7XFxuIFxcdGlmIChlcnIpXFxuQEAgLTIyNCw2ICsyMzgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpcHZ0YXBfaW5pdCh2b2lkKVxcbiBvdXQyOlxcbiBcXHR0YXBfZGVzdHJveV9jZGV2KGlwdnRhcF9tYWpvciwgXFx1MDAyNmlwdnRhcF9jZGV2KTtcXG4gb3V0MTpcXG4rXFx0X19pcHZ0YXBfZGVsbGlua19wdHIgPSBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBtb2R1bGVfaW5pdChpcHZ0YXBfaW5pdCk7XFxuQEAgLTIzNCw2ICsyNTAsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaXB2dGFwX2V4aXQodm9pZClcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmlwdnRhcF9ub3RpZmllcl9ibG9jayk7XFxuIFxcdGNsYXNzX3VucmVnaXN0ZXIoXFx1MDAyNmlwdnRhcF9jbGFzcyk7XFxuIFxcdHRhcF9kZXN0cm95X2NkZXYoaXB2dGFwX21ham9yLCBcXHUwMDI2aXB2dGFwX2NkZXYpO1xcbitcXHRfX2lwdnRhcF9kZWxsaW5rX3B0ciA9IE5VTEw7XFxuIH1cXG4gbW9kdWxlX2V4aXQoaXB2dGFwX2V4aXQpO1xcbiBNT0RVTEVfQUxJQVNfUlROTF9MSU5LKFxcXCJpcHZ0YXBcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuaW5kZXggMWM1MTQyMTQ5MTc1MzYuLjgxNzBiZjMzY2NmOTU2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xcbkBAIC03Nyw2ICs3Nyw3IEBAIHN0cnVjdCB2ZXRoX3ByaXYge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqX3hkcF9wcm9nO1xcbiBcXHRzdHJ1Y3QgdmV0aF9ycVxcdFxcdCpycTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0cmVxdWVzdGVkX2hlYWRyb29tO1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlclxcdHBlZXJfdHJhY2tlcjtcXG4gfTtcXG4gXFxuIHN0cnVjdCB2ZXRoX3hkcF90eF9icSB7XFxuQEAgLTE5MDEsMTUgKzE5MDIsMTcgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIFxcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIocHJpdi1cXHUwMDNlcGVlciwgcGVlcik7XFxuK1xcdG5ldGRldl9ob2xkKHBlZXIsIFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbiBcXHRlcnIgPSB2ZXRoX2luaXRfcXVldWVzKGRldiwgdGIpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9xdWV1ZXM7XFxuIFxcbiBcXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVxcdTAwM2VwZWVyLCBkZXYpO1xcbitcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbiBcXHRlcnIgPSB2ZXRoX2luaXRfcXVldWVzKHBlZXIsIHRiKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfcXVldWVzO1xcbitcXHRcXHRnb3RvIGVycl9wZWVyX3F1ZXVlcztcXG4gXFxuIFxcdHZldGhfZGlzYWJsZV9ncm8oZGV2KTtcXG4gXFx0LyogdXBkYXRlIFhEUCBzdXBwb3J0ZWQgZmVhdHVyZXMgKi9cXG5AQCAtMTkxOCw3ICsxOTIxLDExIEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9wZWVyX3F1ZXVlczpcXG4rXFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyX3RyYWNrZXIpO1xcbitcXHRwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gZXJyX3F1ZXVlczpcXG4rXFx0bmV0ZGV2X3B1dChwZWVyLCBcXHUwMDI2cHJpdi1cXHUwMDNlcGVlcl90cmFja2VyKTtcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gZXJyX3JlZ2lzdGVyX2RldjpcXG4gXFx0Lyogbm90aGluZyB0byBkbyAqL1xcbkBAIC0xOTMzLDI0ICsxOTQwLDI1IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBzdGF0aWMgdm9pZCB2ZXRoX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbi1cXHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlciAqcGVlcl90cmFja2VyO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcjtcXG4rXFx0c3RydWN0IHZldGhfcHJpdiAqcHJpdjtcXG4gXFxuIFxcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRwZWVyID0gcnRubF9kZXJlZmVyZW5jZShwcml2LVxcdTAwM2VwZWVyKTtcXG4rXFx0cGVlcl90cmFja2VyID0gXFx1MDAyNnByaXYtXFx1MDAzZXBlZXJfdHJhY2tlcjtcXG4rXFx0cGVlciA9IHVucmN1X3BvaW50ZXIoeGNoZyhcXHUwMDI2cHJpdi1cXHUwMDNlcGVlciwgTlVMTCkpO1xcbitcXHRpZiAoIXBlZXIpXFxuK1xcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIE5vdGUgOiBkZWxsaW5rKCkgaXMgY2FsbGVkIGZyb20gZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCgpLFxcbi1cXHQgKiBiZWZvcmUgYSByY3Vfc3luY2hyb25pemUoKSBwb2ludC4gVGhlIGRldmljZXMgYXJlIGd1YXJhbnRlZWRcXG4tXFx0ICogbm90IGJlaW5nIGZyZWVkIGJlZm9yZSBvbmUgUkNVIGdyYWNlIHBlcmlvZC5cXG4tXFx0ICovXFxuLVxcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cXHUwMDNlcGVlciwgTlVMTCk7XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XFxuIFxcbi1cXHRpZiAocGVlcikge1xcbi1cXHRcXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XFxuLVxcdFxcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cXHUwMDNlcGVlciwgTlVMTCk7XFxuLVxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKHBlZXIsIGhlYWQpO1xcbi1cXHR9XFxuK1xcdHByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTtcXG4rXFx0ZGV2ID0gdW5yY3VfcG9pbnRlcih4Y2hnKFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyLCBOVUxMKSk7XFxuK1xcdGlmIChkZXYpXFxuK1xcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChkZXZfbmV0KGRldiksIHBlZXIsIGhlYWQpO1xcbitcXG4rXFx0bmV0ZGV2X3B1dChwZWVyLCBwZWVyX3RyYWNrZXIpO1xcbitcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBlZXJfdHJhY2tlcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2ZXRoX3BvbGljeVtWRVRIX0lORk9fTUFYICsgMV0gPSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjhkYjI1Yjc5NTczZTNjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTE4NDUsNiArMTg0NSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuICAqXFx0QG5hcGlfbGlzdDpcXHRMaXN0IGVudHJ5IHVzZWQgZm9yIHBvbGxpbmcgTkFQSSBkZXZpY2VzXFxuICAqXFx0QHVucmVnX2xpc3Q6XFx0TGlzdCBlbnRyeSAgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGVcXG4gICpcXHRcXHRcXHRkZXZpY2U7IHNlZSB0aGUgZnVuY3Rpb24gdW5yZWdpc3Rlcl9uZXRkZXZcXG4rICpcXHRAdW5yZWdfbGlzdF9uZXQ6TGlzdCBlbnRyeSB3aGVuIHdlIGFyZSB1bnJlZ2lzdGVyaW5nIHRoZSBjcm9zcy1uZXRuc1xcbisgKlxcdFxcdFxcdGRldmljZTsgc2VlIHRoZSBmdW5jdGlvbiB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoKVxcbiAgKlxcdEBjbG9zZV9saXN0OlxcdExpc3QgZW50cnkgdXNlZCB3aGVuIHdlIGFyZSBjbG9zaW5nIHRoZSBkZXZpY2VcXG4gICpcXHRAcHR5cGVfYWxsOiAgICAgRGV2aWNlLXNwZWNpZmljIHBhY2tldCBoYW5kbGVycyBmb3IgYWxsIHByb3RvY29sc1xcbiAgKlxcdEBwdHlwZV9zcGVjaWZpYzogRGV2aWNlLXNwZWNpZmljLCBwcm90b2NvbC1zcGVjaWZpYyBwYWNrZXQgaGFuZGxlcnNcXG5AQCAtMjI0MSw2ICsyMjQzLDkgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZGV2X2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRuYXBpX2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR1bnJlZ19saXN0O1xcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHR1bnJlZ19saXN0X25ldDtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRjbG9zZV9saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0cHR5cGVfYWxsO1xcbiBcXG5AQCAtMzQ3Miw2ICszNDc3LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIE5VTEwpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbit2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCk7XFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCBlYTM5ZGQyM2ExOTc2ZS4uOTU3MjkzMzllN2E1NDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcXG5AQCAtMTE1LDYgKzExNSwxMCBAQCBib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xcbiBcXG4gYm9vbCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQoc3RydWN0IG5ldCAqbmV0KTtcXG4gXFxuK3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpO1xcbit2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKTtcXG4rdm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4rXFxuICNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3J0bmxfbmV0KG5ldCwgcClcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQobmV0KSlcXG4gI2RlZmluZSBydG5sX25ldF9kZXJlZmVyZW5jZShuZXQsIHApXFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0xNTAsNiArMTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBBU1NFUlRfUlROTF9ORVQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRBU1NFUlRfUlROTCgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXFxuK3tcXG4rfVxcbitcXG4gI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfcnRubF9uZXQobmV0LCBwKVxcdFxcdFxcXFxcXG4gXFx0cmN1X2RlcmVmZXJlbmNlX3J0bmwocClcXG4gI2RlZmluZSBydG5sX25ldF9kZXJlZmVyZW5jZShuZXQsIHApXFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcXG5pbmRleCA4MGRlNWU5OGE2NmQ2Yy4uNTAxYWYxOTk5ZmU4MzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuQEAgLTE5Nyw2ICsxOTcsOSBAQCBzdHJ1Y3QgbmV0IHtcXG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbiBcXHQvKiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHdoZW4gdGhlIGNvbmZpZyBndWFyZCBpcyByZW1vdmVkLiAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRydG5sX211dGV4O1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRydG5sX3dvcms7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRkZXZfdW5yZWdfaGVhZDtcXG4rXFx0c3BpbmxvY2tfdFxcdFxcdGRldl91bnJlZ19sb2NrO1xcbiAjZW5kaWZcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZTT0NLRVRTKVxcbiBcXHRzdHJ1Y3QgbmV0bnNfdnNvY2tcXHR2c29jaztcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jNDNhNDRmYjY0OWZhMiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTExNjA4LDggKzExNjA4LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4gXFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcbiBcXHRcXHRcXHQvKiBSZWJyb2FkY2FzdCB1bnJlZ2lzdGVyIG5vdGlmaWNhdGlvbiAqL1xcbi1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgbGlzdCwgdG9kb19saXN0KVxcbitcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgbGlzdCwgdG9kb19saXN0KSB7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4rXFxuK1xcdFxcdFxcdFxcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xcbiBcXHRcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVIsIGRldik7XFxuK1xcdFxcdFxcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK1xcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdF9fcnRubF91bmxvY2soKTtcXG4gXFx0XFx0XFx0cmN1X2JhcnJpZXIoKTtcXG5AQCAtMTIwODcsNiArMTIwOTIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VuYXBpX2xpc3QpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0KTtcXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0X25ldCk7XFxuKyNlbmRpZlxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VjbG9zZV9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlbGlua193YXRjaF9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlYWRqX2xpc3QudXBwZXIpO1xcbkBAIC0xMjMwNCw2ICsxMjMxMiwxMCBAQCB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuIHtcXG4gXFx0QVNTRVJUX1JUTkwoKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcXG4rXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0X25ldCkpO1xcbisjZW5kaWZcXG4rXFxuIFxcdGlmIChoZWFkKSB7XFxuIFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3QsIGhlYWQpO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0xMjQ4MCw2ICsxMjQ5MiwxNiBAQCB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbm90aWZ5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIFxcdHN5bmNocm9uaXplX25ldCgpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpIHtcXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbitcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuK1xcbitcXHRcXHQvKiBzcGluX2xvY2soKSBjYW4gYmUgbW92ZWQgb3V0c2lkZSBvZiB0aGUgbG9vcFxcbitcXHRcXHQgKiBvbmNlIHRoZSBwZXItbmV0bnMgUlROTCBjb252ZXJzaW9uIGNvbXBsZXRlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfbG9jayk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3RfbmV0KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbisjZW5kaWZcXG4gXFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZWRldl9yZWdpc3RlcmVkX3RyYWNrZXIpO1xcbiBcXHRcXHRuZXRfc2V0X3RvZG8oZGV2KTtcXG4gXFx0XFx0Y250Kys7XFxuQEAgLTEyNTAyLDYgKzEyNTI0LDk2IEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2soZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKSB7XFxuK1xcdFxcdG5ldGRldl91bmxvY2soZGV2KTtcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRuZXQgPSBkZXZfbmV0KGRldik7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXG4rXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0KSk7XFxuK1xcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcXG4rXFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQsIFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19oZWFkKTtcXG4rXFx0cnRubF9uZXRfcXVldWVfd29yayhuZXQpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXG4rXFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KTtcXG4rXFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsIGhlYWQsIHVucmVnX2xpc3QpIHtcXG4rXFx0XFx0LyogT25jZSBhbGwgY3Jvc3MtbmV0bnMgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoKSBpc1xcbitcXHRcXHQgKiBjb252ZXJ0ZWQgdG8gX25ldCgpIChvciBmb3IgZGVidWdnaW5nKSwgcmVtb3ZlIHRoaXMgY2hlY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0REVCVUdfTkVUX1dBUk5fT05DRSghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCIlcyB3YXMgdW5yZWdpc3RlcmVkIGZyb20gYSBkaWZmZXJlbnQgbmV0bnMuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgZGV2LVxcdTAwM2VuYW1lKTtcXG4rXFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdCk7XFxuK1xcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3RfbmV0LCBcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCk7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChzdHJ1Y3QgbmV0ICpuZXRfb2xkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdGlmIChuZXRfb2xkIFxcdTAwM2UgbmV0KSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm5ldF9vbGQtXFx1MDAzZWRldl91bnJlZ19sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0X29sZC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXHRcXHRzcGluX2xvY2tfbmVzdGVkKFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0X25ldCkpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3RfbmV0LCBcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXRfb2xkLVxcdTAwM2VkZXZfdW5yZWdfbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrKTtcXG4rfVxcbitcXG4rdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnRtcDtcXG4rXFx0TElTVF9IRUFEKHVucmVnX2hlYWRfbmV0KTtcXG4rXFx0TElTVF9IRUFEKHVucmVnX2hlYWQpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrKTtcXG4rXFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCwgXFx1MDAyNnVucmVnX2hlYWRfbmV0KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCBcXHUwMDI2dW5yZWdfaGVhZF9uZXQsIHVucmVnX2xpc3RfbmV0KSB7XFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3QsIFxcdTAwMjZ1bnJlZ19oZWFkKTtcXG4rXFx0fVxcbitcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2dW5yZWdfaGVhZCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICpcXHR1bnJlZ2lzdGVyX25ldGRldiAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsXFxuICAqXFx0QGRldjogZGV2aWNlXFxuQEAgLTEyNjU4LDYgKzEyNzcwLDEwIEBAIGludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdG5ldGRldl91bmxvY2soZGV2KTtcXG4gXFx0ZGV2LVxcdTAwM2VpZmluZGV4ID0gbmV3X2lmaW5kZXg7XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21vdmVfbmV0KG5ldF9vbGQsIG5ldCwgZGV2KTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAobmV3X25hbWVbMF0pIHtcXG4gXFx0XFx0LyogUmVuYW1lIHRoZSBuZXRkZXYgdG8gcHJlcGFyZWQgbmFtZSAqL1xcbiBcXHRcXHR3cml0ZV9zZXFsb2NrX2JoKFxcdTAwMjZuZXRkZXZfcmVuYW1lX2xvY2spO1xcbkBAIC0xMzAzNCw3ICsxMzE1MCw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHQgKiBQdXNoIGFsbCBtaWdyYXRhYmxlIG5ldHdvcmsgZGV2aWNlcyBiYWNrIHRvIHRoZVxcbiBcXHQgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXFxuIFxcdCAqL1xcbi1cXHRBU1NFUlRfUlROTCgpO1xcbitcXG4gXFx0Zm9yX2VhY2hfbmV0ZGV2X3NhZmUobmV0LCBkZXYsIGF1eCkge1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXHRcXHRjaGFyIGZiX25hbWVbSUZOQU1TSVpdO1xcbkBAIC0xMzA3NywyMSArMTMxOTMsMzYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxcbiBcXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdF9fcnRubF9uZXRfbG9jayhcXHUwMDI2aW5pdF9uZXQpO1xcbitcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShuZXQsIG5ldF9saXN0LCBleGl0X2xpc3QpIHtcXG4rXFx0XFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XFxuIFxcdFxcdGRlZmF1bHRfZGV2aWNlX2V4aXRfbmV0KG5ldCk7XFxuK1xcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXG4rXFx0X19ydG5sX25ldF91bmxvY2soXFx1MDAyNmluaXRfbmV0KTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7XFxuK1xcdFxcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xcbitcXG4gXFx0XFx0Zm9yX2VhY2hfbmV0ZGV2X3JldmVyc2UobmV0LCBkZXYpIHtcXG4gXFx0XFx0XFx0aWYgKGRldi1cXHUwMDNlcnRubF9saW5rX29wcyBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZXJ0bmxfbGlua19vcHMtXFx1MDAzZWRlbGxpbmspXFxuIFxcdFxcdFxcdFxcdGRldi1cXHUwMDNlcnRubF9saW5rX29wcy1cXHUwMDNlZGVsbGluayhkZXYsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuK1xcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuIFxcdH1cXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRydG5sX25ldF9mbHVzaF93b3JrcXVldWUoKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBfX25ldF9pbml0ZGF0YSBkZWZhdWx0X2RldmljZV9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xcbmluZGV4IGQ5ZGFmZTI0ZjU3ZTNmLi5hOTFkMmI1OGFhZGRmOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG5AQCAtMTgxLDYgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIG9wc19leGl0X3J0bmxfbGlzdChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpvcHNfbGlzdCxcXG4gXFx0XFx0XFx0XFx0b3BzLVxcdTAwM2VleGl0X3J0bmwobmV0LCBcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0KG5ldCwgXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXHRcXHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xcbiBcXHR9XFxuIFxcbkBAIC00MjIsNiArNDIzLDkgQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25cXG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZuZXQtXFx1MDAzZXJ0bmxfbXV0ZXgpO1xcbiBcXHRsb2NrX3NldF9jbXBfZm4oXFx1MDAyNm5ldC1cXHUwMDNlcnRubF9tdXRleCwgcnRubF9uZXRfbG9ja19jbXBfZm4sIE5VTEwpO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrLCBydG5sX25ldF93b3JrX2Z1bmMpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrKTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VwdHlwZV9hbGwpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmIxMjlmNzkzZDg1MTY0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXFxuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5AQCAtMTk3LDYgKzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcbitcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldChuZXQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlcnRubF9tdXRleCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX3J0bmxfbmV0X3VubG9jayk7XFxuQEAgLTI3Myw2ICsyNzQsMjkgQEAgYm9vbCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSBcXHUwMDI2XFx1MDAyNiBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF9tdXRleCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQpO1xcbitcXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpydG5sX25ldF93cTtcXG4rXFxuK3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0cXVldWVfd29yayhydG5sX25ldF93cSwgXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrKTtcXG4rfVxcbitcXG4rdm9pZCBydG5sX25ldF9mbHVzaF93b3JrcXVldWUodm9pZClcXG4re1xcbitcXHRmbHVzaF93b3JrcXVldWUocnRubF9uZXRfd3EpO1xcbit9XFxuK1xcbit2b2lkIHJ0bmxfbmV0X3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7XFxuK1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0bmxfbmV0X2xvY2sobmV0KTtcXG4rXFx0cnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK31cXG4gI2Vsc2VcXG4gc3RhdGljIGludCBydG5sX25ldF9jbXBfbG9ja3MoY29uc3Qgc3RydWN0IG5ldCAqbmV0X2EsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9iKVxcbiB7XFxuQEAgLTI4MiwxMCArMzA2LDExIEBAIHN0YXRpYyBpbnQgcnRubF9uZXRfY21wX2xvY2tzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9hLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYilcXG4gI2VuZGlmXFxuIFxcbiBzdHJ1Y3QgcnRubF9uZXRzIHtcXG4tXFx0LyogLVxcdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDMgbmV0bnMgYXQgbW9zdDtcXG4tXFx0ICogMiBmb3IgdGhlIG5ldyBkZXZpY2UsIDEgZm9yIGl0cyBwZWVyLlxcbitcXHQvKiAtXFx1MDAzZW5ld2xpbmsoKSBuZWVkcyB0byBmcmVlemUgNCBuZXRucyBhdCBtb3N0O1xcbitcXHQgKiAyIGZvciB0aGUgbmV3IGRldmljZSwgMSBmb3IgaXRzIHBlZXIsIDEgZm9yXFxuK1xcdCAqIGFuIGV4aXN0aW5nIGRldmljZSAoZG9fc2V0bGluaygpIHBhdGgpLlxcbiBcXHQgKi9cXG4tXFx0c3RydWN0IG5ldCAqbmV0WzNdO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRbNF07XFxuIFxcdHVuc2lnbmVkIGNoYXIgbGVuO1xcbiB9O1xcbiBcXG5AQCAtNjM2LDE2ICs2NjEsMTUgQEAgaW50IHJ0bmxfbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfbGlua19yZWdpc3Rlcik7XFxuIFxcbi1zdGF0aWMgdm9pZCBfX3J0bmxfa2lsbF9saW5rcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXFxuK3N0YXRpYyB2b2lkIF9fcnRubF9raWxsX2xpbmtzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi1cXHRMSVNUX0hFQUQobGlzdF9raWxsKTtcXG4gXFxuIFxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbiBcXHRcXHRpZiAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID09IG9wcylcXG4tXFx0XFx0XFx0b3BzLVxcdTAwM2VkZWxsaW5rKGRldiwgXFx1MDAyNmxpc3Rfa2lsbCk7XFxuK1xcdFxcdFxcdG9wcy1cXHUwMDNlZGVsbGluayhkZXYsIGRldl9raWxsX2xpc3QpO1xcbiBcXHR9XFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmxpc3Rfa2lsbCk7XFxuIH1cXG4gXFxuIC8qIFJldHVybiB3aXRoIHRoZSBydG5sX2xvY2sgaGVsZCB3aGVuIHRoZXJlIGFyZSBubyBuZXR3b3JrXFxuQEAgLTY3Niw2ICs3MDAsNyBAQCBzdGF0aWMgdm9pZCBydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwodm9pZClcXG4gICovXFxuIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcXG4ge1xcbitcXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxpbmtfb3BzX211dGV4KTtcXG5AQCAtNjg5LDggKzcxNCwxNCBAQCB2b2lkIHJ0bmxfbGlua191bnJlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbiBcXHRydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwoKTtcXG4gXFxuLVxcdGZvcl9lYWNoX25ldChuZXQpXFxuLVxcdFxcdF9fcnRubF9raWxsX2xpbmtzKG5ldCwgb3BzKTtcXG4rXFx0Zm9yX2VhY2hfbmV0KG5ldCkge1xcbitcXHRcXHRfX3J0bmxfbmV0X2xvY2sobmV0KTtcXG4rXFx0XFx0X19ydG5sX2tpbGxfbGlua3MobmV0LCBvcHMsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuK1xcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK1xcdH1cXG4rXFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbkBAIC00MTU1LDYgKzQxODYsOCBAQCBzdGF0aWMgaW50IHJ0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRydG5sX25ldHNfYWRkKFxcdTAwMjZydG5sX25ldHMsIGdldF9uZXQoc29ja19uZXQoc2tiLVxcdTAwM2VzaykpKTtcXG4rXFxuIFxcdHJ0bmxfbmV0c19sb2NrKFxcdTAwMjZydG5sX25ldHMpO1xcbiBcXHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcXG4gXFx0cnRubF9uZXRzX3VubG9jayhcXHUwMDI2cnRubF9uZXRzKTtcXG5AQCAtNzIyMSw0ICs3MjU0LDEwIEBAIHZvaWQgX19pbml0IHJ0bmV0bGlua19pbml0KHZvaWQpXFxuIFxcdHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2cnRuZXRsaW5rX2Rldl9ub3RpZmllcik7XFxuIFxcbiBcXHRydG5sX3JlZ2lzdGVyX21hbnkocnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcXG4rXFx0cnRubF9uZXRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKFxcXCJydG5sX25ldFxcXCIpO1xcbitcXHRpZiAoIXJ0bmxfbmV0X3dxKVxcbitcXHRcXHRwYW5pYyhcXFwiQ291bGQgbm90IGNyZWF0ZSBydG5sX25ldCB3b3JrcVxcXCIpO1xcbisjZW5kaWZcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNjo0MC44Mzk1NzkyNjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTMwMTUwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX05FVF9TTUFMTF9SVE5MXCIsXG4gICAgXCJCQVJFVURQXCIsXG4gICAgXCJJUFZMQU5cIixcbiAgICBcIklQVlRBUFwiLFxuICAgIFwiVkVUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldFwiLFxuICAgIFwidW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0XCIsXG4gICAgXCJydG5sX25ldF93b3JrX2Z1bmNcIixcbiAgICBcImJhcmV1ZHBfZGVsbGlua1wiLFxuICAgIFwiX19iYXJldWRwX2RlbGxpbmtcIixcbiAgICBcImlwdmxhbl9saW5rX2RlbGV0ZVwiLFxuICAgIFwiX19pcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcImlwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJfX2lwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJ2ZXRoX2RlbGxpbmtcIixcbiAgICBcImRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OGQ0MGE5NjYyNzExY2JiNjY0ZTQwMGE5MzYwZTcwZDY4M2YyMGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwMDoyNjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JhcmV1ZHAuYyBiL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xuaW5kZXggNWVmODQxYzg1NTI2OTcuLmMzYjVlZDUyZDg3Nzg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jXG4rKysgYi9kcml2ZXJzL25ldC9iYXJldWRwLmNcbkBAIC0zNiw2ICszNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmFyZXVkcF9uZXRfaWQ7XG4gXG4gc3RydWN0IGJhcmV1ZHBfbmV0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGJhcmV1ZHBfbGlzdDtcbitcdHN0cnVjdCBtdXRleFx0XHRsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJhcmV1ZHBfY29uZiB7XG5AQCAtNjM2LDEwICs2MzcsMTUgQEAgc3RhdGljIHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcF9maW5kX2RldihzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuLFxuIHtcbiBcdHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgKnQgPSBOVUxMO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmFyZXVkcCwgXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0LCBuZXh0KSB7XG4gXHRcdGlmIChjb25mLVx1MDAzZXBvcnQgPT0gYmFyZXVkcC1cdTAwM2Vwb3J0KVxuIFx0XHRcdHQgPSBiYXJldWRwO1xuIFx0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuK1xuIFx0cmV0dXJuIHQ7XG4gfVxuIFxuQEAgLTY3NSw3ICs2ODEsMTAgQEAgc3RhdGljIGludCBiYXJldWRwX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNmJhcmV1ZHAtXHUwMDNlbmV4dCwgXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OTIsMTIgKzcwMSwyNiBAQCBzdGF0aWMgaW50IGJhcmV1ZHBfbGlua19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbit7XG4rXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1xuK1x0bGlzdF9kZWxfaW5pdChcdTAwMjZiYXJldWRwLVx1MDAzZW5leHQpO1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYmFyZXVkcF9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4ge1xuIFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBiYXJldWRwX25ldCAqYm47XG4gXG4tXHRsaXN0X2RlbChcdTAwMjZiYXJldWRwLVx1MDAzZW5leHQpO1xuLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbitcdGJuID0gbmV0X2dlbmVyaWMoYmFyZXVkcC1cdTAwM2VuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Ym4tXHUwMDNlbG9jayk7XG4rXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2YmFyZXVkcC1cdTAwM2VuZXh0KSlcbitcdFx0X19iYXJldWRwX2RlbGxpbmsoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTc3Niw2ICs3OTksOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgYmFyZXVkcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC03ODUsMTMgKzgxMCwyNSBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7XG4gXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAsICpuZXh0O1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCBcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QsIG5leHQpXG4tXHRcdGJhcmV1ZHBfZGVsbGluayhiYXJldWRwLVx1MDAzZWRldiwgZGV2X2tpbGxfbGlzdCk7XG4rXHRcdF9fYmFyZXVkcF9kZWxsaW5rKG5ldCwgYmFyZXVkcC1cdTAwM2VkZXYsIGRldl9raWxsX2xpc3QpO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHN0cnVjdCBiYXJldWRwX25ldCAqYm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcbitcbitcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QpKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBiYXJldWRwX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IGJhcmV1ZHBfaW5pdF9uZXQsXG4gXHQuZXhpdF9ydG5sID0gYmFyZXVkcF9leGl0X3J0bmxfbmV0LFxuK1x0LmV4aXQgPSBiYXJldWRwX2V4aXRfbmV0LFxuIFx0LmlkICAgPSBcdTAwMjZiYXJldWRwX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiYXJldWRwX25ldCksXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmggYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmhcbmluZGV4IDgwZjg0ZmM4NzAwOGIzLi44ZDA1YWQ0ODA0MzhmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaFxuKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXG5AQCAtNjksNiArNjksNyBAQCBzdHJ1Y3QgaXB2bF9kZXYge1xuIFx0REVDTEFSRV9CSVRNQVAobWFjX2ZpbHRlcnMsIElQVkxBTl9NQUNfRklMVEVSX1NJWkUpO1xuIFx0bmV0ZGV2X2ZlYXR1cmVzX3RcdHNmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4rXHRib29sXHRcdFx0ZHlpbmc7XG4gfTtcbiBcbiBzdHJ1Y3QgaXB2bF9hZGRyIHtcbkBAIC05MSwxMiArOTIsMTMgQEAgc3RydWN0IGlwdmxfcG9ydCB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZFx0aGxoZWFkW0lQVkxBTl9IQVNIX1NJWkVdO1xuIFx0c3BpbmxvY2tfdFx0XHRhZGRyc19sb2NrOyAvKiBndWFyZHMgaGFzaC10YWJsZSBhbmQgYWRkcnMgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGlwdmxhbnM7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0cG5vZGVzX2xvY2s7XG4gXHR1MTZcdFx0XHRtb2RlO1xuIFx0dTE2XHRcdFx0ZmxhZ3M7XG4gXHR1MTZcdFx0XHRkZXZfaWRfc3RhcnQ7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdxO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0YmFja2xvZztcbi1cdGludFx0XHRcdGNvdW50O1xuK1x0cmVmY291bnRfdFx0XHRjb3VudDtcbiBcdHN0cnVjdCBpZGFcdFx0aWRhO1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXJcdGRldl90cmFja2VyO1xuIH07XG5AQCAtMTY4LDcgKzE3MCw4IEBAIHZvaWQgaXB2bGFuX2NvdW50X3J4KGNvbnN0IHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgc3VjY2VzcywgYm9vbCBtY2FzdCk7XG4gaW50IGlwdmxhbl9saW5rX25ldyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbit2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGlwdmxhbl9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpO1xuICNpZmRlZiBDT05GSUdfSVBWTEFOX0wzU1xuQEAgLTIwNyw0ICsyMTAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0aWZfaXNfaXB2bGFuX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGlwdmxhbl9oYW5kbGVfZnJhbWU7XG4gfVxuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXG4rZXh0ZXJuIHZvaWQgKCpfX2lwdnRhcF9kZWxsaW5rX3B0cikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuKyNlbmRpZlxuK1xuICNlbmRpZiAvKiBfX0lQVkxBTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uY1xuaW5kZXggZWQ0NjQzOWE5ZjRlYjEuLmVlNDZhNTVmNzNkMTRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jXG5AQCAtNyw2ICs3LDEyIEBAXG4gXG4gI2luY2x1ZGUgXCJpcHZsYW4uaFwiXG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUClcbit2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuK0VYUE9SVF9TWU1CT0woX19pcHZ0YXBfZGVsbGlua19wdHIpO1xuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuQEAgLTE2LDYgKzIyLDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCxcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXHRpZiAocG9ydC1cdTAwM2Vtb2RlICE9IG52YWwpIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbitcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpcHZsYW4sIFx1MDAyNnBvcnQtXHUwMDNlaXB2bGFucywgcG5vZGUpIHtcbiBcdFx0XHRmbGFncyA9IGlwdmxhbi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3M7XG4gXHRcdFx0aWYgKG52YWwgPT0gSVBWTEFOX01PREVfTDMgfHwgbnZhbCA9PSBJUFZMQU5fTU9ERV9MM1MpIHtcbkBAIC00MCw2ICs0OCw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsXG4gXHRcdFx0aXB2bGFuX2wzc191bnJlZ2lzdGVyKHBvcnQpO1xuIFx0XHR9XG4gXHRcdHBvcnQtXHUwMDNlbW9kZSA9IG52YWw7XG4rXG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTU2LDYgKzY2LDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCxcbiBcdFx0XHRcdFx0IE5VTEwpO1xuIFx0fVxuIFxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtNzYsNiArODgsNyBAQCBzdGF0aWMgaW50IGlwdmxhbl9wb3J0X2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2cG9ydC1cdTAwM2VobGhlYWRbaWR4XSk7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwb3J0LVx1MDAzZWFkZHJzX2xvY2spO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cG9ydC1cdTAwM2ViYWNrbG9nKTtcbiBcdElOSVRfV09SSyhcdTAwMjZwb3J0LVx1MDAzZXdxLCBpcHZsYW5fcHJvY2Vzc19tdWx0aWNhc3QpO1xuIFx0aWRhX2luaXQoXHUwMDI2cG9ydC1cdTAwM2VpZGEpO1xuQEAgLTg2LDYgKzk5LDcgQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNnBvcnQtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyOlxuQEAgLTkzLDE2ICsxMDcsMTggQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQpXG4ge1xuLVx0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydC1cdTAwM2VkZXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuLVx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnBvcnQtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0aWYgKHBvcnQtXHUwMDNlbW9kZSA9PSBJUFZMQU5fTU9ERV9MM1MpXG4gXHRcdGlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTtcbitcbiBcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cG9ydC1cdTAwM2V3cSk7XG4rXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cG9ydC1cdTAwM2VkZXZfdHJhY2tlcik7XG4rXG4gXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cG9ydC1cdTAwM2ViYWNrbG9nKSkgIT0gTlVMTCkge1xuIFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbkBAIC0xMTEsNiArMTI3LDI3IEBAIHN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGtmcmVlKHBvcnQpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9wdXQoc3RydWN0IGlwdmxfcG9ydCAqcG9ydClcbit7XG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBvcnQtXHUwMDNlY291bnQpKVxuK1x0XHRpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGlwdmxfcG9ydCAqaXB2bGFuX3BvcnRfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IE5VTEw7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkge1xuK1x0XHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1x0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZwb3J0LVx1MDAzZWNvdW50KSlcbitcdFx0XHRwb3J0ID0gTlVMTDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHBvcnQ7XG4rfVxuK1xuICNkZWZpbmUgSVBWTEFOX0FMV0FZU19PTl9PRkxPQURTIFxcXG4gXHQoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IFxcXG4gXHQgTkVUSUZfRl9HU09fUk9CVVNUIHwgTkVUSUZfRl9HU09fU09GVFdBUkUgfCBORVRJRl9GX0dTT19FTkNBUF9BTEwpXG5AQCAtMTUzLDMwICsxOTAsNDUgQEAgc3RhdGljIGludCBpcHZsYW5faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKCFpcHZsYW4tXHUwMDNlcGNwdV9zdGF0cylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4rXHRuZXRkZXZfbG9jayhwaHlfZGV2KTtcbitcbiBcdGlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQocGh5X2RldikpIHtcbiBcdFx0ZXJyID0gaXB2bGFuX3BvcnRfY3JlYXRlKHBoeV9kZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdFx0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcbiBcdFx0XHRmcmVlX3BlcmNwdShpcHZsYW4tXHUwMDNlcGNwdV9zdGF0cyk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuK1x0XHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XG4rXHRcdHJlZmNvdW50X3NldChcdTAwMjZwb3J0LVx1MDAzZWNvdW50LCAxKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBvcnQtXHUwMDNlY291bnQpO1xuIFx0fVxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuLVx0cG9ydC1cdTAwM2Vjb3VudCArPSAxO1xuK1xuK1x0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcbitcbitcdGlwdmxhbi1cdTAwM2Vwb3J0ID0gcG9ydDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcHZsYW5fdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwdmxfZGV2ICppcHZsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2Rldjtcbi1cdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQ7XG4rXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpwaHlfZGV2O1xuIFxuIFx0ZnJlZV9wZXJjcHUoaXB2bGFuLVx1MDAzZXBjcHVfc3RhdHMpO1xuIFxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuLVx0cG9ydC1cdTAwM2Vjb3VudCAtPSAxO1xuLVx0aWYgKCFwb3J0LVx1MDAzZWNvdW50KVxuLVx0XHRpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQtXHUwMDNlZGV2KTtcbitcdHBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2RldjtcbitcdG5ldGRldl9ob2xkKHBoeV9kZXYsIFx1MDAyNmRldl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbitcdG5ldGRldl9sb2NrKHBoeV9kZXYpO1xuK1xuK1x0aXB2bGFuX3BvcnRfcHV0KGlwdmxhbi1cdTAwM2Vwb3J0KTtcbitcbitcdG5ldGRldl91bmxvY2socGh5X2Rldik7XG4rXHRuZXRkZXZfcHV0KHBoeV9kZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiB9XG4gXG4gc3RhdGljIGludCBpcHZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuQEAgLTU5NCw5ICs2NDYsNyBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0LyogaXB2bGFuX2luaXQoKSB3b3VsZCBoYXZlIGNyZWF0ZWQgdGhlIHBvcnQsIGlmIHJlcXVpcmVkICovXG4tXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XG4tXHRpcHZsYW4tXHUwMDNlcG9ydCA9IHBvcnQ7XG4rXHRwb3J0ID0gaXB2bGFuLVx1MDAzZXBvcnQ7XG4gXG4gXHQvKiBJZiB0aGUgcG9ydC1pZCBiYXNlIGlzIGF0IHRoZSBNQVggdmFsdWUsIHRoZW4gd3JhcCBpdCBhcm91bmQgYW5kXG4gXHQgKiBiZWdpbiBmcm9tIDB4MSBhZ2Fpbi4gVGhpcyBtYXkgYmUgZHVlIHRvIGEgYnVzeSBzeXN0ZW0gd2hlcmUgbG90c1xuQEAgLTYzOSw3ICs2ODksMTAgQEAgaW50IGlwdmxhbl9saW5rX25ldyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byB1bmxpbmtfbmV0ZGV2O1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmlwdmxhbi1cdTAwM2Vwbm9kZSwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbitcbiBcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHBoeV9kZXYsIGRldik7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NTMsNyArNzA2LDggQEAgaW50IGlwdmxhbl9saW5rX25ldyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19uZXcpO1xuIFxuLXZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4rdm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbiBcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcHZsX2FkZHIgKmFkZHIsICpuZXh0O1xuQEAgLTY2OCwxMCArNzIyLDIwIEBAIHZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXG4gXHRpZGFfZnJlZShcdTAwMjZpcHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VpZGEsIGRldi1cdTAwM2VkZXZfaWQpO1xuIFx0bGlzdF9kZWxfcmN1KFx1MDAyNmlwdmxhbi1cdTAwM2Vwbm9kZSk7XG4tXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbiBcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi1cdTAwM2VwaHlfZGV2LCBkZXYpO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19kZWxldGUpO1xuK0VYUE9SVF9TWU1CT0woX19pcHZsYW5fbGlua19kZWxldGUpO1xuK1xuK3N0YXRpYyB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2aXB2bGFuLVx1MDAzZXBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuK1x0aWYgKCFpcHZsYW4tXHUwMDNlZHlpbmcpXG4rXHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZpcHZsYW4tXHUwMDNlcG9ydC1cdTAwM2Vwbm9kZXNfbG9jayk7XG4rfVxuIFxuIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG5AQCAtNzI5LDE0ICs3OTMsMTkgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuLCAqbmV4dDtcbitcdGludCBlcnIsIHJldCA9IE5PVElGWV9ET05FO1xuIFx0c3RydWN0IGlwdmxfcG9ydCAqcG9ydDtcbiBcdExJU1RfSEVBRChsc3Rfa2lsbCk7XG4tXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFuZXRpZl9pc19pcHZsYW5fcG9ydChkZXYpKVxuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHRpZiAoZXZlbnQgPT0gTkVUREVWX1BSRUNIQU5HRVVQUEVSIHx8XG4rXHQgICAgZXZlbnQgPT0gTkVUREVWX0NIQU5HRVVQUEVSKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKGRldik7XG4rXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0KGRldik7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuIFx0Y2FzZSBORVRERVZfVVA6XG5AQCAtNzYwLDE2ICs4MjksMjYgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0XHRcdGlwdmxhbl9taWdyYXRlX2wzc19ob29rKG9sZG5ldCwgbmV3bmV0KTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4tXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuK1x0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjoge1xuK1x0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4rXG4gXHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19VTlJFR0lTVEVSSU5HKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKVxuLVx0XHRcdGlwdmxhbi1cdTAwM2VkZXYtXHUwMDNlcnRubF9saW5rX29wcy1cdTAwM2VkZWxsaW5rKGlwdmxhbi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2bHN0X2tpbGwpO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XG4rXHRcdFx0aXB2bGFuLVx1MDAzZWR5aW5nID0gdHJ1ZTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWVEFQKVxuK1x0XHRcdGlmIChpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgIT0gXHUwMDI2aXB2bGFuX2xpbmtfb3BzKVxuK1x0XHRcdFx0X19pcHZ0YXBfZGVsbGlua19wdHIobmV0LCBpcHZsYW4tXHUwMDNlZGV2LCBcdTAwMjZsc3Rfa2lsbCk7XG4rXHRcdFx0ZWxzZVxuKyNlbmRpZlxuK1x0XHRcdFx0X19pcHZsYW5fbGlua19kZWxldGUobmV0LCBpcHZsYW4tXHUwMDNlZGV2LCBcdTAwMjZsc3Rfa2lsbCk7XG4rXHRcdH1cbitcbiBcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsc3Rfa2lsbCk7XG4gXHRcdGJyZWFrO1xuLVxuK1x0fVxuIFx0Y2FzZSBORVRERVZfRkVBVF9DSEFOR0U6XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXB2bGFuLCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XG4gXHRcdFx0bmV0aWZfaW5oZXJpdF90c29fbWF4KGlwdmxhbi1cdTAwM2VkZXYsIGRldik7XG5AQCAtNzg4LDggKzg2NywxMCBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG4gXHRcdFx0ZXJyID0gbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KGlwdmxhbi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0XHQgIHByZWNoYWRkcl9pbmZvLVx1MDAzZWRldl9hZGRyLFxuIFx0XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdHJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbkBAIC04MDIsNyArODgzLDggQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFxuIFx0Y2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOlxuIFx0XHQvKiBGb3JiaWQgdW5kZXJseWluZyBkZXZpY2UgdG8gY2hhbmdlIGl0cyB0eXBlLiAqL1xuLVx0XHRyZXR1cm4gTk9USUZZX0JBRDtcbitcdFx0cmV0ID0gTk9USUZZX0JBRDtcbitcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6XG4gXHRjYXNlIE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSOlxuQEAgLTgxMCw3ICs4OTIsMTIgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zLCBwbm9kZSlcbiBcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoZXZlbnQsIGlwdmxhbi1cdTAwM2VkZXYpO1xuIFx0fVxuLVx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuK1xuK1x0aXB2bGFuX3BvcnRfcHV0KHBvcnQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyogdGhlIGNhbGxlciBtdXN0IGhlbGQgdGhlIGFkZHJzIGxvY2sgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcbmluZGV4IDJkNmJiZGRkMWVkZDUxLi42NmM5NDlkOTQyNjEwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuY1xuKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jXG5AQCAtMTA5LDE0ICsxMDksMjYgQEAgc3RhdGljIGludCBpcHZ0YXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgX19pcHZ0YXBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbitcdHRhcF9kZWxfcXVldWVzKFx1MDAyNnZsYW50YXAtXHUwMDNldGFwKTtcbitcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgZGV2LCBoZWFkKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbi1cdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSB2bGFudGFwLVx1MDAzZXZsYW4ucG9ydDtcbiBcbi1cdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbi1cdHRhcF9kZWxfcXVldWVzKFx1MDAyNnZsYW4tXHUwMDNldGFwKTtcbi1cdGlwdmxhbl9saW5rX2RlbGV0ZShkZXYsIGhlYWQpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbitcdGlmICghdmxhbnRhcC1cdTAwM2V2bGFuLmR5aW5nKVxuK1x0XHRfX2lwdnRhcF9kZWxsaW5rKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2dGFwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtMTk4LDYgKzIxMCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gX19pcHZ0YXBfZGVsbGluaztcbitcbiBcdGVyciA9IHRhcF9jcmVhdGVfY2RldihcdTAwMjZpcHZ0YXBfY2RldiwgXHUwMDI2aXB2dGFwX21ham9yLCBcImlwdnRhcFwiLFxuIFx0XHRcdCAgICAgIFRISVNfTU9EVUxFKTtcbiBcdGlmIChlcnIpXG5AQCAtMjI0LDYgKzIzOCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXG4gb3V0MjpcbiBcdHRhcF9kZXN0cm95X2NkZXYoaXB2dGFwX21ham9yLCBcdTAwMjZpcHZ0YXBfY2Rldik7XG4gb3V0MTpcbitcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gTlVMTDtcbitcbiBcdHJldHVybiBlcnI7XG4gfVxuIG1vZHVsZV9pbml0KGlwdnRhcF9pbml0KTtcbkBAIC0yMzQsNiArMjUwLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGlwdnRhcF9leGl0KHZvaWQpXG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcHZ0YXBfbm90aWZpZXJfYmxvY2spO1xuIFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZpcHZ0YXBfY2xhc3MpO1xuIFx0dGFwX2Rlc3Ryb3lfY2RldihpcHZ0YXBfbWFqb3IsIFx1MDAyNmlwdnRhcF9jZGV2KTtcbitcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gTlVMTDtcbiB9XG4gbW9kdWxlX2V4aXQoaXB2dGFwX2V4aXQpO1xuIE1PRFVMRV9BTElBU19SVE5MX0xJTksoXCJpcHZ0YXBcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5pbmRleCAxYzUxNDIxNDkxNzUzNi4uODE3MGJmMzNjY2Y5NTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTc3LDYgKzc3LDcgQEAgc3RydWN0IHZldGhfcHJpdiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0Kl94ZHBfcHJvZztcbiBcdHN0cnVjdCB2ZXRoX3JxXHRcdCpycTtcbiBcdHVuc2lnbmVkIGludFx0XHRyZXF1ZXN0ZWRfaGVhZHJvb207XG4rXHRuZXRkZXZpY2VfdHJhY2tlclx0cGVlcl90cmFja2VyO1xuIH07XG4gXG4gc3RydWN0IHZldGhfeGRwX3R4X2JxIHtcbkBAIC0xOTAxLDE1ICsxOTAyLDE3IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVx1MDAzZXBlZXIsIHBlZXIpO1xuK1x0bmV0ZGV2X2hvbGQocGVlciwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuIFx0ZXJyID0gdmV0aF9pbml0X3F1ZXVlcyhkZXYsIHRiKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3F1ZXVlcztcbiBcbiBcdHByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVx1MDAzZXBlZXIsIGRldik7XG4rXHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbiBcdGVyciA9IHZldGhfaW5pdF9xdWV1ZXMocGVlciwgdGIpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfcXVldWVzO1xuK1x0XHRnb3RvIGVycl9wZWVyX3F1ZXVlcztcbiBcbiBcdHZldGhfZGlzYWJsZV9ncm8oZGV2KTtcbiBcdC8qIHVwZGF0ZSBYRFAgc3VwcG9ydGVkIGZlYXR1cmVzICovXG5AQCAtMTkxOCw3ICsxOTIxLDExIEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfcGVlcl9xdWV1ZXM6XG4rXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuK1x0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gZXJyX3F1ZXVlczpcbitcdG5ldGRldl9wdXQocGVlciwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiBlcnJfcmVnaXN0ZXJfZGV2OlxuIFx0Lyogbm90aGluZyB0byBkbyAqL1xuQEAgLTE5MzMsMjQgKzE5NDAsMjUgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBzdGF0aWMgdm9pZCB2ZXRoX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xuK1x0bmV0ZGV2aWNlX3RyYWNrZXIgKnBlZXJfdHJhY2tlcjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpwZWVyO1xuK1x0c3RydWN0IHZldGhfcHJpdiAqcHJpdjtcbiBcbiBcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0cGVlciA9IHJ0bmxfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VwZWVyKTtcbitcdHBlZXJfdHJhY2tlciA9IFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyO1xuK1x0cGVlciA9IHVucmN1X3BvaW50ZXIoeGNoZyhcdTAwMjZwcml2LVx1MDAzZXBlZXIsIE5VTEwpKTtcbitcdGlmICghcGVlcilcbitcdFx0cmV0dXJuO1xuIFxuLVx0LyogTm90ZSA6IGRlbGxpbmsoKSBpcyBjYWxsZWQgZnJvbSBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKCksXG4tXHQgKiBiZWZvcmUgYSByY3Vfc3luY2hyb25pemUoKSBwb2ludC4gVGhlIGRldmljZXMgYXJlIGd1YXJhbnRlZWRcbi1cdCAqIG5vdCBiZWluZyBmcmVlZCBiZWZvcmUgb25lIFJDVSBncmFjZSBwZXJpb2QuXG4tXHQgKi9cbi1cdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4gXG4tXHRpZiAocGVlcikge1xuLVx0XHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4tXHRcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbi1cdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUocGVlciwgaGVhZCk7XG4tXHR9XG4rXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4rXHRkZXYgPSB1bnJjdV9wb2ludGVyKHhjaGcoXHUwMDI2cHJpdi1cdTAwM2VwZWVyLCBOVUxMKSk7XG4rXHRpZiAoZGV2KVxuK1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoZGV2X25ldChkZXYpLCBwZWVyLCBoZWFkKTtcbitcbitcdG5ldGRldl9wdXQocGVlciwgcGVlcl90cmFja2VyKTtcbitcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBlZXJfdHJhY2tlcik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2ZXRoX3BvbGljeVtWRVRIX0lORk9fTUFYICsgMV0gPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li44ZGIyNWI3OTU3M2UzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0xODQ1LDYgKzE4NDUsOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAbmFwaV9saXN0Olx0TGlzdCBlbnRyeSB1c2VkIGZvciBwb2xsaW5nIE5BUEkgZGV2aWNlc1xuICAqXHRAdW5yZWdfbGlzdDpcdExpc3QgZW50cnkgIHdoZW4gd2UgYXJlIHVucmVnaXN0ZXJpbmcgdGhlXG4gICpcdFx0XHRkZXZpY2U7IHNlZSB0aGUgZnVuY3Rpb24gdW5yZWdpc3Rlcl9uZXRkZXZcbisgKlx0QHVucmVnX2xpc3RfbmV0Okxpc3QgZW50cnkgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGUgY3Jvc3MtbmV0bnNcbisgKlx0XHRcdGRldmljZTsgc2VlIHRoZSBmdW5jdGlvbiB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoKVxuICAqXHRAY2xvc2VfbGlzdDpcdExpc3QgZW50cnkgdXNlZCB3aGVuIHdlIGFyZSBjbG9zaW5nIHRoZSBkZXZpY2VcbiAgKlx0QHB0eXBlX2FsbDogICAgIERldmljZS1zcGVjaWZpYyBwYWNrZXQgaGFuZGxlcnMgZm9yIGFsbCBwcm90b2NvbHNcbiAgKlx0QHB0eXBlX3NwZWNpZmljOiBEZXZpY2Utc3BlY2lmaWMsIHByb3RvY29sLXNwZWNpZmljIHBhY2tldCBoYW5kbGVyc1xuQEAgLTIyNDEsNiArMjI0Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmFwaV9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0dW5yZWdfbGlzdDtcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHR1bnJlZ19saXN0X25ldDtcbisjZW5kaWZcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGNsb3NlX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwdHlwZV9hbGw7XG4gXG5AQCAtMzQ3Miw2ICszNDc3LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBOVUxMKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbit2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbit7XG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCBlYTM5ZGQyM2ExOTc2ZS4uOTU3MjkzMzllN2E1NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMTE1LDYgKzExNSwxMCBAQCBib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xuIFxuIGJvb2wgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKHN0cnVjdCBuZXQgKm5ldCk7XG4gXG4rdm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBydG5sX25ldF9mbHVzaF93b3JrcXVldWUodm9pZCk7XG4rdm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitcbiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApXHRcdFx0XHRcXFxuIFx0cmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZChuZXQpKVxuICNkZWZpbmUgcnRubF9uZXRfZGVyZWZlcmVuY2UobmV0LCBwKVx0XHRcdFx0XHRcXFxuQEAgLTE1MCw2ICsxNTQsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIEFTU0VSVF9SVE5MX05FVChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRBU1NFUlRfUlROTCgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG4re1xuK31cbitcbiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApXHRcdFxcXG4gXHRyY3VfZGVyZWZlcmVuY2VfcnRubChwKVxuICNkZWZpbmUgcnRubF9uZXRfZGVyZWZlcmVuY2UobmV0LCBwKVx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5pbmRleCA4MGRlNWU5OGE2NmQ2Yy4uNTAxYWYxOTk5ZmU4MzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuQEAgLTE5Nyw2ICsxOTcsOSBAQCBzdHJ1Y3QgbmV0IHtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4gXHQvKiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHdoZW4gdGhlIGNvbmZpZyBndWFyZCBpcyByZW1vdmVkLiAqL1xuIFx0c3RydWN0IG11dGV4XHRcdHJ0bmxfbXV0ZXg7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJ0bmxfd29yaztcbitcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl91bnJlZ19oZWFkO1xuK1x0c3BpbmxvY2tfdFx0XHRkZXZfdW5yZWdfbG9jaztcbiAjZW5kaWZcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVlNPQ0tFVFMpXG4gXHRzdHJ1Y3QgbmV0bnNfdnNvY2tcdHZzb2NrO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jNDNhNDRmYjY0OWZhMiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTExNjA4LDggKzExNjA4LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiBcdFx0XHRydG5sX2xvY2soKTtcbiBcbiBcdFx0XHQvKiBSZWJyb2FkY2FzdCB1bnJlZ2lzdGVyIG5vdGlmaWNhdGlvbiAqL1xuLVx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBsaXN0LCB0b2RvX2xpc3QpXG4rXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuK1x0XHRcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuK1xuK1x0XHRcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4gXHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVIsIGRldik7XG4rXHRcdFx0XHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRfX3J0bmxfdW5sb2NrKCk7XG4gXHRcdFx0cmN1X2JhcnJpZXIoKTtcbkBAIC0xMjA4Nyw2ICsxMjA5Miw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCk7XG4rI2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlY2xvc2VfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbGlua193YXRjaF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VhZGpfbGlzdC51cHBlcik7XG5AQCAtMTIzMDQsNiArMTIzMTIsMTAgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcbisjZW5kaWZcbitcbiBcdGlmIChoZWFkKSB7XG4gXHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0LCBoZWFkKTtcbiBcdH0gZWxzZSB7XG5AQCAtMTI0ODAsNiArMTI0OTIsMTYgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkge1xuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbitcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuK1xuK1x0XHQvKiBzcGluX2xvY2soKSBjYW4gYmUgbW92ZWQgb3V0c2lkZSBvZiB0aGUgbG9vcFxuK1x0XHQgKiBvbmNlIHRoZSBwZXItbmV0bnMgUlROTCBjb252ZXJzaW9uIGNvbXBsZXRlcy5cbitcdFx0ICovXG4rXHRcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuKyNlbmRpZlxuIFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2LVx1MDAzZWRldl9yZWdpc3RlcmVkX3RyYWNrZXIpO1xuIFx0XHRuZXRfc2V0X3RvZG8oZGV2KTtcbiBcdFx0Y250Kys7XG5AQCAtMTI1MDIsNiArMTI1MjQsOTYgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gfVxuIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7XG4gXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdG5ldGRldl9sb2NrKGRldik7XG4rXG4rXHRpZiAobmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkge1xuK1x0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4rXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdG5ldCA9IGRldl9uZXQoZGV2KTtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK1xuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCkpO1xuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcbitcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0LCBcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuK1x0cnRubF9uZXRfcXVldWVfd29yayhuZXQpO1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcbitcdG5ldGRldl91bmxvY2soZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQpO1xuK1xuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgaGVhZCwgdW5yZWdfbGlzdCkge1xuK1x0XHQvKiBPbmNlIGFsbCBjcm9zcy1uZXRucyB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIGlzXG4rXHRcdCAqIGNvbnZlcnRlZCB0byBfbmV0KCkgKG9yIGZvciBkZWJ1Z2dpbmcpLCByZW1vdmUgdGhpcyBjaGVjay5cbitcdFx0ICovXG4rXHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0REVCVUdfTkVUX1dBUk5fT05DRSghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSxcbitcdFx0XHRcdCAgICBcIiVzIHdhcyB1bnJlZ2lzdGVyZWQgZnJvbSBhIGRpZmZlcmVudCBuZXRucy5cXG5cIixcbitcdFx0XHRcdCAgICBkZXYtXHUwMDNlbmFtZSk7XG4rXG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuK1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQsIFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChzdHJ1Y3QgbmV0ICpuZXRfb2xkLFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdGlmIChuZXRfb2xkIFx1MDAzZSBuZXQpIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4rXHRcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2bmV0X29sZC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm5ldF9vbGQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK1x0XHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0fVxuK1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCkpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQsIFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCk7XG4rXHR9XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZuZXRfb2xkLVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4rfVxuK1xuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7XG4rXHRMSVNUX0hFQUQodW5yZWdfaGVhZF9uZXQpO1xuK1x0TElTVF9IRUFEKHVucmVnX2hlYWQpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4rXHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCwgXHUwMDI2dW5yZWdfaGVhZF9uZXQpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgXHUwMDI2dW5yZWdfaGVhZF9uZXQsIHVucmVnX2xpc3RfbmV0KSB7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCwgXHUwMDI2dW5yZWdfaGVhZCk7XG4rXHR9XG4rXG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNnVucmVnX2hlYWQpO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKlx0dW5yZWdpc3Rlcl9uZXRkZXYgLSByZW1vdmUgZGV2aWNlIGZyb20gdGhlIGtlcm5lbFxuICAqXHRAZGV2OiBkZXZpY2VcbkBAIC0xMjY1OCw2ICsxMjc3MCwxMCBAQCBpbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxuIFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuIFx0ZGV2LVx1MDAzZWlmaW5kZXggPSBuZXdfaWZpbmRleDtcbiBcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChuZXRfb2xkLCBuZXQsIGRldik7XG4rI2VuZGlmXG4rXG4gXHRpZiAobmV3X25hbWVbMF0pIHtcbiBcdFx0LyogUmVuYW1lIHRoZSBuZXRkZXYgdG8gcHJlcGFyZWQgbmFtZSAqL1xuIFx0XHR3cml0ZV9zZXFsb2NrX2JoKFx1MDAyNm5ldGRldl9yZW5hbWVfbG9jayk7XG5AQCAtMTMwMzQsNyArMTMxNTAsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGRlZmF1bHRfZGV2aWNlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdCAqIFB1c2ggYWxsIG1pZ3JhdGFibGUgbmV0d29yayBkZXZpY2VzIGJhY2sgdG8gdGhlXG4gXHQgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXG4gXHQgKi9cbi1cdEFTU0VSVF9SVE5MKCk7XG4rXG4gXHRmb3JfZWFjaF9uZXRkZXZfc2FmZShuZXQsIGRldiwgYXV4KSB7XG4gXHRcdGludCBlcnI7XG4gXHRcdGNoYXIgZmJfbmFtZVtJRk5BTVNJWl07XG5AQCAtMTMwNzcsMjEgKzEzMTkzLDM2IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdClcbiBcdExJU1RfSEVBRChkZXZfa2lsbF9saXN0KTtcbiBcbiBcdHJ0bmxfbG9jaygpO1xuK1xuK1x0X19ydG5sX25ldF9sb2NrKFx1MDAyNmluaXRfbmV0KTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7XG4rXHRcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xuIFx0XHRkZWZhdWx0X2RldmljZV9leGl0X25ldChuZXQpO1xuK1x0XHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xuK1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbitcdF9fcnRubF9uZXRfdW5sb2NrKFx1MDAyNmluaXRfbmV0KTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7XG4rXHRcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xuK1xuIFx0XHRmb3JfZWFjaF9uZXRkZXZfcmV2ZXJzZShuZXQsIGRldikge1xuIFx0XHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNlZGVsbGluaylcbiBcdFx0XHRcdGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHR9XG4rXG4rXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0KG5ldCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4rXHRcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XG4gXHR9XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0cnRubF91bmxvY2soKTtcbitcbitcdHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSgpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIGRlZmF1bHRfZGV2aWNlX29wcyA9IHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IGQ5ZGFmZTI0ZjU3ZTNmLi5hOTFkMmI1OGFhZGRmOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTgxLDYgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIG9wc19leGl0X3J0bmxfbGlzdChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpvcHNfbGlzdCxcbiBcdFx0XHRcdG9wcy1cdTAwM2VleGl0X3J0bmwobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0fVxuIFxuK1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xuIFx0fVxuIFxuQEAgLTQyMiw2ICs0MjMsOSBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfblxuICNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbiBcdG11dGV4X2luaXQoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgpO1xuIFx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4LCBydG5sX25ldF9sb2NrX2NtcF9mbiwgTlVMTCk7XG4rXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfd29yaywgcnRubF9uZXRfd29ya19mdW5jKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuICNlbmRpZlxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX2FsbCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmIxMjlmNzkzZDg1MTY0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMTk3LDYgKzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldChuZXQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX3J0bmxfbmV0X3VubG9jayk7XG5AQCAtMjczLDYgKzI3NCwyOSBAQCBib29sIGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSBcdTAwMjZcdTAwMjYgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQpO1xuK1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnRubF9uZXRfd3E7XG4rXG4rdm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRxdWV1ZV93b3JrKHJ0bmxfbmV0X3dxLCBcdTAwMjZuZXQtXHUwMDNlcnRubF93b3JrKTtcbit9XG4rXG4rdm9pZCBydG5sX25ldF9mbHVzaF93b3JrcXVldWUodm9pZClcbit7XG4rXHRmbHVzaF93b3JrcXVldWUocnRubF9uZXRfd3EpO1xuK31cbitcbit2b2lkIHJ0bmxfbmV0X3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7XG4rXG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydG5sX25ldF9sb2NrKG5ldCk7XG4rXHRydG5sX25ldF91bmxvY2sobmV0KTtcbit9XG4gI2Vsc2VcbiBzdGF0aWMgaW50IHJ0bmxfbmV0X2NtcF9sb2Nrcyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYSwgY29uc3Qgc3RydWN0IG5ldCAqbmV0X2IpXG4ge1xuQEAgLTI4MiwxMCArMzA2LDExIEBAIHN0YXRpYyBpbnQgcnRubF9uZXRfY21wX2xvY2tzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9hLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYilcbiAjZW5kaWZcbiBcbiBzdHJ1Y3QgcnRubF9uZXRzIHtcbi1cdC8qIC1cdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDMgbmV0bnMgYXQgbW9zdDtcbi1cdCAqIDIgZm9yIHRoZSBuZXcgZGV2aWNlLCAxIGZvciBpdHMgcGVlci5cbitcdC8qIC1cdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDQgbmV0bnMgYXQgbW9zdDtcbitcdCAqIDIgZm9yIHRoZSBuZXcgZGV2aWNlLCAxIGZvciBpdHMgcGVlciwgMSBmb3JcbitcdCAqIGFuIGV4aXN0aW5nIGRldmljZSAoZG9fc2V0bGluaygpIHBhdGgpLlxuIFx0ICovXG4tXHRzdHJ1Y3QgbmV0ICpuZXRbM107XG4rXHRzdHJ1Y3QgbmV0ICpuZXRbNF07XG4gXHR1bnNpZ25lZCBjaGFyIGxlbjtcbiB9O1xuIFxuQEAgLTYzNiwxNiArNjYxLDE1IEBAIGludCBydG5sX2xpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocnRubF9saW5rX3JlZ2lzdGVyKTtcbiBcbi1zdGF0aWMgdm9pZCBfX3J0bmxfa2lsbF9saW5rcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXG4rc3RhdGljIHZvaWQgX19ydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuIFxuIFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG4gXHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyA9PSBvcHMpXG4tXHRcdFx0b3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZsaXN0X2tpbGwpO1xuK1x0XHRcdG9wcy1cdTAwM2VkZWxsaW5rKGRldiwgZGV2X2tpbGxfbGlzdCk7XG4gXHR9XG4tXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmxpc3Rfa2lsbCk7XG4gfVxuIFxuIC8qIFJldHVybiB3aXRoIHRoZSBydG5sX2xvY2sgaGVsZCB3aGVuIHRoZXJlIGFyZSBubyBuZXR3b3JrXG5AQCAtNjc2LDYgKzcwMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bmxfbG9ja191bnJlZ2lzdGVyaW5nX2FsbCh2b2lkKVxuICAqL1xuIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcbiB7XG4rXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpbmtfb3BzX211dGV4KTtcbkBAIC02ODksOCArNzE0LDE0IEBAIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcbiBcdGRvd25fd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG4gXHRydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwoKTtcbiBcbi1cdGZvcl9lYWNoX25ldChuZXQpXG4tXHRcdF9fcnRubF9raWxsX2xpbmtzKG5ldCwgb3BzKTtcbitcdGZvcl9lYWNoX25ldChuZXQpIHtcbitcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4rXHRcdF9fcnRubF9raWxsX2xpbmtzKG5ldCwgb3BzLCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbitcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbitcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbitcdH1cbitcbitcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXG4gXHRydG5sX3VubG9jaygpO1xuIFx0dXBfd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG5AQCAtNDE1NSw2ICs0MTg2LDggQEAgc3RhdGljIGludCBydG5sX25ld2xpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdH1cbiBcdH1cbiBcbitcdHJ0bmxfbmV0c19hZGQoXHUwMDI2cnRubF9uZXRzLCBnZXRfbmV0KHNvY2tfbmV0KHNrYi1cdTAwM2VzaykpKTtcbitcbiBcdHJ0bmxfbmV0c19sb2NrKFx1MDAyNnJ0bmxfbmV0cyk7XG4gXHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcbiBcdHJ0bmxfbmV0c191bmxvY2soXHUwMDI2cnRubF9uZXRzKTtcbkBAIC03MjIxLDQgKzcyNTQsMTAgQEAgdm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcbiBcdHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZydG5ldGxpbmtfZGV2X25vdGlmaWVyKTtcbiBcbiBcdHJ0bmxfcmVnaXN0ZXJfbWFueShydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnMpO1xuK1xuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbitcdHJ0bmxfbmV0X3dxID0gY3JlYXRlX3dvcmtxdWV1ZShcInJ0bmxfbmV0XCIpO1xuK1x0aWYgKCFydG5sX25ldF93cSlcbitcdFx0cGFuaWMoXCJDb3VsZCBub3QgY3JlYXRlIHJ0bmxfbmV0IHdvcmtxXCIpO1xuKyNlbmRpZlxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAwOjI2OjQwLjgzOTU4MTIyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY1MjAyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29ya2luZyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhcHBsaWVkLCBhbmQgbXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSAqZnVuY3Rpb25hbCogY2hhbmdlcyB0aGF0IG5lZWQgZnV6emluZy4gSSdtIHNlZWluZyBhIGxvdCBvZiBjaHVybiBpbiBjb3JlIG5ldHdvcmtpbmcsIHNvIHRoaXMgbG9va3MgcHJvbWlzaW5nIGZvciBmaW5kaW5nIHBvdGVudGlhbCBidWdzLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IsIHByaW1hcmlseSBhcm91bmQgZGV2aWNlIHVucmVnaXN0cmF0aW9uIGFuZCBSVE5MIChSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgTmV0bGluaykgbG9ja2luZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgdXNpbmcgYENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTGAsIHdoaWNoIGlzIGEgcHJldHR5IGJpZyBkZWFsLCBhbmQgdGhlIGBuZXRkZXZpY2VgIGNvZGUgaXRzZWxmIGlzIGJlaW5nIGhlYXZpbHkgbW9kaWZpZWQuIFRoaXMgaW5kaWNhdGVzIHRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgbG9ja2luZyBzY2hlbWUsIGFuZCB0aGUgd2F5IGRldmljZXMgYXJlIHVucmVnaXN0ZXJlZC5cblxuU3BlY2lmaWMgZHJpdmVycyBhcmUgYWxzbyBiZWluZyBtb2RpZmllZCB0byBwbGF5IG5pY2VseSB3aXRoIHRoZXNlIGNoYW5nZXMuIEkgc2VlIGBiYXJldWRwLmNgIG5vdyBpbmNsdWRlcyBhIG11dGV4IGBsb2NrYCwgYW5kIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGxvY2sgYXJlIGBiYXJldWRwX2ZpbmRfZGV2YCwgYGJhcmV1ZHBfY29uZmlndXJlYCwgYGJhcmV1ZHBfZGVsbGlua2AsIGBiYXJldWRwX2luaXRfbmV0YCwgYGJhcmV1ZHBfZXhpdF9ydG5sX25ldGAsIHBsdXMgYF9fYmFyZXVkcF9kZWxsaW5rYCBpcyBhZGRlZC4gYGlwdmxhbmAsIGBpcHZ0YXBgLCBhbmQgYHZldGhgIGFsbCBzZWVtIHRvIGhhdmUgc2ltaWxhciB1cGRhdGVzLCB3aXRoIGxvY2tpbmcgb3IgbmV3IGRldmljZSB1bnJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGFkZGVkIHRvIHVzZSB0aGUgbmV3IGxvY2tpbmcgc2NoZW1lIGFuZCBgbmV0ZGV2aWNlYCBpbmZyYXN0cnVjdHVyZS5cblxuRnVuY3Rpb25hbGx5LCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIFwieWVzXCIuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgYW5kIGFueSBjaGFuZ2UgdG8gbG9ja2luZyBvciBkZXZpY2UgdW5yZWdpc3RyYXRpb24gY2FuIGVhc2lseSBpbnRyb2R1Y2Ugc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MuIEFuZCB5ZXMsIGFsbCB0aGVzZSBuZXcgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSwgc2luY2UgdGhleSdyZSBiYXNpYyBuZXR3b3JrIGRldmljZXMgYW5kIHVucmVnaXN0cmF0aW9uIGxvZ2ljLCBzbyB0aGV5J3JlIGFsbCBwcmV0dHkgc3RhbmRhcmQuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSBmb2N1c2VkLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLCBpdCdzIHRoZSBseW5jaHBpbiBmb3IgdGhlIHdob2xlIHRoaW5nLiBUaGVuLCB0aGUgaW5kaXZpZHVhbCBkcml2ZXIgY29uZmlncyB3aWxsIG5lZWQgdG8gYmUgZW5hYmxlZDogYENPTkZJR19CQVJFVURQYCwgYENPTkZJR19JUFZMQU5gLCBgQ09ORklHX0lQVlRBUGAsIGFuZCBgQ09ORklHX1ZFVEhgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgYENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTGAgaW4gdGhlIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGF0LCBhbmQgZmluZCBvdXQgd2hhdCB0aGF0IG9wdGlvbiBpcyBkZXNpZ25lZCBmb3IsIGlmIHBvc3NpYmxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoYXQgb25lLlxuXG5TbyB0aGUgcGxhbjogdmVyaWZ5IGBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxgLCBpZGVudGlmeSBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIGZ1enppbmcgb24sIGFuZCB0aGUgQ09ORklHIG9wdGlvbnMgcmVxdWlyZWQgdG8gdGVzdCB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzAxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6MjY6NTEuNDA0Nzg1MjA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODcwMDc1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVCVUdfTkVUX1NNQUxMX1JUTkxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTQ5PXN0cnVjdCBuZXRfZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjI0NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0dW5yZWdfbGlzdDtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIyNDY6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjI0Ny1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0dW5yZWdfbGlzdF9uZXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0NzU9c3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0NzktXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDgwOiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0ODEtdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtOTktXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaDoxMDA6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtMTAxLXZvaWQgX19ydG5sX25ldF9sb2NrKHN0cnVjdCBuZXQgKm5ldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMTk2LSNlbmRpZlxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoxOTc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0xOTgtXFx0LyogTW92ZSB0byBhIGJldHRlciBwbGFjZSB3aGVuIHRoZSBjb25maWcgZ3VhcmQgaXMgcmVtb3ZlZC4gKi9cXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnPTIxPWNvbmZpZyBERUJVR19ORVRcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnLTI3LVxcbm5ldC9LY29uZmlnLmRlYnVnOjI4OmNvbmZpZyBERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9LY29uZmlnLmRlYnVnLTI5LVxcdGJvb2wgXFxcIkFkZCBleHRyYSBwZXItbmV0bnMgbXV0ZXggaW5zaWRlIFJUTkxcXFwiXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjAzMD1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjA5NC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0KTtcXG5uZXQvY29yZS9kZXYuYzoxMjA5NTojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxubmV0L2NvcmUvZGV2LmMtMTIwOTYtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIzMTE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIzMTQtXFxubmV0L2NvcmUvZGV2LmM6MTIzMTU6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL2Rldi5jLTEyMzE2LVxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyMzc2PXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyNDk0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7XFxubmV0L2NvcmUvZGV2LmM6MTI0OTU6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL2Rldi5jLTEyNDk2LVxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNTI1PUVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7XFxubmV0L2NvcmUvZGV2LmMtMTI1MjYtXFxubmV0L2NvcmUvZGV2LmM6MTI1Mjc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL2Rldi5jLTEyNTI4LXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNjM2PWludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjc3Mi1cXG5uZXQvY29yZS9kZXYuYzoxMjc3MzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxubmV0L2NvcmUvZGV2LmMtMTI3NzQtXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbW92ZV9uZXQobmV0X29sZCwgbmV0LCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTQwMz1zdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDIyLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0MjM6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjQtXFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTE4ND1FWFBPUlRfU1lNQk9MKGxvY2tkZXBfcnRubF9pc19oZWxkKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE4Ni1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxODc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE4OC12b2lkIF9fcnRubF9uZXRfbG9jayhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03MjQ5PXZvaWQgX19pbml0IHJ0bmV0bGlua19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjU3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyNTg6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyNTktXFx0cnRubF9uZXRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKFxcXCJydG5sX25ldFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNjo1My4yOTE3OTkxOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTUzNTcxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRkZXZpY2UgVW5yZWdpc3RyYXRpb24gYW5kIFBvdGVudGlhbCBJbXBhY3Qgb2YgREVCVUdfTkVUX1NNQUxMX1JUTkwqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgREVCVUdfTkVUX1NNQUxMX1JUTkxgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgbG9va2luZyBhdC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBhcmVhczogYGJhcmV1ZHBgLCBgaXB2bGFuYCwgYGlwdnRhcGAsIGB2ZXRoYCwgYW5kIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uLiBGcm9tIHRoZSBpbml0aWFsIGdsYW5jZSwgaXQgKnNlZW1zKiBmdW5jdGlvbmFsLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgdGhlIGRldGFpbHMuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2Ugc3ltYm9scyBhbmQgYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdDpcblxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRgXG4qICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0YFxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGBcbiogICBgcnRubF9uZXRfd29ya19mdW5jYFxuKiAgIGBiYXJldWRwX2RlbGxpbmtgXG4qICAgYGlwdmxhbl9saW5rX2RlbGV0ZWBcbiogICBgaXB2dGFwX2RlbGxpbmtgXG4qICAgYHZldGhfZGVsbGlua2BcbiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGBcblxuSSdtIG5vdyBjaGVja2luZyB0aGUgdmlzaWJpbGl0eSBvZiBjZXJ0YWluIGZ1bmN0aW9ucy4gV2UgYWxyZWFkeSBrbm93IHRoYXQgYF9fYmFyZXVkcF9kZWxsaW5rYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gcmVtZW1iZXIuIGBfX2lwdmxhbl9saW5rX2RlbGV0ZWAgaXMgZXhwb3J0ZWQsIGFuZCB0aGF0IGlzIGltcG9ydGFudCB0b28uIGBfX2lwdnRhcF9kZWxsaW5rYCBhbmQgYHZldGhfZGVsbGlua2AgYXJlIHN0YXRpYy4gYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAgaXMgZXhwb3J0ZWQsIHdoaWxlIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAgYW5kIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAgYXJlIGdsb2JhbC5cblxuU28sIHRvIHN1bW1hcml6ZSwgdGhlIGVzc2VudGlhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSB0aGVzZTpcblxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRgXG4qICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0YFxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGBcbiogICBgcnRubF9uZXRfd29ya19mdW5jYFxuKiAgIGBiYXJldWRwX2RlbGxpbmtgXG4qICAgYGlwdmxhbl9saW5rX2RlbGV0ZWBcbiogICBgaXB2dGFwX2RlbGxpbmtgXG4qICAgYHZldGhfZGVsbGlua2BcbiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGBcblxuV2UgYWxzbyBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgYERFQlVHX05FVF9TTUFMTF9SVE5MYFxuKiAgIGBCQVJFVURQYFxuKiAgIGBJUFZMQU5gXG4qICAgYElQVlRBUGBcbiogICBgVkVUSGBcblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGNvcnJlbGF0ZSB0aGVzZSBjb25maWd1cmF0aW9ucyB3aXRoIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSBob3cgdGhlc2UgYXJlIGludGVyY29ubmVjdGVkIGFuZCBob3cgdGhlIG9wdGlvbiBhZmZlY3RzIHRoZXNlIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgYW5kIGdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBrZXkgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MDAuMjQ1MzczNDAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDM2MTkzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJBUkVVRFBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yNDU9Y29uZmlnIEdFTkVWRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTktXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjA6Y29uZmlnIEJBUkVVRFBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2MS1cXHR0cmlzdGF0ZSBcXFwiQmFyZSBVRFAgRW5jYXBzdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MDIuMTg4OTk3NTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDUwNDgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVmVyaWZ5aW5nIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gVGVjaG5vbG9naWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRlbHZlIGludG8gc29tZSBjb3JlIG5ldHdvcmsgdmlydHVhbGl6YXRpb24gY29tcG9uZW50cy4gSSBuZWVkIHRvIHJlZnJlc2ggYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGdvIHRocm91Z2ggSVBWTEFOLCBJUFZUQVAsIGFuZCBWRVRILiBUaGVyZSBhcmUgc28gbWFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIHRoYXQgYSBxdWljayByZXZpZXcgaXMgYWx3YXlzIGdvb2QuIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBleGFjdCBiZWhhdmlvciBhbmQgdXNlLWNhc2VzIGZvciBlYWNoLiBIb3cgdGhleSBoYW5kbGUgTUFDIGFkZHJlc3NlcywgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGludGVyZmFjZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJvdXRpbmcgYW5kIGJyaWRnaW5nIGFyZSBhbGwgdG9wIG9mIG1pbmQuIFRpbWUgdG8gcnVuIHNvbWUgdGVzdHMsIG1heWJlIHNwaW4gdXAgYSBmZXcgY29udGFpbmVycyB0byBzaW11bGF0ZSB0cmFmZmljIGFuZCBwcm9iZSBhdCBhIGdyYW51bGFyIGxldmVsLiBXZSdsbCBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LiBJdCdzIHRpbWUgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgYW5kIGVuc3VyZSBteSBrbm93bGVkZ2UgaXMgdXAtdG8tZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNzowNS4xMzk1MDQzNTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTA5MzM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWTEFOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE5Mi1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5Mzpjb25maWcgSVBWTEFOX0wzU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMTk0LVxcdGRlcGVuZHMgb24gTkVURklMVEVSXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE5OC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5OTpjb25maWcgSVBWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQLVZMQU4gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MDYuOTIwNjAzNzYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwNjkzMzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE5MTc4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNzowOC41Mjc1Mzg5MTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODU4MzMxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVlRBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTE5OT1jb25maWcgSVBWTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIxNjpjb25maWcgSVBWVEFQXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMTctXFx0dHJpc3RhdGUgXFxcIklQLVZMQU4gYmFzZWQgdGFwIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTAuMzEzMzgyMzcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MDYwNzE4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxOTI3OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTEuOTE5NDU3Nzk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1ODcwMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDIxPWNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MzU6Y29uZmlnIFZFVEhcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTMuNzA1MzM3NDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NDQ2MTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgVW5yZWdpc3RyYXRpb24gUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgYEJBUkVVRFBgLCBgSVBWTEFOYCwgYElQVlRBUGAsIGFuZCBgVkVUSGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBkZXZpY2VzIGFyZSB1bnJlZ2lzdGVyZWQgaW4gdmFyaW91cyBzY2VuYXJpb3MuIE15IG1pbmQga2VlcHMganVtcGluZyB0byB0aGVzZSBrZXkgc3ltYm9sczogYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAsIGBydG5sX25ldF93b3JrX2Z1bmNgLCBhbG9uZyB3aXRoIHRoZSBkZXZpY2Utc3BlY2lmaWMgdW5saW5raW5nIGZ1bmN0aW9uczogYGJhcmV1ZHBfZGVsbGlua2AsIGBpcHZsYW5fbGlua19kZWxldGVgLCBgaXB2dGFwX2RlbGxpbmtgLCBgdmV0aF9kZWxsaW5rYCwgYW5kIGBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgZWFjaCBvZiB0aGVtIGNvbWVzIGludG8gcGxheS5cblxuV2FpdCBhIHNlY29uZCwgd2Fzbid0IGBpcHZsYW5fbGlua19kZWxldGVgIG1hcmtlZCBhcyBzdGF0aWMgYXQgc29tZSBwb2ludD8gQWggeWVzLCBub3cgYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBpcyBleHBvcnRlZCwgc28gSSB0aGluayBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYm90aCBoZXJlLiBTaG91bGQgSSBqdXN0IGluY2x1ZGUgYm90aCBvciByZWx5IG9uIHRoZSBleHBvcnRlZCB2ZXJzaW9uPyBBaCwgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBpbmNsdWRlIGJvdGgsIHRvIGJlIHRob3JvdWdoLiBOb3csIGxldCdzIGluY2x1ZGUgYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBhbmQgYGlwdmxhbl9saW5rX2RlbGV0ZWAuIEFjdHVhbGx5LCB3YWl0LCBgaXB2bGFuX2xpbmtfZGVsZXRlYCBpcyBpbmRlZWQgc3RhdGljIHdpdGhpbiBgaXB2bGFuX21haW4uY2AuIE9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXB2bGFuX2xpbmtfZGVsZXRlYCBpbiBgaXB2bGFuX21haW4uY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzODAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTkuMzk5ODAxNjk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg3MzQ1MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdmxhbl9saW5rX2RlbGV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmg9MTcxPWludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmgtMTcyLVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaDoxNzM6dm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oLTE3NC1cXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM9NzA3PUVYUE9SVF9TWU1CT0xfR1BMKGlwdmxhbl9saW5rX25ldyk7XFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzA4LVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjcwOTp2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03MTAtXFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzI3LX1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3Mjg6RVhQT1JUX1NZTUJPTChfX2lwdmxhbl9saW5rX2RlbGV0ZSk7XFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzI5LVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjczMDpzdGF0aWMgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03MzEte1xcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzM1LVxcdGlmICghaXB2bGFuLVxcdTAwM2VkeWluZylcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3MzY6XFx0XFx0X19pcHZsYW5fbGlua19kZWxldGUoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTczNy1cXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdmxhbi1cXHUwMDNlcG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM9NzY3PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcHZsYW5fbGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03NzItXFx0Lm5ld2xpbmtcXHQ9IGlwdmxhbl9saW5rX25ldyxcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3NzM6XFx0LmRlbGxpbmtcXHQ9IGlwdmxhbl9saW5rX2RlbGV0ZSxcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03NzQtXFx0LmdldF9saW5rX25ldCAgID0gaXB2bGFuX2dldF9saW5rX25ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jPTc4OT1zdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy04NDUtI2VuZGlmXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM6ODQ2OlxcdFxcdFxcdFxcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVxcdTAwM2VkZXYsIFxcdTAwMjZsc3Rfa2lsbCk7XFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtODQ3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYz0xMTI9c3RhdGljIHZvaWQgX19pcHZ0YXBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMtMTE4LVxcdHRhcF9kZWxfcXVldWVzKFxcdTAwMjZ2bGFudGFwLVxcdTAwM2V0YXApO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYzoxMTk6XFx0X19pcHZsYW5fbGlua19kZWxldGUobmV0LCBkZXYsIGhlYWQpO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYy0xMjAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNzoyMS4xODcxNTUyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTAyMzExNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUmVjb21tZW5kYXRpb246IFdvcnRoRnV6emluZz10cnVlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgbmV0d29yayBkZXZpY2VzIGFyZSB1bnJlZ2lzdGVyZWQsIHBhcnRpY3VsYXJseSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLiBUaGUgaW5jbHVzaW9uIG9mIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRgLCBgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRgLCBgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXRgLCBgcnRubF9uZXRfd29ya19mdW5jYCwgYGJhcmV1ZHBfZGVsbGlua2AsIGBfX2JhcmV1ZHBfZGVsbGlua2AsIGBpcHZsYW5fbGlua19kZWxldGVgLCBgX19pcHZsYW5fbGlua19kZWxldGVgLCBgaXB2dGFwX2RlbGxpbmtgLCBgX19pcHZ0YXBfZGVsbGlua2AsIGB2ZXRoX2RlbGxpbmtgLCBhbmQgYGRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hgIHN1Z2dlc3RzIGEgc3Vic3RhbnRpYWwgc2hpZnQgaW4gZGV2aWNlIG1hbmFnZW1lbnQuIEJvdGggYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBhbmQgYGlwdmxhbl9saW5rX2RlbGV0ZWAgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGF0dGVudGlvbi5cblxuVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIChgREVCVUdfTkVUX1NNQUxMX1JUTkxgLCBgQkFSRVVEUGAsIGBJUFZMQU5gLCBgSVBWVEFQYCwgYFZFVEhgKSBjb25maXJtIHRoYXQgdGhpcyB0b3VjaGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgZGlyZWN0bHksIHdpdGggdGhlIGNoYW5nZXMgc3ByZWFkIGFjcm9zcyBgYmFyZXVkcC5jYCwgYGlwdmxhbi9pcHZsYW4uaGAsIGBpcHZsYW4vaXB2bGFuX21haW4uY2AsIGBpcHZsYW4vaXB2dGFwLmNgLCBgdmV0aC5jYCwgYG5ldGRldmljZS5oYCwgYHJ0bmV0bGluay5oYCwgYG5ldF9uYW1lc3BhY2UuaGAsIGBkZXYuY2AsIGBuZXRfbmFtZXNwYWNlLmNgLCBhbmQgYHJ0bmV0bGluay5jYC4gR29vZCwgYWxsIHRoZSByZWxldmFudCBmaWxlcyBzZWVtIHRvIGJlIGFjY291bnRlZCBmb3IgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYSBpcyBvdXIgZ3VpZGUgaGVyZS4gVGhpcyBwYXRjaCBkZWZpbml0ZWx5IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IHBlci1uZXRucyBSVE5MIGxvY2tpbmcgdXNpbmcgYERFQlVHX05FVF9TTUFMTF9SVE5MYCBhbmQgdXBkYXRlcyB0byBob3cgdmFyaW91cyB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVycyBoYW5kbGUgdW5yZWdpc3RyYXRpb24sIHN5bmNocm9uaXphdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBNeSBleHBlcmllbmNlIHNjcmVhbXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlIGludGVncmF0aW9uIG9mIFJUTkwgbG9ja2luZyBpbnRvIGV4aXN0aW5nIHVucmVnaXN0cmF0aW9uIHByb2Nlc3NlcywgZXNwZWNpYWxseSBhY3Jvc3MgbmFtZXNwYWNlcywgaXMgcmlwZSBmb3Igc3VidGxlIGVycm9ycy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGVzc2VudGlhbC4gSXQncyBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBpZGVudGlmeWluZyB0aGVzZSBjb21wbGV4IGNvbmN1cnJlbmN5IGlzc3VlcyBiZWZvcmUgdGhleSBjYXVzZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4ODEsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAwOjI3OjI5LjY4OTQ2ODk3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNTUwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX05FVF9TTUFMTF9SVE5MXCIsXG4gICAgXCJCQVJFVURQXCIsXG4gICAgXCJJUFZMQU5cIixcbiAgICBcIklQVlRBUFwiLFxuICAgIFwiVkVUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldFwiLFxuICAgIFwidW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0XCIsXG4gICAgXCJydG5sX25ldF93b3JrX2Z1bmNcIixcbiAgICBcImJhcmV1ZHBfZGVsbGlua1wiLFxuICAgIFwiX19iYXJldWRwX2RlbGxpbmtcIixcbiAgICBcImlwdmxhbl9saW5rX2RlbGV0ZVwiLFxuICAgIFwiX19pcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcImlwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJfX2lwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJ2ZXRoX2RlbGxpbmtcIixcbiAgICBcImRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19ORVRfU01BTExfUlROTFwiLFxuICAgIFwiQkFSRVVEUFwiLFxuICAgIFwiSVBWTEFOXCIsXG4gICAgXCJJUFZUQVBcIixcbiAgICBcIlZFVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0XCIsXG4gICAgXCJ1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldFwiLFxuICAgIFwicnRubF9uZXRfd29ya19mdW5jXCIsXG4gICAgXCJiYXJldWRwX2RlbGxpbmtcIixcbiAgICBcIl9fYmFyZXVkcF9kZWxsaW5rXCIsXG4gICAgXCJpcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcIl9faXB2bGFuX2xpbmtfZGVsZXRlXCIsXG4gICAgXCJpcHZ0YXBfZGVsbGlua1wiLFxuICAgIFwiX19pcHZ0YXBfZGVsbGlua1wiLFxuICAgIFwidmV0aF9kZWxsaW5rXCIsXG4gICAgXCJkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIHVucmVnaXN0ZXJpbmcgbmV0d29yayBkZXZpY2VzIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMsIGFkZGluZyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHN1cHBvcnQgKENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTCkuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyBzZXZlcmFsIHZpcnR1YWwgbmV0d29yayBkcml2ZXJzIChiYXJldWRwLCBpcHZsYW4sIGlwdnRhcCwgdmV0aCkgdG8gdXNlIHRoZSBuZXcgbG9ja2luZyBhbmQgdW5yZWdpc3RyYXRpb24gQVBJcy4gVGhpcyBpbnZvbHZlcyBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgbmV0d29yayBkZXZpY2VzLCB3aGljaCBpcyBoaWdobHkgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 00:15:07 +0000 UTC FinishedAt: 2026-07-03 00:27:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_NET_SMALL_RTNL", "BAREUDP", "IPVLAN", "IPVTAP", "VETH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08bc5b2636afcbadc31bb17243eec094e048bd79", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_NET_SMALL_RTNL", "BAREUDP", "IPVLAN", "IPVTAP", "VETH" ], "series_id": "38748afc-2bf4-4bf5-9a26-a3d7a5923f6f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "unregister_netdevice_queue_net", "unregister_netdevice_many_net", "unregister_netdevice_queue_many_net", "rtnl_net_work_func", "bareudp_dellink", "__bareudp_dellink", "ipvlan_link_delete", "__ipvlan_link_delete", "ipvtap_dellink", "__ipvtap_dellink", "veth_dellink", "default_device_exit_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "a8a0740d-fdec-4a20-9aa5-7cb955707913" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX05FVF9TTUFMTF9SVE5MJiMzNDssCiAgICAmIzM0O0JBUkVVRFAmIzM0OywKICAgICYjMzQ7SVBWTEFOJiMzNDssCiAgICAmIzM0O0lQVlRBUCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3J0bmxfbmV0X3dvcmtfZnVuYyYjMzQ7LAogICAgJiMzNDtiYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19iYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7aXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O19faXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O2lwdnRhcF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O19faXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7dmV0aF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O2RlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIHVucmVnaXN0ZXJpbmcgbmV0d29yayBkZXZpY2VzIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMsIGFkZGluZyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHN1cHBvcnQgKENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTCkuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyBzZXZlcmFsIHZpcnR1YWwgbmV0d29yayBkcml2ZXJzIChiYXJldWRwLCBpcHZsYW4sIGlwdnRhcCwgdmV0aCkgdG8gdXNlIHRoZSBuZXcgbG9ja2luZyBhbmQgdW5yZWdpc3RyYXRpb24gQVBJcy4gVGhpcyBpbnZvbHZlcyBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgbmV0d29yayBkZXZpY2VzLCB3aGljaCBpcyBoaWdobHkgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1OGQ0MGE5NjYyNzExY2JiNjY0ZTQwMGE5MzYwZTcwZDY4M2YyMGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwMDoyNjozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iYXJldWRwLmMgYi9kcml2ZXJzL25ldC9iYXJldWRwLmNcbmluZGV4IDVlZjg0MWM4NTUyNjk3Li5jM2I1ZWQ1MmQ4Nzc4OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYmFyZXVkcC5jXG5AQCAtMzYsNiAmIzQzOzM2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBiYXJldWRwX25ldF9pZDtcbiBcbiBzdHJ1Y3QgYmFyZXVkcF9uZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgYmFyZXVkcF9saXN0O1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJhcmV1ZHBfY29uZiB7XG5AQCAtNjM2LDEwICYjNDM7NjM3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHBfZmluZF9kZXYoc3RydWN0IGJhcmV1ZHBfbmV0ICpibixcbiB7XG4gXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAsICp0ID0gTlVMTDtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmFyZXVkcCwgXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0LCBuZXh0KSB7XG4gXHRcdGlmIChjb25mLVx1MDAzZXBvcnQgPT0gYmFyZXVkcC1cdTAwM2Vwb3J0KVxuIFx0XHRcdHQgPSBiYXJldWRwO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Ym4tXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0cmV0dXJuIHQ7XG4gfVxuIFxuQEAgLTY3NSw3ICYjNDM7NjgxLDEwIEBAIHN0YXRpYyBpbnQgYmFyZXVkcF9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2YmFyZXVkcC1cdTAwM2VuZXh0LCBcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjkyLDEyICYjNDM7NzAxLDI2IEBAIHN0YXRpYyBpbnQgYmFyZXVkcF9saW5rX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNmJhcmV1ZHAtXHUwMDNlbmV4dCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBiYXJldWRwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdHN0cnVjdCBiYXJldWRwX25ldCAqYm47XG4gXG4tXHRsaXN0X2RlbChcdTAwMjZiYXJldWRwLVx1MDAzZW5leHQpO1xuLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbiYjNDM7XHRibiA9IG5ldF9nZW5lcmljKGJhcmV1ZHAtXHUwMDNlbmV0LCBiYXJldWRwX25ldF9pZCk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Ym4tXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmJhcmV1ZHAtXHUwMDNlbmV4dCkpXG4mIzQzO1x0XHRfX2JhcmV1ZHBfZGVsbGluayhkZXZfbmV0KGRldiksIGRldiwgaGVhZCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTc3Niw2ICYjNDM7Nzk5LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IGJhcmV1ZHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0c3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0KTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC03ODUsMTMgJiM0Mzs4MTAsMjUgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBiYXJldWRwX2V4aXRfcnRubF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpO1xuIFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCAqbmV4dDtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCBcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QsIG5leHQpXG4tXHRcdGJhcmV1ZHBfZGVsbGluayhiYXJldWRwLVx1MDAzZWRldiwgZGV2X2tpbGxfbGlzdCk7XG4mIzQzO1x0XHRfX2JhcmV1ZHBfZGVsbGluayhuZXQsIGJhcmV1ZHAtXHUwMDNlZGV2LCBkZXZfa2lsbF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0KSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYmFyZXVkcF9uZXRfb3BzID0ge1xuIFx0LmluaXQgPSBiYXJldWRwX2luaXRfbmV0LFxuIFx0LmV4aXRfcnRubCA9IGJhcmV1ZHBfZXhpdF9ydG5sX25ldCxcbiYjNDM7XHQuZXhpdCA9IGJhcmV1ZHBfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNmJhcmV1ZHBfbmV0X2lkLFxuIFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJhcmV1ZHBfbmV0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaCBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaFxuaW5kZXggODBmODRmYzg3MDA4YjMuLjhkMDVhZDQ4MDQzOGZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmhcbkBAIC02OSw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgaXB2bF9kZXYge1xuIFx0REVDTEFSRV9CSVRNQVAobWFjX2ZpbHRlcnMsIElQVkxBTl9NQUNfRklMVEVSX1NJWkUpO1xuIFx0bmV0ZGV2X2ZlYXR1cmVzX3RcdHNmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4mIzQzO1x0Ym9vbFx0XHRcdGR5aW5nO1xuIH07XG4gXG4gc3RydWN0IGlwdmxfYWRkciB7XG5AQCAtOTEsMTIgJiM0Mzs5MiwxMyBAQCBzdHJ1Y3QgaXB2bF9wb3J0IHtcbiBcdHN0cnVjdCBobGlzdF9oZWFkXHRobGhlYWRbSVBWTEFOX0hBU0hfU0laRV07XG4gXHRzcGlubG9ja190XHRcdGFkZHJzX2xvY2s7IC8qIGd1YXJkcyBoYXNoLXRhYmxlIGFuZCBhZGRycyAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aXB2bGFucztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0cG5vZGVzX2xvY2s7XG4gXHR1MTZcdFx0XHRtb2RlO1xuIFx0dTE2XHRcdFx0ZmxhZ3M7XG4gXHR1MTZcdFx0XHRkZXZfaWRfc3RhcnQ7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdxO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0YmFja2xvZztcbi1cdGludFx0XHRcdGNvdW50O1xuJiM0MztcdHJlZmNvdW50X3RcdFx0Y291bnQ7XG4gXHRzdHJ1Y3QgaWRhXHRcdGlkYTtcbiBcdG5ldGRldmljZV90cmFja2VyXHRkZXZfdHJhY2tlcjtcbiB9O1xuQEAgLTE2OCw3ICYjNDM7MTcwLDggQEAgdm9pZCBpcHZsYW5fY291bnRfcngoY29uc3Qgc3RydWN0IGlwdmxfZGV2ICppcHZsYW4sXG4gXHRcdCAgICAgdW5zaWduZWQgaW50IGxlbiwgYm9vbCBzdWNjZXNzLCBib29sIG1jYXN0KTtcbiBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4gXHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLXZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuJiM0Mzt2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiB2b2lkIGlwdmxhbl9saW5rX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBpcHZsYW5fbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTtcbiAjaWZkZWYgQ09ORklHX0lQVkxBTl9MM1NcbkBAIC0yMDcsNCAmIzQzOzIxMCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRpZl9pc19pcHZsYW5fcG9ydChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gaXB2bGFuX2hhbmRsZV9mcmFtZTtcbiB9XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXG4mIzQzO2V4dGVybiB2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjZW5kaWYgLyogX19JUFZMQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcbmluZGV4IGVkNDY0MzlhOWY0ZWIxLi5lZTQ2YTU1ZjczZDE0YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uY1xuQEAgLTcsNiAmIzQzOzcsMTIgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpcHZsYW4uaFwmIzM0O1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWVEFQKVxuJiM0Mzt2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbiYjNDM7RVhQT1JUX1NZTUJPTChfX2lwdnRhcF9kZWxsaW5rX3B0cik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbkBAIC0xNiw2ICYjNDM7MjIsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxuIFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcdGlmIChwb3J0LVx1MDAzZW1vZGUgIT0gbnZhbCkge1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXB2bGFuLCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XG4gXHRcdFx0ZmxhZ3MgPSBpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzO1xuIFx0XHRcdGlmIChudmFsID09IElQVkxBTl9NT0RFX0wzIHx8IG52YWwgPT0gSVBWTEFOX01PREVfTDNTKSB7XG5AQCAtNDAsNiAmIzQzOzQ4LDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCxcbiBcdFx0XHRpcHZsYW5fbDNzX3VucmVnaXN0ZXIocG9ydCk7XG4gXHRcdH1cbiBcdFx0cG9ydC1cdTAwM2Vtb2RlID0gbnZhbDtcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cG9ydC1cdTAwM2Vwbm9kZXNfbG9jayk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC01Niw2ICYjNDM7NjYsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxuIFx0XHRcdFx0XHQgTlVMTCk7XG4gXHR9XG4gXG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuJiM0MztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTc2LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZwb3J0LVx1MDAzZWhsaGVhZFtpZHhdKTtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlYWRkcnNfbG9jayk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cG9ydC1cdTAwM2ViYWNrbG9nKTtcbiBcdElOSVRfV09SSyhcdTAwMjZwb3J0LVx1MDAzZXdxLCBpcHZsYW5fcHJvY2Vzc19tdWx0aWNhc3QpO1xuIFx0aWRhX2luaXQoXHUwMDI2cG9ydC1cdTAwM2VpZGEpO1xuQEAgLTg2LDYgJiM0Mzs5OSw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZwb3J0LVx1MDAzZWRldl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnI6XG5AQCAtOTMsMTYgJiM0MzsxMDcsMTggQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0KVxuIHtcbi1cdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cG9ydC1cdTAwM2VkZXZfdHJhY2tlcik7XG4gXHRpZiAocG9ydC1cdTAwM2Vtb2RlID09IElQVkxBTl9NT0RFX0wzUylcbiBcdFx0aXB2bGFuX2wzc191bnJlZ2lzdGVyKHBvcnQpO1xuJiM0MztcbiBcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cG9ydC1cdTAwM2V3cSk7XG4mIzQzO1x0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnBvcnQtXHUwMDNlZGV2X3RyYWNrZXIpO1xuJiM0MztcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZwb3J0LVx1MDAzZWJhY2tsb2cpKSAhPSBOVUxMKSB7XG4gXHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTExMSw2ICYjNDM7MTI3LDI3IEBAIHN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGtmcmVlKHBvcnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX3BvcnRfcHV0KHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBvcnQtXHUwMDNlY291bnQpKVxuJiM0MztcdFx0aXB2bGFuX3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpcHZsX3BvcnQgKmlwdmxhbl9wb3J0X2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkge1xuJiM0MztcdFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9yY3UoZGV2KTtcbiYjNDM7XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnBvcnQtXHUwMDNlY291bnQpKVxuJiM0MztcdFx0XHRwb3J0ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwb3J0O1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgSVBWTEFOX0FMV0FZU19PTl9PRkxPQURTIFxcXG4gXHQoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IFxcXG4gXHQgTkVUSUZfRl9HU09fUk9CVVNUIHwgTkVUSUZfRl9HU09fU09GVFdBUkUgfCBORVRJRl9GX0dTT19FTkNBUF9BTEwpXG5AQCAtMTUzLDMwICYjNDM7MTkwLDQ1IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmICghaXB2bGFuLVx1MDAzZXBjcHVfc3RhdHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdG5ldGRldl9sb2NrKHBoeV9kZXYpO1xuJiM0MztcbiBcdGlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQocGh5X2RldikpIHtcbiBcdFx0ZXJyID0gaXB2bGFuX3BvcnRfY3JlYXRlKHBoeV9kZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdG5ldGRldl91bmxvY2socGh5X2Rldik7XG4gXHRcdFx0ZnJlZV9wZXJjcHUoaXB2bGFuLVx1MDAzZXBjcHVfc3RhdHMpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiYjNDM7XHRcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcbiYjNDM7XHRcdHJlZmNvdW50X3NldChcdTAwMjZwb3J0LVx1MDAzZWNvdW50LCAxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuJiM0MztcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBvcnQtXHUwMDNlY291bnQpO1xuIFx0fVxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuLVx0cG9ydC1cdTAwM2Vjb3VudCAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcbiYjNDM7XG4mIzQzO1x0aXB2bGFuLVx1MDAzZXBvcnQgPSBwb3J0O1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcHZsYW5fdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwdmxfZGV2ICppcHZsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2Rldjtcbi1cdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQ7XG4mIzQzO1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXY7XG4gXG4gXHRmcmVlX3BlcmNwdShpcHZsYW4tXHUwMDNlcGNwdV9zdGF0cyk7XG4gXG4tXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XG4tXHRwb3J0LVx1MDAzZWNvdW50IC09IDE7XG4tXHRpZiAoIXBvcnQtXHUwMDNlY291bnQpXG4tXHRcdGlwdmxhbl9wb3J0X2Rlc3Ryb3kocG9ydC1cdTAwM2VkZXYpO1xuJiM0MztcdHBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2RldjtcbiYjNDM7XHRuZXRkZXZfaG9sZChwaHlfZGV2LCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0bmV0ZGV2X2xvY2socGh5X2Rldik7XG4mIzQzO1xuJiM0MztcdGlwdmxhbl9wb3J0X3B1dChpcHZsYW4tXHUwMDNlcG9ydCk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl91bmxvY2socGh5X2Rldik7XG4mIzQzO1x0bmV0ZGV2X3B1dChwaHlfZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaXB2bGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC01OTQsOSAmIzQzOzY0Niw3IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQvKiBpcHZsYW5faW5pdCgpIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgcG9ydCwgaWYgcmVxdWlyZWQgKi9cbi1cdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcbi1cdGlwdmxhbi1cdTAwM2Vwb3J0ID0gcG9ydDtcbiYjNDM7XHRwb3J0ID0gaXB2bGFuLVx1MDAzZXBvcnQ7XG4gXG4gXHQvKiBJZiB0aGUgcG9ydC1pZCBiYXNlIGlzIGF0IHRoZSBNQVggdmFsdWUsIHRoZW4gd3JhcCBpdCBhcm91bmQgYW5kXG4gXHQgKiBiZWdpbiBmcm9tIDB4MSBhZ2Fpbi4gVGhpcyBtYXkgYmUgZHVlIHRvIGEgYnVzeSBzeXN0ZW0gd2hlcmUgbG90c1xuQEAgLTYzOSw3ICYjNDM7Njg5LDEwIEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gdW5saW5rX25ldGRldjtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuIFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2aXB2bGFuLVx1MDAzZXBub2RlLCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XG4gXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwaHlfZGV2LCBkZXYpO1xuIFx0cmV0dXJuIDA7XG4gXG5AQCAtNjUzLDcgJiM0Mzs3MDYsOCBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlwdmxhbl9saW5rX25ldyk7XG4gXG4tdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7dm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaXB2bF9hZGRyICphZGRyLCAqbmV4dDtcbkBAIC02NjgsMTAgJiM0Mzs3MjIsMjAgQEAgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiBcbiBcdGlkYV9mcmVlKFx1MDAyNmlwdmxhbi1cdTAwM2Vwb3J0LVx1MDAzZWlkYSwgZGV2LVx1MDAzZWRldl9pZCk7XG4gXHRsaXN0X2RlbF9yY3UoXHUwMDI2aXB2bGFuLVx1MDAzZXBub2RlKTtcbi1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbiBcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi1cdTAwM2VwaHlfZGV2LCBkZXYpO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19kZWxldGUpO1xuJiM0MztFWFBPUlRfU1lNQk9MKF9faXB2bGFuX2xpbmtfZGVsZXRlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdmxfZGV2ICppcHZsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlwdmxhbi1cdTAwM2Vwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XHRpZiAoIWlwdmxhbi1cdTAwM2VkeWluZylcbiYjNDM7XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2aXB2bGFuLVx1MDAzZXBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuJiM0Mzt9XG4gXG4gdm9pZCBpcHZsYW5fbGlua19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbkBAIC03MjksMTQgJiM0Mzs3OTMsMTkgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuLCAqbmV4dDtcbiYjNDM7XHRpbnQgZXJyLCByZXQgPSBOT1RJRllfRE9ORTtcbiBcdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQ7XG4gXHRMSVNUX0hFQUQobHN0X2tpbGwpO1xuLVx0aW50IGVycjtcbiBcbi1cdGlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSlcbi1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdGlmIChldmVudCA9PSBORVRERVZfUFJFQ0hBTkdFVVBQRVIgfHxcbiYjNDM7XHQgICAgZXZlbnQgPT0gTkVUREVWX0NIQU5HRVVQUEVSKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xuJiM0MztcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXQoZGV2KTtcbiYjNDM7XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuIFx0Y2FzZSBORVRERVZfVVA6XG5AQCAtNzYwLDE2ICYjNDM7ODI5LDI2IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcdFx0XHRpcHZsYW5fbWlncmF0ZV9sM3NfaG9vayhvbGRuZXQsIG5ld25ldCk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbiYjNDM7XHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOiB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4mIzQzO1xuIFx0XHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORylcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlwdmxhbiwgbmV4dCwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zLCBwbm9kZSlcbi1cdFx0XHRpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNlZGVsbGluayhpcHZsYW4tXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmxzdF9raWxsKTtcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcHZsYW4sIG5leHQsIFx1MDAyNnBvcnQtXHUwMDNlaXB2bGFucywgcG5vZGUpIHtcbiYjNDM7XHRcdFx0aXB2bGFuLVx1MDAzZWR5aW5nID0gdHJ1ZTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXG4mIzQzO1x0XHRcdGlmIChpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgIT0gXHUwMDI2aXB2bGFuX2xpbmtfb3BzKVxuJiM0MztcdFx0XHRcdF9faXB2dGFwX2RlbGxpbmtfcHRyKG5ldCwgaXB2bGFuLVx1MDAzZWRldiwgXHUwMDI2bHN0X2tpbGwpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVx1MDAzZWRldiwgXHUwMDI2bHN0X2tpbGwpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsc3Rfa2lsbCk7XG4gXHRcdGJyZWFrO1xuLVxuJiM0MztcdH1cbiBcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zLCBwbm9kZSkge1xuIFx0XHRcdG5ldGlmX2luaGVyaXRfdHNvX21heChpcHZsYW4tXHUwMDNlZGV2LCBkZXYpO1xuQEAgLTc4OCw4ICYjNDM7ODY3LDEwIEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcdFx0XHRlcnIgPSBuZXRpZl9wcmVfY2hhbmdlYWRkcl9ub3RpZnkoaXB2bGFuLVx1MDAzZWRldixcbiBcdFx0XHRcdFx0XHRcdCAgcHJlY2hhZGRyX2luZm8tXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdFx0XHQgIGV4dGFjayk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdHJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbkBAIC04MDIsNyAmIzQzOzg4Myw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcbiBcdGNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRTpcbiBcdFx0LyogRm9yYmlkIHVuZGVybHlpbmcgZGV2aWNlIHRvIGNoYW5nZSBpdHMgdHlwZS4gKi9cbi1cdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4mIzQzO1x0XHRyZXQgPSBOT1RJRllfQkFEO1xuJiM0MztcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6XG4gXHRjYXNlIE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSOlxuQEAgLTgxMCw3ICYjNDM7ODkyLDEyIEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpcHZsYW4sIFx1MDAyNnBvcnQtXHUwMDNlaXB2bGFucywgcG5vZGUpXG4gXHRcdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKGV2ZW50LCBpcHZsYW4tXHUwMDNlZGV2KTtcbiBcdH1cbi1cdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpcHZsYW5fcG9ydF9wdXQocG9ydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIHRoZSBjYWxsZXIgbXVzdCBoZWxkIHRoZSBhZGRycyBsb2NrICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jXG5pbmRleCAyZDZiYmRkZDFlZGQ1MS4uNjZjOTQ5ZDk0MjYxMDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuY1xuQEAgLTEwOSwxNCAmIzQzOzEwOSwyNiBAQCBzdGF0aWMgaW50IGlwdnRhcF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgX19pcHZ0YXBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpO1xuJiM0MztcdHRhcF9kZWxfcXVldWVzKFx1MDAyNnZsYW50YXAtXHUwMDNldGFwKTtcbiYjNDM7XHRfX2lwdmxhbl9saW5rX2RlbGV0ZShuZXQsIGRldiwgaGVhZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbi1cdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbnRhcCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IHZsYW50YXAtXHUwMDNldmxhbi5wb3J0O1xuIFxuLVx0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpO1xuLVx0dGFwX2RlbF9xdWV1ZXMoXHUwMDI2dmxhbi1cdTAwM2V0YXApO1xuLVx0aXB2bGFuX2xpbmtfZGVsZXRlKGRldiwgaGVhZCk7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiYjNDM7XHRpZiAoIXZsYW50YXAtXHUwMDNldmxhbi5keWluZylcbiYjNDM7XHRcdF9faXB2dGFwX2RlbGxpbmsoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2dGFwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtMTk4LDYgJiM0MzsyMTAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpcHZ0YXBfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0X19pcHZ0YXBfZGVsbGlua19wdHIgPSBfX2lwdnRhcF9kZWxsaW5rO1xuJiM0MztcbiBcdGVyciA9IHRhcF9jcmVhdGVfY2RldihcdTAwMjZpcHZ0YXBfY2RldiwgXHUwMDI2aXB2dGFwX21ham9yLCBcJiMzNDtpcHZ0YXBcJiMzNDssXG4gXHRcdFx0ICAgICAgVEhJU19NT0RVTEUpO1xuIFx0aWYgKGVycilcbkBAIC0yMjQsNiAmIzQzOzIzOCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXG4gb3V0MjpcbiBcdHRhcF9kZXN0cm95X2NkZXYoaXB2dGFwX21ham9yLCBcdTAwMjZpcHZ0YXBfY2Rldik7XG4gb3V0MTpcbiYjNDM7XHRfX2lwdnRhcF9kZWxsaW5rX3B0ciA9IE5VTEw7XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gbW9kdWxlX2luaXQoaXB2dGFwX2luaXQpO1xuQEAgLTIzNCw2ICYjNDM7MjUwLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGlwdnRhcF9leGl0KHZvaWQpXG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcHZ0YXBfbm90aWZpZXJfYmxvY2spO1xuIFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZpcHZ0YXBfY2xhc3MpO1xuIFx0dGFwX2Rlc3Ryb3lfY2RldihpcHZ0YXBfbWFqb3IsIFx1MDAyNmlwdnRhcF9jZGV2KTtcbiYjNDM7XHRfX2lwdnRhcF9kZWxsaW5rX3B0ciA9IE5VTEw7XG4gfVxuIG1vZHVsZV9leGl0KGlwdnRhcF9leGl0KTtcbiBNT0RVTEVfQUxJQVNfUlROTF9MSU5LKFwmIzM0O2lwdnRhcFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5pbmRleCAxYzUxNDIxNDkxNzUzNi4uODE3MGJmMzNjY2Y5NTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTc3LDYgJiM0Mzs3Nyw3IEBAIHN0cnVjdCB2ZXRoX3ByaXYge1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCpfeGRwX3Byb2c7XG4gXHRzdHJ1Y3QgdmV0aF9ycVx0XHQqcnE7XG4gXHR1bnNpZ25lZCBpbnRcdFx0cmVxdWVzdGVkX2hlYWRyb29tO1xuJiM0MztcdG5ldGRldmljZV90cmFja2VyXHRwZWVyX3RyYWNrZXI7XG4gfTtcbiBcbiBzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xuQEAgLTE5MDEsMTUgJiM0MzsxOTAyLDE3IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVx1MDAzZXBlZXIsIHBlZXIpO1xuJiM0MztcdG5ldGRldl9ob2xkKHBlZXIsIFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbiBcdGVyciA9IHZldGhfaW5pdF9xdWV1ZXMoZGV2LCB0Yik7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9xdWV1ZXM7XG4gXG4gXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocHJpdi1cdTAwM2VwZWVyLCBkZXYpO1xuJiM0MztcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuIFx0ZXJyID0gdmV0aF9pbml0X3F1ZXVlcyhwZWVyLCB0Yik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycl9xdWV1ZXM7XG4mIzQzO1x0XHRnb3RvIGVycl9wZWVyX3F1ZXVlcztcbiBcbiBcdHZldGhfZGlzYWJsZV9ncm8oZGV2KTtcbiBcdC8qIHVwZGF0ZSBYRFAgc3VwcG9ydGVkIGZlYXR1cmVzICovXG5AQCAtMTkxOCw3ICYjNDM7MTkyMSwxMSBAQCBzdGF0aWMgaW50IHZldGhfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9wZWVyX3F1ZXVlczpcbiYjNDM7XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuJiM0MztcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIGVycl9xdWV1ZXM6XG4mIzQzO1x0bmV0ZGV2X3B1dChwZWVyLCBcdTAwMjZwcml2LVx1MDAzZXBlZXJfdHJhY2tlcik7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIGVycl9yZWdpc3Rlcl9kZXY6XG4gXHQvKiBub3RoaW5nIHRvIGRvICovXG5AQCAtMTkzMywyNCAmIzQzOzE5NDAsMjUgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBzdGF0aWMgdm9pZCB2ZXRoX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xuJiM0MztcdG5ldGRldmljZV90cmFja2VyICpwZWVyX3RyYWNrZXI7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcjtcbiYjNDM7XHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xuIFxuIFx0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4tXHRwZWVyID0gcnRubF9kZXJlZmVyZW5jZShwcml2LVx1MDAzZXBlZXIpO1xuJiM0MztcdHBlZXJfdHJhY2tlciA9IFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyO1xuJiM0MztcdHBlZXIgPSB1bnJjdV9wb2ludGVyKHhjaGcoXHUwMDI2cHJpdi1cdTAwM2VwZWVyLCBOVUxMKSk7XG4mIzQzO1x0aWYgKCFwZWVyKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuLVx0LyogTm90ZSA6IGRlbGxpbmsoKSBpcyBjYWxsZWQgZnJvbSBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKCksXG4tXHQgKiBiZWZvcmUgYSByY3Vfc3luY2hyb25pemUoKSBwb2ludC4gVGhlIGRldmljZXMgYXJlIGd1YXJhbnRlZWRcbi1cdCAqIG5vdCBiZWluZyBmcmVlZCBiZWZvcmUgb25lIFJDVSBncmFjZSBwZXJpb2QuXG4tXHQgKi9cbi1cdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4gXG4tXHRpZiAocGVlcikge1xuLVx0XHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4tXHRcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbi1cdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUocGVlciwgaGVhZCk7XG4tXHR9XG4mIzQzO1x0cHJpdiA9IG5ldGRldl9wcml2KHBlZXIpO1xuJiM0MztcdGRldiA9IHVucmN1X3BvaW50ZXIoeGNoZyhcdTAwMjZwcml2LVx1MDAzZXBlZXIsIE5VTEwpKTtcbiYjNDM7XHRpZiAoZGV2KVxuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KGRldl9uZXQoZGV2KSwgcGVlciwgaGVhZCk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9wdXQocGVlciwgcGVlcl90cmFja2VyKTtcbiYjNDM7XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdmV0aF9wb2xpY3lbVkVUSF9JTkZPX01BWCAmIzQzOyAxXSA9IHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjhkYjI1Yjc5NTczZTNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTE4NDUsNiAmIzQzOzE4NDUsOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAbmFwaV9saXN0Olx0TGlzdCBlbnRyeSB1c2VkIGZvciBwb2xsaW5nIE5BUEkgZGV2aWNlc1xuICAqXHRAdW5yZWdfbGlzdDpcdExpc3QgZW50cnkgIHdoZW4gd2UgYXJlIHVucmVnaXN0ZXJpbmcgdGhlXG4gICpcdFx0XHRkZXZpY2U7IHNlZSB0aGUgZnVuY3Rpb24gdW5yZWdpc3Rlcl9uZXRkZXZcbiYjNDM7ICpcdEB1bnJlZ19saXN0X25ldDpMaXN0IGVudHJ5IHdoZW4gd2UgYXJlIHVucmVnaXN0ZXJpbmcgdGhlIGNyb3NzLW5ldG5zXG4mIzQzOyAqXHRcdFx0ZGV2aWNlOyBzZWUgdGhlIGZ1bmN0aW9uIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldCgpXG4gICpcdEBjbG9zZV9saXN0Olx0TGlzdCBlbnRyeSB1c2VkIHdoZW4gd2UgYXJlIGNsb3NpbmcgdGhlIGRldmljZVxuICAqXHRAcHR5cGVfYWxsOiAgICAgRGV2aWNlLXNwZWNpZmljIHBhY2tldCBoYW5kbGVycyBmb3IgYWxsIHByb3RvY29sc1xuICAqXHRAcHR5cGVfc3BlY2lmaWM6IERldmljZS1zcGVjaWZpYywgcHJvdG9jb2wtc3BlY2lmaWMgcGFja2V0IGhhbmRsZXJzXG5AQCAtMjI0MSw2ICYjNDM7MjI0Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmFwaV9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0dW5yZWdfbGlzdDtcbiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdHVucmVnX2xpc3RfbmV0O1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGNsb3NlX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwdHlwZV9hbGw7XG4gXG5AQCAtMzQ3Miw2ICYjNDM7MzQ3NywyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgTlVMTCk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0KTtcbiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IGVhMzlkZDIzYTE5NzZlLi45NTcyOTMzOWU3YTU0OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbkBAIC0xMTUsNiAmIzQzOzExNSwxMCBAQCBib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xuIFxuIGJvb2wgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKHN0cnVjdCBuZXQgKm5ldCk7XG4gXG4mIzQzO3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpO1xuJiM0Mzt2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKTtcbiYjNDM7dm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7XG4gI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfcnRubF9uZXQobmV0LCBwKVx0XHRcdFx0XFxcbiBcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQobmV0KSlcbiAjZGVmaW5lIHJ0bmxfbmV0X2RlcmVmZXJlbmNlKG5ldCwgcClcdFx0XHRcdFx0XFxcbkBAIC0xNTAsNiAmIzQzOzE1NCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgQVNTRVJUX1JUTkxfTkVUKHN0cnVjdCBuZXQgKm5ldClcbiBcdEFTU0VSVF9SVE5MKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApXHRcdFxcXG4gXHRyY3VfZGVyZWZlcmVuY2VfcnRubChwKVxuICNkZWZpbmUgcnRubF9uZXRfZGVyZWZlcmVuY2UobmV0LCBwKVx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5pbmRleCA4MGRlNWU5OGE2NmQ2Yy4uNTAxYWYxOTk5ZmU4MzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuQEAgLTE5Nyw2ICYjNDM7MTk3LDkgQEAgc3RydWN0IG5ldCB7XG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuIFx0LyogTW92ZSB0byBhIGJldHRlciBwbGFjZSB3aGVuIHRoZSBjb25maWcgZ3VhcmQgaXMgcmVtb3ZlZC4gKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRydG5sX211dGV4O1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cnRubF93b3JrO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl91bnJlZ19oZWFkO1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0ZGV2X3VucmVnX2xvY2s7XG4gI2VuZGlmXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZTT0NLRVRTKVxuIFx0c3RydWN0IG5ldG5zX3Zzb2NrXHR2c29jaztcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uYzQzYTQ0ZmI2NDlmYTIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTYwOCw4ICYjNDM7MTE2MDgsMTMgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFx0XHRcdHJ0bmxfbG9jaygpO1xuIFxuIFx0XHRcdC8qIFJlYnJvYWRjYXN0IHVucmVnaXN0ZXIgbm90aWZpY2F0aW9uICovXG4tXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdClcbiYjNDM7XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4gXHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVIsIGRldik7XG4mIzQzO1x0XHRcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7XHRcdFx0fVxuIFxuIFx0XHRcdF9fcnRubF91bmxvY2soKTtcbiBcdFx0XHRyY3VfYmFycmllcigpO1xuQEAgLTEyMDg3LDYgJiM0MzsxMjA5Miw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbiYjNDM7I2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlY2xvc2VfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbGlua193YXRjaF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VhZGpfbGlzdC51cHBlcik7XG5AQCAtMTIzMDQsNiAmIzQzOzEyMzEyLDEwIEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4gXHRBU1NFUlRfUlROTCgpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0aWYgKGhlYWQpIHtcbiBcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QsIGhlYWQpO1xuIFx0fSBlbHNlIHtcbkBAIC0xMjQ4MCw2ICYjNDM7MTI0OTIsMTYgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkge1xuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO1x0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4mIzQzO1xuJiM0MztcdFx0Lyogc3Bpbl9sb2NrKCkgY2FuIGJlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGxvb3BcbiYjNDM7XHRcdCAqIG9uY2UgdGhlIHBlci1uZXRucyBSVE5MIGNvbnZlcnNpb24gY29tcGxldGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0MzsjZW5kaWZcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2VkZXZfcmVnaXN0ZXJlZF90cmFja2VyKTtcbiBcdFx0bmV0X3NldF90b2RvKGRldik7XG4gXHRcdGNudCYjNDM7JiM0Mzs7XG5AQCAtMTI1MDIsNiAmIzQzOzEyNTI0LDk2IEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrKGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKSB7XG4mIzQzO1x0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4mIzQzO1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ID0gZGV2X25ldChkZXYpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCkpO1xuJiM0MztcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KSk7XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0LCBcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuJiM0MztcdHJ0bmxfbmV0X3F1ZXVlX3dvcmsobmV0KTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnRtcDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCBoZWFkLCB1bnJlZ19saXN0KSB7XG4mIzQzO1x0XHQvKiBPbmNlIGFsbCBjcm9zcy1uZXRucyB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIGlzXG4mIzQzO1x0XHQgKiBjb252ZXJ0ZWQgdG8gX25ldCgpIChvciBmb3IgZGVidWdnaW5nKSwgcmVtb3ZlIHRoaXMgY2hlY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0REVCVUdfTkVUX1dBUk5fT05DRSghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7JXMgd2FzIHVucmVnaXN0ZXJlZCBmcm9tIGEgZGlmZmVyZW50IG5ldG5zLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgZGV2LVx1MDAzZW5hbWUpO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuJiM0MztcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0LCBcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChzdHJ1Y3QgbmV0ICpuZXRfb2xkLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAobmV0X29sZCBcdTAwM2UgbmV0KSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2bmV0X29sZC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0X29sZC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCkpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCk7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCwgXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19oZWFkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldF9vbGQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnRtcDtcbiYjNDM7XHRMSVNUX0hFQUQodW5yZWdfaGVhZF9uZXQpO1xuJiM0MztcdExJU1RfSEVBRCh1bnJlZ19oZWFkKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQsIFx1MDAyNnVucmVnX2hlYWRfbmV0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsIFx1MDAyNnVucmVnX2hlYWRfbmV0LCB1bnJlZ19saXN0X25ldCkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCwgXHUwMDI2dW5yZWdfaGVhZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNnVucmVnX2hlYWQpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKlx0dW5yZWdpc3Rlcl9uZXRkZXYgLSByZW1vdmUgZGV2aWNlIGZyb20gdGhlIGtlcm5lbFxuICAqXHRAZGV2OiBkZXZpY2VcbkBAIC0xMjY1OCw2ICYjNDM7MTI3NzAsMTAgQEAgaW50IF9fZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdG5ldGRldl91bmxvY2soZGV2KTtcbiBcdGRldi1cdTAwM2VpZmluZGV4ID0gbmV3X2lmaW5kZXg7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChuZXRfb2xkLCBuZXQsIGRldik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChuZXdfbmFtZVswXSkge1xuIFx0XHQvKiBSZW5hbWUgdGhlIG5ldGRldiB0byBwcmVwYXJlZCBuYW1lICovXG4gXHRcdHdyaXRlX3NlcWxvY2tfYmgoXHUwMDI2bmV0ZGV2X3JlbmFtZV9sb2NrKTtcbkBAIC0xMzAzNCw3ICYjNDM7MTMxNTAsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGRlZmF1bHRfZGV2aWNlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdCAqIFB1c2ggYWxsIG1pZ3JhdGFibGUgbmV0d29yayBkZXZpY2VzIGJhY2sgdG8gdGhlXG4gXHQgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXG4gXHQgKi9cbi1cdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuIFx0Zm9yX2VhY2hfbmV0ZGV2X3NhZmUobmV0LCBkZXYsIGF1eCkge1xuIFx0XHRpbnQgZXJyO1xuIFx0XHRjaGFyIGZiX25hbWVbSUZOQU1TSVpdO1xuQEAgLTEzMDc3LDIxICYjNDM7MTMxOTMsMzYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxuIFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuIFxuIFx0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdF9fcnRubF9uZXRfbG9jayhcdTAwMjZpbml0X25ldCk7XG4mIzQzO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShuZXQsIG5ldF9saXN0LCBleGl0X2xpc3QpIHtcbiYjNDM7XHRcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xuIFx0XHRkZWZhdWx0X2RldmljZV9leGl0X25ldChuZXQpO1xuJiM0MztcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuJiM0MztcdF9fcnRubF9uZXRfdW5sb2NrKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldCwgbmV0X2xpc3QsIGV4aXRfbGlzdCkge1xuJiM0MztcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4mIzQzO1xuIFx0XHRmb3JfZWFjaF9uZXRkZXZfcmV2ZXJzZShuZXQsIGRldikge1xuIFx0XHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNlZGVsbGluaylcbiBcdFx0XHRcdGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XG4gXHR9XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgZGVmYXVsdF9kZXZpY2Vfb3BzID0ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggZDlkYWZlMjRmNTdlM2YuLmE5MWQyYjU4YWFkZGY4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbkBAIC0xODEsNiAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIG9wc19leGl0X3J0bmxfbGlzdChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpvcHNfbGlzdCxcbiBcdFx0XHRcdG9wcy1cdTAwM2VleGl0X3J0bmwobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiBcdH1cbiBcbkBAIC00MjIsNiAmIzQzOzQyMyw5IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uXG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCk7XG4gXHRsb2NrX3NldF9jbXBfZm4oXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgsIHJ0bmxfbmV0X2xvY2tfY21wX2ZuLCBOVUxMKTtcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfd29yaywgcnRubF9uZXRfd29ya19mdW5jKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4gI2VuZGlmXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlcHR5cGVfYWxsKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCAxMmFhM2FhMTY4OGIxMy4uYjEyOWY3OTNkODUxNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC0xOTcsNiAmIzQzOzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQobmV0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCk7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19ydG5sX25ldF91bmxvY2spO1xuQEAgLTI3Myw2ICYjNDM7Mjc0LDI5IEBAIGJvb2wgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIFx1MDAyNlx1MDAyNiBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJ0bmxfbmV0X3dxO1xuJiM0MztcbiYjNDM7dm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHF1ZXVlX3dvcmsocnRubF9uZXRfd3EsIFx1MDAyNm5ldC1cdTAwM2VydG5sX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJ0bmxfbmV0X3dxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7XG4mIzQzO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ0bmxfbmV0X2xvY2sobmV0KTtcbiYjNDM7XHRydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7fVxuICNlbHNlXG4gc3RhdGljIGludCBydG5sX25ldF9jbXBfbG9ja3MoY29uc3Qgc3RydWN0IG5ldCAqbmV0X2EsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9iKVxuIHtcbkBAIC0yODIsMTAgJiM0MzszMDYsMTEgQEAgc3RhdGljIGludCBydG5sX25ldF9jbXBfbG9ja3MoY29uc3Qgc3RydWN0IG5ldCAqbmV0X2EsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9iKVxuICNlbmRpZlxuIFxuIHN0cnVjdCBydG5sX25ldHMge1xuLVx0LyogLVx1MDAzZW5ld2xpbmsoKSBuZWVkcyB0byBmcmVlemUgMyBuZXRucyBhdCBtb3N0O1xuLVx0ICogMiBmb3IgdGhlIG5ldyBkZXZpY2UsIDEgZm9yIGl0cyBwZWVyLlxuJiM0MztcdC8qIC1cdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDQgbmV0bnMgYXQgbW9zdDtcbiYjNDM7XHQgKiAyIGZvciB0aGUgbmV3IGRldmljZSwgMSBmb3IgaXRzIHBlZXIsIDEgZm9yXG4mIzQzO1x0ICogYW4gZXhpc3RpbmcgZGV2aWNlIChkb19zZXRsaW5rKCkgcGF0aCkuXG4gXHQgKi9cbi1cdHN0cnVjdCBuZXQgKm5ldFszXTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRbNF07XG4gXHR1bnNpZ25lZCBjaGFyIGxlbjtcbiB9O1xuIFxuQEAgLTYzNiwxNiAmIzQzOzY2MSwxNSBAQCBpbnQgcnRubF9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfbGlua19yZWdpc3Rlcik7XG4gXG4tc3RhdGljIHZvaWQgX19ydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKVxuJiM0MztzdGF0aWMgdm9pZCBfX3J0bmxfa2lsbF9saW5rcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuIFxuIFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG4gXHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyA9PSBvcHMpXG4tXHRcdFx0b3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZsaXN0X2tpbGwpO1xuJiM0MztcdFx0XHRvcHMtXHUwMDNlZGVsbGluayhkZXYsIGRldl9raWxsX2xpc3QpO1xuIFx0fVxuLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsaXN0X2tpbGwpO1xuIH1cbiBcbiAvKiBSZXR1cm4gd2l0aCB0aGUgcnRubF9sb2NrIGhlbGQgd2hlbiB0aGVyZSBhcmUgbm8gbmV0d29ya1xuQEAgLTY3Niw2ICYjNDM7NzAwLDcgQEAgc3RhdGljIHZvaWQgcnRubF9sb2NrX3VucmVnaXN0ZXJpbmdfYWxsKHZvaWQpXG4gICovXG4gdm9pZCBydG5sX2xpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKVxuIHtcbiYjNDM7XHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpbmtfb3BzX211dGV4KTtcbkBAIC02ODksOCAmIzQzOzcxNCwxNCBAQCB2b2lkIHJ0bmxfbGlua191bnJlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXG4gXHRkb3duX3dyaXRlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIFx0cnRubF9sb2NrX3VucmVnaXN0ZXJpbmdfYWxsKCk7XG4gXG4tXHRmb3JfZWFjaF9uZXQobmV0KVxuLVx0XHRfX3J0bmxfa2lsbF9saW5rcyhuZXQsIG9wcyk7XG4mIzQzO1x0Zm9yX2VhY2hfbmV0KG5ldCkge1xuJiM0MztcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4mIzQzO1x0XHRfX3J0bmxfa2lsbF9saW5rcyhuZXQsIG9wcywgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4mIzQzO1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuJiM0MztcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXG4gXHRydG5sX3VubG9jaygpO1xuIFx0dXBfd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG5AQCAtNDE1NSw2ICYjNDM7NDE4Niw4IEBAIHN0YXRpYyBpbnQgcnRubF9uZXdsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cnRubF9uZXRzX2FkZChcdTAwMjZydG5sX25ldHMsIGdldF9uZXQoc29ja19uZXQoc2tiLVx1MDAzZXNrKSkpO1xuJiM0MztcbiBcdHJ0bmxfbmV0c19sb2NrKFx1MDAyNnJ0bmxfbmV0cyk7XG4gXHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcbiBcdHJ0bmxfbmV0c191bmxvY2soXHUwMDI2cnRubF9uZXRzKTtcbkBAIC03MjIxLDQgJiM0Mzs3MjU0LDEwIEBAIHZvaWQgX19pbml0IHJ0bmV0bGlua19pbml0KHZvaWQpXG4gXHRyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2cnRuZXRsaW5rX2Rldl9ub3RpZmllcik7XG4gXG4gXHRydG5sX3JlZ2lzdGVyX21hbnkocnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzKTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbiYjNDM7XHRydG5sX25ldF93cSA9IGNyZWF0ZV93b3JrcXVldWUoXCYjMzQ7cnRubF9uZXRcJiMzNDspO1xuJiM0MztcdGlmICghcnRubF9uZXRfd3EpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtDb3VsZCBub3QgY3JlYXRlIHJ0bmxfbmV0IHdvcmtxXCYjMzQ7KTtcbiYjNDM7I2VuZGlmXG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX05FVF9TTUFMTF9SVE5MJiMzNDssCiAgICAmIzM0O0JBUkVVRFAmIzM0OywKICAgICYjMzQ7SVBWTEFOJiMzNDssCiAgICAmIzM0O0lQVlRBUCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0JiMzNDssCiAgICAmIzM0O3J0bmxfbmV0X3dvcmtfZnVuYyYjMzQ7LAogICAgJiMzNDtiYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19iYXJldWRwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7aXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O19faXB2bGFuX2xpbmtfZGVsZXRlJiMzNDssCiAgICAmIzM0O2lwdnRhcF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O19faXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7dmV0aF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O2RlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIHVucmVnaXN0ZXJpbmcgbmV0d29yayBkZXZpY2VzIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMsIGFkZGluZyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHN1cHBvcnQgKENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTCkuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyBzZXZlcmFsIHZpcnR1YWwgbmV0d29yayBkcml2ZXJzIChiYXJldWRwLCBpcHZsYW4sIGlwdnRhcCwgdmV0aCkgdG8gdXNlIHRoZSBuZXcgbG9ja2luZyBhbmQgdW5yZWdpc3RyYXRpb24gQVBJcy4gVGhpcyBpbnZvbHZlcyBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgbmV0d29yayBkZXZpY2VzLCB3aGljaCBpcyBoaWdobHkgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4ZDQwYTk2NjI3MTFjYmI2NjRlNDAwYTkzNjBlNzBkNjgzZjIwZDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDAwOjI2OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jIGIvZHJpdmVycy9uZXQvYmFyZXVkcC5jCmluZGV4IDVlZjg0MWM4NTUyNjk3Li5jM2I1ZWQ1MmQ4Nzc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JhcmV1ZHAuYwpAQCAtMzYsNiAmIzQzOzM2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBiYXJldWRwX25ldF9pZDsKIAogc3RydWN0IGJhcmV1ZHBfbmV0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBiYXJldWRwX2xpc3Q7CiYjNDM7CXN0cnVjdCBtdXRleAkJbG9jazsKIH07CiAKIHN0cnVjdCBiYXJldWRwX2NvbmYgewpAQCAtNjM2LDEwICYjNDM7NjM3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHBfZmluZF9kZXYoc3RydWN0IGJhcmV1ZHBfbmV0ICpibiwKIHsKIAlzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAsICp0ID0gTlVMTDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmFyZXVkcCwgJmFtcDtibi0mZ3Q7YmFyZXVkcF9saXN0LCBuZXh0KSB7CiAJCWlmIChjb25mLSZndDtwb3J0ID09IGJhcmV1ZHAtJmd0O3BvcnQpCiAJCQl0ID0gYmFyZXVkcDsKIAl9CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JuLSZndDtsb2NrKTsKJiM0MzsKIAlyZXR1cm4gdDsKIH0KIApAQCAtNjc1LDcgJiM0Mzs2ODEsMTAgQEAgc3RhdGljIGludCBiYXJldWRwX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwogCWxpc3RfYWRkKCZhbXA7YmFyZXVkcC0mZ3Q7bmV4dCwgJmFtcDtibi0mZ3Q7YmFyZXVkcF9saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC02OTIsMTIgJiM0Mzs3MDEsMjYgQEAgc3RhdGljIGludCBiYXJldWRwX2xpbmtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtiYXJldWRwLSZndDtuZXh0KTsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBiYXJldWRwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuOwogCi0JbGlzdF9kZWwoJmFtcDtiYXJldWRwLSZndDtuZXh0KTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwomIzQzOwlibiA9IG5ldF9nZW5lcmljKGJhcmV1ZHAtJmd0O25ldCwgYmFyZXVkcF9uZXRfaWQpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtiYXJldWRwLSZndDtuZXh0KSkKJiM0MzsJCV9fYmFyZXVkcF9kZWxsaW5rKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwogfQogCiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzc2LDYgJiM0Mzs3OTksOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgYmFyZXVkcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJc3RydWN0IGJhcmV1ZHBfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYmFyZXVkcF9uZXRfaWQpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtibi0mZ3Q7YmFyZXVkcF9saXN0KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2JuLSZndDtsb2NrKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzg1LDEzICYjNDM7ODEwLDI1IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYmFyZXVkcF9leGl0X3J0bmxfbmV0KHN0cnVjdCBuZXQgKm5ldCwKIAlzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7CiAJc3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCAqbmV4dDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Ym4tJmd0O2xvY2spOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCAmYW1wO2JuLSZndDtiYXJldWRwX2xpc3QsIG5leHQpCi0JCWJhcmV1ZHBfZGVsbGluayhiYXJldWRwLSZndDtkZXYsIGRldl9raWxsX2xpc3QpOwomIzQzOwkJX19iYXJldWRwX2RlbGxpbmsobmV0LCBiYXJldWRwLSZndDtkZXYsIGRldl9raWxsX2xpc3QpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtibi0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYmFyZXVkcF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7CiYjNDM7CiYjNDM7CVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO2JuLSZndDtiYXJldWRwX2xpc3QpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBiYXJldWRwX25ldF9vcHMgPSB7CiAJLmluaXQgPSBiYXJldWRwX2luaXRfbmV0LAogCS5leGl0X3J0bmwgPSBiYXJldWRwX2V4aXRfcnRubF9uZXQsCiYjNDM7CS5leGl0ID0gYmFyZXVkcF9leGl0X25ldCwKIAkuaWQgICA9ICZhbXA7YmFyZXVkcF9uZXRfaWQsCiAJLnNpemUgPSBzaXplb2Yoc3RydWN0IGJhcmV1ZHBfbmV0KSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmggYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmgKaW5kZXggODBmODRmYzg3MDA4YjMuLjhkMDVhZDQ4MDQzOGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oCkBAIC02OSw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgaXB2bF9kZXYgewogCURFQ0xBUkVfQklUTUFQKG1hY19maWx0ZXJzLCBJUFZMQU5fTUFDX0ZJTFRFUl9TSVpFKTsKIAluZXRkZXZfZmVhdHVyZXNfdAlzZmVhdHVyZXM7CiAJdTMyCQkJbXNnX2VuYWJsZTsKJiM0MzsJYm9vbAkJCWR5aW5nOwogfTsKIAogc3RydWN0IGlwdmxfYWRkciB7CkBAIC05MSwxMiAmIzQzOzkyLDEzIEBAIHN0cnVjdCBpcHZsX3BvcnQgewogCXN0cnVjdCBobGlzdF9oZWFkCWhsaGVhZFtJUFZMQU5fSEFTSF9TSVpFXTsKIAlzcGlubG9ja190CQlhZGRyc19sb2NrOyAvKiBndWFyZHMgaGFzaC10YWJsZSBhbmQgYWRkcnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWlwdmxhbnM7CiYjNDM7CXN0cnVjdCBtdXRleAkJcG5vZGVzX2xvY2s7CiAJdTE2CQkJbW9kZTsKIAl1MTYJCQlmbGFnczsKIAl1MTYJCQlkZXZfaWRfc3RhcnQ7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdxOwogCXN0cnVjdCBza19idWZmX2hlYWQJYmFja2xvZzsKLQlpbnQJCQljb3VudDsKJiM0MzsJcmVmY291bnRfdAkJY291bnQ7CiAJc3RydWN0IGlkYQkJaWRhOwogCW5ldGRldmljZV90cmFja2VyCWRldl90cmFja2VyOwogfTsKQEAgLTE2OCw3ICYjNDM7MTcwLDggQEAgdm9pZCBpcHZsYW5fY291bnRfcngoY29uc3Qgc3RydWN0IGlwdmxfZGV2ICppcHZsYW4sCiAJCSAgICAgdW5zaWduZWQgaW50IGxlbiwgYm9vbCBzdWNjZXNzLCBib29sIG1jYXN0KTsKIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcywKIAkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKJiM0Mzt2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogdm9pZCBpcHZsYW5fbGlua19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBpcHZsYW5fbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTsKICNpZmRlZiBDT05GSUdfSVBWTEFOX0wzUwpAQCAtMjA3LDQgJiM0MzsyMTAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0aWZfaXNfaXB2bGFuX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi0mZ3Q7cnhfaGFuZGxlcikgPT0gaXB2bGFuX2hhbmRsZV9mcmFtZTsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApCiYjNDM7ZXh0ZXJuIHZvaWQgKCpfX2lwdnRhcF9kZWxsaW5rX3B0cikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYgLyogX19JUFZMQU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYwppbmRleCBlZDQ2NDM5YTlmNGViMS4uZWU0NmE1NWY3M2QxNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jCkBAIC03LDYgJiM0Mzs3LDEyIEBACiAKICNpbmNsdWRlICYjMzQ7aXB2bGFuLmgmIzM0OwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUCkKJiM0Mzt2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwomIzQzO0VYUE9SVF9TWU1CT0woX19pcHZ0YXBfZGVsbGlua19wdHIpOwomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCwKIAkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CkBAIC0xNiw2ICYjNDM7MjIsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLAogCiAJQVNTRVJUX1JUTkwoKTsKIAlpZiAocG9ydC0mZ3Q7bW9kZSAhPSBudmFsKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgJmFtcDtwb3J0LSZndDtpcHZsYW5zLCBwbm9kZSkgewogCQkJZmxhZ3MgPSBpcHZsYW4tJmd0O2Rldi0mZ3Q7ZmxhZ3M7CiAJCQlpZiAobnZhbCA9PSBJUFZMQU5fTU9ERV9MMyB8fCBudmFsID09IElQVkxBTl9NT0RFX0wzUykgewpAQCAtNDAsNiAmIzQzOzQ4LDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCwKIAkJCWlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTsKIAkJfQogCQlwb3J0LSZndDttb2RlID0gbnZhbDsKJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTU2LDYgJiM0Mzs2Niw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsCiAJCQkJCSBOVUxMKTsKIAl9CiAKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTc2LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCUlOSVRfSExJU1RfSEVBRCgmYW1wO3BvcnQtJmd0O2hsaGVhZFtpZHhdKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7cG9ydC0mZ3Q7YWRkcnNfbG9jayk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwb3J0LSZndDtwbm9kZXNfbG9jayk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO3BvcnQtJmd0O2JhY2tsb2cpOwogCUlOSVRfV09SSygmYW1wO3BvcnQtJmd0O3dxLCBpcHZsYW5fcHJvY2Vzc19tdWx0aWNhc3QpOwogCWlkYV9pbml0KCZhbXA7cG9ydC0mZ3Q7aWRhKTsKQEAgLTg2LDYgJiM0Mzs5OSw3IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3BvcnRfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWdvdG8gZXJyOwogCiAJbmV0ZGV2X2hvbGQoZGV2LCAmYW1wO3BvcnQtJmd0O2Rldl90cmFja2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyOgpAQCAtOTMsMTYgJiM0MzsxMDcsMTggQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydC0mZ3Q7ZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQluZXRkZXZfcHV0KGRldiwgJmFtcDtwb3J0LSZndDtkZXZfdHJhY2tlcik7CiAJaWYgKHBvcnQtJmd0O21vZGUgPT0gSVBWTEFOX01PREVfTDNTKQogCQlpcHZsYW5fbDNzX3VucmVnaXN0ZXIocG9ydCk7CiYjNDM7CiAJbmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwb3J0LSZndDt3cSk7CiYjNDM7CW5ldGRldl9wdXQoZGV2LCAmYW1wO3BvcnQtJmd0O2Rldl90cmFja2VyKTsKJiM0MzsKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtwb3J0LSZndDtiYWNrbG9nKSkgIT0gTlVMTCkgewogCQlkZXZfcHV0KHNrYi0mZ3Q7ZGV2KTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xMTEsNiAmIzQzOzEyNywyNyBAQCBzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJa2ZyZWUocG9ydCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9wdXQoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtwb3J0LSZndDtjb3VudCkpCiYjNDM7CQlpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlwdmxfcG9ydCAqaXB2bGFuX3BvcnRfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0ID0gTlVMTDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkgewomIzQzOwkJcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9yY3UoZGV2KTsKJiM0MzsJCWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7cG9ydC0mZ3Q7Y291bnQpKQomIzQzOwkJCXBvcnQgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcG9ydDsKJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIElQVkxBTl9BTFdBWVNfT05fT0ZMT0FEUyBcCiAJKE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfCBcCiAJIE5FVElGX0ZfR1NPX1JPQlVTVCB8IE5FVElGX0ZfR1NPX1NPRlRXQVJFIHwgTkVUSUZfRl9HU09fRU5DQVBfQUxMKQpAQCAtMTUzLDMwICYjNDM7MTkwLDQ1IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAoIWlwdmxhbi0mZ3Q7cGNwdV9zdGF0cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJbmV0ZGV2X2xvY2socGh5X2Rldik7CiYjNDM7CiAJaWYgKCFuZXRpZl9pc19pcHZsYW5fcG9ydChwaHlfZGV2KSkgewogCQllcnIgPSBpcHZsYW5fcG9ydF9jcmVhdGUocGh5X2Rldik7CiAJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJbmV0ZGV2X3VubG9jayhwaHlfZGV2KTsKIAkJCWZyZWVfcGVyY3B1KGlwdmxhbi0mZ3Q7cGNwdV9zdGF0cyk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiYjNDM7CQlwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7CiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtwb3J0LSZndDtjb3VudCwgMSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7CiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDtwb3J0LSZndDtjb3VudCk7CiAJfQotCXBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTsKLQlwb3J0LSZndDtjb3VudCAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJbmV0ZGV2X3VubG9jayhwaHlfZGV2KTsKJiM0MzsKJiM0MzsJaXB2bGFuLSZndDtwb3J0ID0gcG9ydDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaXB2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5X2RldiA9IGlwdmxhbi0mZ3Q7cGh5X2RldjsKLQlzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0OwomIzQzOwluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXY7CiAKIAlmcmVlX3BlcmNwdShpcHZsYW4tJmd0O3BjcHVfc3RhdHMpOwogCi0JcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpOwotCXBvcnQtJmd0O2NvdW50IC09IDE7Ci0JaWYgKCFwb3J0LSZndDtjb3VudCkKLQkJaXB2bGFuX3BvcnRfZGVzdHJveShwb3J0LSZndDtkZXYpOwomIzQzOwlwaHlfZGV2ID0gaXB2bGFuLSZndDtwaHlfZGV2OwomIzQzOwluZXRkZXZfaG9sZChwaHlfZGV2LCAmYW1wO2Rldl90cmFja2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsJbmV0ZGV2X2xvY2socGh5X2Rldik7CiYjNDM7CiYjNDM7CWlwdmxhbl9wb3J0X3B1dChpcHZsYW4tJmd0O3BvcnQpOwomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrKHBoeV9kZXYpOwomIzQzOwluZXRkZXZfcHV0KHBoeV9kZXYsICZhbXA7ZGV2X3RyYWNrZXIpOwogfQogCiBzdGF0aWMgaW50IGlwdmxhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01OTQsOSAmIzQzOzY0Niw3IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcywKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIGlwdmxhbl9pbml0KCkgd291bGQgaGF2ZSBjcmVhdGVkIHRoZSBwb3J0LCBpZiByZXF1aXJlZCAqLwotCXBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTsKLQlpcHZsYW4tJmd0O3BvcnQgPSBwb3J0OwomIzQzOwlwb3J0ID0gaXB2bGFuLSZndDtwb3J0OwogCiAJLyogSWYgdGhlIHBvcnQtaWQgYmFzZSBpcyBhdCB0aGUgTUFYIHZhbHVlLCB0aGVuIHdyYXAgaXQgYXJvdW5kIGFuZAogCSAqIGJlZ2luIGZyb20gMHgxIGFnYWluLiBUaGlzIG1heSBiZSBkdWUgdG8gYSBidXN5IHN5c3RlbSB3aGVyZSBsb3RzCkBAIC02MzksNyAmIzQzOzY4OSwxMCBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsCiAJaWYgKGVycikKIAkJZ290byB1bmxpbmtfbmV0ZGV2OwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb3J0LSZndDtwbm9kZXNfbG9jayk7CiAJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtpcHZsYW4tJmd0O3Bub2RlLCAmYW1wO3BvcnQtJmd0O2lwdmxhbnMpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwb3J0LSZndDtwbm9kZXNfbG9jayk7CiYjNDM7CiAJbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocGh5X2RldiwgZGV2KTsKIAlyZXR1cm4gMDsKIApAQCAtNjUzLDcgJiM0Mzs3MDYsOCBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19uZXcpOwogCi12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQomIzQzO3ZvaWQgX19pcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwdmxfYWRkciAqYWRkciwgKm5leHQ7CkBAIC02NjgsMTAgJiM0Mzs3MjIsMjAgQEAgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIAogCWlkYV9mcmVlKCZhbXA7aXB2bGFuLSZndDtwb3J0LSZndDtpZGEsIGRldi0mZ3Q7ZGV2X2lkKTsKIAlsaXN0X2RlbF9yY3UoJmFtcDtpcHZsYW4tJmd0O3Bub2RlKTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwomIzQzOwl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQobmV0LCBkZXYsIGhlYWQpOwogCW5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi0mZ3Q7cGh5X2RldiwgZGV2KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwdmxhbl9saW5rX2RlbGV0ZSk7CiYjNDM7RVhQT1JUX1NZTUJPTChfX2lwdmxhbl9saW5rX2RlbGV0ZSk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpcHZsYW4tJmd0O3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKJiM0MzsJaWYgKCFpcHZsYW4tJmd0O2R5aW5nKQomIzQzOwkJX19pcHZsYW5fbGlua19kZWxldGUoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtpcHZsYW4tJmd0O3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKJiM0Mzt9CiAKIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTcyOSwxNCAmIzQzOzc5MywxOSBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAJc3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAJc3RydWN0IGlwdmxfZGV2ICppcHZsYW4sICpuZXh0OwomIzQzOwlpbnQgZXJyLCByZXQgPSBOT1RJRllfRE9ORTsKIAlzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0OwogCUxJU1RfSEVBRChsc3Rfa2lsbCk7Ci0JaW50IGVycjsKIAotCWlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwlpZiAoZXZlbnQgPT0gTkVUREVWX1BSRUNIQU5HRVVQUEVSIHx8CiYjNDM7CSAgICBldmVudCA9PSBORVRERVZfQ0hBTkdFVVBQRVIpCiYjNDM7CQlyZXR1cm4gcmV0OwogCi0JcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKGRldik7CiYjNDM7CXBvcnQgPSBpcHZsYW5fcG9ydF9nZXQoZGV2KTsKJiM0MzsJaWYgKCFwb3J0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BvcnQtJmd0O3Bub2Rlc19sb2NrKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9VUDoKQEAgLTc2MCwxNiAmIzQzOzgyOSwyNiBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAJCQlpcHZsYW5fbWlncmF0ZV9sM3NfaG9vayhvbGRuZXQsIG5ld25ldCk7CiAJCWJyZWFrOwogCX0KLQljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgomIzQzOwljYXNlIE5FVERFVl9VTlJFR0lTVEVSOiB7CiYjNDM7CQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiYjNDM7CiAJCWlmIChkZXYtJmd0O3JlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORykKIAkJCWJyZWFrOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcHZsYW4sIG5leHQsICZhbXA7cG9ydC0mZ3Q7aXB2bGFucywgcG5vZGUpCi0JCQlpcHZsYW4tJmd0O2Rldi0mZ3Q7cnRubF9saW5rX29wcy0mZ3Q7ZGVsbGluayhpcHZsYW4tJmd0O2RldiwKLQkJCQkJCQkgICAgJmFtcDtsc3Rfa2lsbCk7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCAmYW1wO3BvcnQtJmd0O2lwdmxhbnMsIHBub2RlKSB7CiYjNDM7CQkJaXB2bGFuLSZndDtkeWluZyA9IHRydWU7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUCkKJiM0MzsJCQlpZiAoaXB2bGFuLSZndDtkZXYtJmd0O3J0bmxfbGlua19vcHMgIT0gJmFtcDtpcHZsYW5fbGlua19vcHMpCiYjNDM7CQkJCV9faXB2dGFwX2RlbGxpbmtfcHRyKG5ldCwgaXB2bGFuLSZndDtkZXYsICZhbXA7bHN0X2tpbGwpOwomIzQzOwkJCWVsc2UKJiM0MzsjZW5kaWYKJiM0MzsJCQkJX19pcHZsYW5fbGlua19kZWxldGUobmV0LCBpcHZsYW4tJmd0O2RldiwgJmFtcDtsc3Rfa2lsbCk7CiYjNDM7CQl9CiYjNDM7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtsc3Rfa2lsbCk7CiAJCWJyZWFrOwotCiYjNDM7CX0KIAljYXNlIE5FVERFVl9GRUFUX0NIQU5HRToKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShpcHZsYW4sICZhbXA7cG9ydC0mZ3Q7aXB2bGFucywgcG5vZGUpIHsKIAkJCW5ldGlmX2luaGVyaXRfdHNvX21heChpcHZsYW4tJmd0O2RldiwgZGV2KTsKQEAgLTc4OCw4ICYjNDM7ODY3LDEwIEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKIAkJCWVyciA9IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShpcHZsYW4tJmd0O2RldiwKIAkJCQkJCQkgIHByZWNoYWRkcl9pbmZvLSZndDtkZXZfYWRkciwKIAkJCQkJCQkgIGV4dGFjayk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCQlicmVhazsKIApAQCAtODAyLDcgJiM0Mzs4ODMsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAKIAljYXNlIE5FVERFVl9QUkVfVFlQRV9DSEFOR0U6CiAJCS8qIEZvcmJpZCB1bmRlcmx5aW5nIGRldmljZSB0byBjaGFuZ2UgaXRzIHR5cGUuICovCi0JCXJldHVybiBOT1RJRllfQkFEOwomIzQzOwkJcmV0ID0gTk9USUZZX0JBRDsKJiM0MzsJCWJyZWFrOwogCiAJY2FzZSBORVRERVZfTk9USUZZX1BFRVJTOgogCWNhc2UgTkVUREVWX0JPTkRJTkdfRkFJTE9WRVI6CkBAIC04MTAsNyAmIzQzOzg5MiwxMiBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXB2bGFuLCAmYW1wO3BvcnQtJmd0O2lwdmxhbnMsIHBub2RlKQogCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKGV2ZW50LCBpcHZsYW4tJmd0O2Rldik7CiAJfQotCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwomIzQzOwlpcHZsYW5fcG9ydF9wdXQocG9ydCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qIHRoZSBjYWxsZXIgbXVzdCBoZWxkIHRoZSBhZGRycyBsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMKaW5kZXggMmQ2YmJkZGQxZWRkNTEuLjY2Yzk0OWQ5NDI2MTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jCkBAIC0xMDksMTQgJiM0MzsxMDksMjYgQEAgc3RhdGljIGludCBpcHZ0YXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX2lwdnRhcF9kZWxsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbnRhcCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CW5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTsKJiM0MzsJdGFwX2RlbF9xdWV1ZXMoJmFtcDt2bGFudGFwLSZndDt0YXApOwomIzQzOwlfX2lwdmxhbl9saW5rX2RlbGV0ZShuZXQsIGRldiwgaGVhZCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0Jc3RydWN0IGlwdnRhcF9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbnRhcCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSB2bGFudGFwLSZndDt2bGFuLnBvcnQ7CiAKLQluZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKGRldik7Ci0JdGFwX2RlbF9xdWV1ZXMoJmFtcDt2bGFuLSZndDt0YXApOwotCWlwdmxhbl9saW5rX2RlbGV0ZShkZXYsIGhlYWQpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwomIzQzOwlpZiAoIXZsYW50YXAtJmd0O3ZsYW4uZHlpbmcpCiYjNDM7CQlfX2lwdnRhcF9kZWxsaW5rKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7cG5vZGVzX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBpcHZ0YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE5OCw2ICYjNDM7MjEwLDggQEAgc3RhdGljIGludCBfX2luaXQgaXB2dGFwX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CV9faXB2dGFwX2RlbGxpbmtfcHRyID0gX19pcHZ0YXBfZGVsbGluazsKJiM0MzsKIAllcnIgPSB0YXBfY3JlYXRlX2NkZXYoJmFtcDtpcHZ0YXBfY2RldiwgJmFtcDtpcHZ0YXBfbWFqb3IsICYjMzQ7aXB2dGFwJiMzNDssCiAJCQkgICAgICBUSElTX01PRFVMRSk7CiAJaWYgKGVycikKQEAgLTIyNCw2ICYjNDM7MjM4LDggQEAgc3RhdGljIGludCBfX2luaXQgaXB2dGFwX2luaXQodm9pZCkKIG91dDI6CiAJdGFwX2Rlc3Ryb3lfY2RldihpcHZ0YXBfbWFqb3IsICZhbXA7aXB2dGFwX2NkZXYpOwogb3V0MToKJiM0MzsJX19pcHZ0YXBfZGVsbGlua19wdHIgPSBOVUxMOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiBtb2R1bGVfaW5pdChpcHZ0YXBfaW5pdCk7CkBAIC0yMzQsNiAmIzQzOzI1MCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHZ0YXBfZXhpdCh2b2lkKQogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7aXB2dGFwX25vdGlmaWVyX2Jsb2NrKTsKIAljbGFzc191bnJlZ2lzdGVyKCZhbXA7aXB2dGFwX2NsYXNzKTsKIAl0YXBfZGVzdHJveV9jZGV2KGlwdnRhcF9tYWpvciwgJmFtcDtpcHZ0YXBfY2Rldik7CiYjNDM7CV9faXB2dGFwX2RlbGxpbmtfcHRyID0gTlVMTDsKIH0KIG1vZHVsZV9leGl0KGlwdnRhcF9leGl0KTsKIE1PRFVMRV9BTElBU19SVE5MX0xJTksoJiMzNDtpcHZ0YXAmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMWM1MTQyMTQ5MTc1MzYuLjgxNzBiZjMzY2NmOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92ZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jCkBAIC03Nyw2ICYjNDM7NzcsNyBAQCBzdHJ1Y3QgdmV0aF9wcml2IHsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSpfeGRwX3Byb2c7CiAJc3RydWN0IHZldGhfcnEJCSpycTsKIAl1bnNpZ25lZCBpbnQJCXJlcXVlc3RlZF9oZWFkcm9vbTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIJcGVlcl90cmFja2VyOwogfTsKIAogc3RydWN0IHZldGhfeGRwX3R4X2JxIHsKQEAgLTE5MDEsMTUgJiM0MzsxOTAyLDE3IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlyY3VfYXNzaWduX3BvaW50ZXIocHJpdi0mZ3Q7cGVlciwgcGVlcik7CiYjNDM7CW5ldGRldl9ob2xkKHBlZXIsICZhbXA7cHJpdi0mZ3Q7cGVlcl90cmFja2VyLCBHRlBfS0VSTkVMKTsKIAllcnIgPSB2ZXRoX2luaXRfcXVldWVzKGRldiwgdGIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3F1ZXVlczsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIocHJpdi0mZ3Q7cGVlciwgZGV2KTsKJiM0MzsJbmV0ZGV2X2hvbGQoZGV2LCAmYW1wO3ByaXYtJmd0O3BlZXJfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiAJZXJyID0gdmV0aF9pbml0X3F1ZXVlcyhwZWVyLCB0Yik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfcXVldWVzOwomIzQzOwkJZ290byBlcnJfcGVlcl9xdWV1ZXM7CiAKIAl2ZXRoX2Rpc2FibGVfZ3JvKGRldik7CiAJLyogdXBkYXRlIFhEUCBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KQEAgLTE5MTgsNyAmIzQzOzE5MjEsMTEgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCXJldHVybiAwOwogCiYjNDM7ZXJyX3BlZXJfcXVldWVzOgomIzQzOwluZXRkZXZfcHV0KGRldiwgJmFtcDtwcml2LSZndDtwZWVyX3RyYWNrZXIpOwomIzQzOwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIGVycl9xdWV1ZXM6CiYjNDM7CW5ldGRldl9wdXQocGVlciwgJmFtcDtwcml2LSZndDtwZWVyX3RyYWNrZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiBlcnJfcmVnaXN0ZXJfZGV2OgogCS8qIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTE5MzMsMjQgJiM0MzsxOTQwLDI1IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIHN0YXRpYyB2b2lkIHZldGhfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewotCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7CiYjNDM7CW5ldGRldmljZV90cmFja2VyICpwZWVyX3RyYWNrZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBlZXI7CiYjNDM7CXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwZWVyID0gcnRubF9kZXJlZmVyZW5jZShwcml2LSZndDtwZWVyKTsKJiM0MzsJcGVlcl90cmFja2VyID0gJmFtcDtwcml2LSZndDtwZWVyX3RyYWNrZXI7CiYjNDM7CXBlZXIgPSB1bnJjdV9wb2ludGVyKHhjaGcoJmFtcDtwcml2LSZndDtwZWVyLCBOVUxMKSk7CiYjNDM7CWlmICghcGVlcikKJiM0MzsJCXJldHVybjsKIAotCS8qIE5vdGUgOiBkZWxsaW5rKCkgaXMgY2FsbGVkIGZyb20gZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCgpLAotCSAqIGJlZm9yZSBhIHJjdV9zeW5jaHJvbml6ZSgpIHBvaW50LiBUaGUgZGV2aWNlcyBhcmUgZ3VhcmFudGVlZAotCSAqIG5vdCBiZWluZyBmcmVlZCBiZWZvcmUgb25lIFJDVSBncmFjZSBwZXJpb2QuCi0JICovCi0JUkNVX0lOSVRfUE9JTlRFUihwcml2LSZndDtwZWVyLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwogCi0JaWYgKHBlZXIpIHsKLQkJcHJpdiA9IG5ldGRldl9wcml2KHBlZXIpOwotCQlSQ1VfSU5JVF9QT0lOVEVSKHByaXYtJmd0O3BlZXIsIE5VTEwpOwotCQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShwZWVyLCBoZWFkKTsKLQl9CiYjNDM7CXByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTsKJiM0MzsJZGV2ID0gdW5yY3VfcG9pbnRlcih4Y2hnKCZhbXA7cHJpdi0mZ3Q7cGVlciwgTlVMTCkpOwomIzQzOwlpZiAoZGV2KQomIzQzOwkJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KGRldl9uZXQoZGV2KSwgcGVlciwgaGVhZCk7CiYjNDM7CiYjNDM7CW5ldGRldl9wdXQocGVlciwgcGVlcl90cmFja2VyKTsKJiM0MzsJbmV0ZGV2X3B1dChkZXYsICZhbXA7cHJpdi0mZ3Q7cGVlcl90cmFja2VyKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHZldGhfcG9saWN5W1ZFVEhfSU5GT19NQVggJiM0MzsgMV0gPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Ni4uOGRiMjViNzk1NzNlM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMTg0NSw2ICYjNDM7MTg0NSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKglAbmFwaV9saXN0OglMaXN0IGVudHJ5IHVzZWQgZm9yIHBvbGxpbmcgTkFQSSBkZXZpY2VzCiAgKglAdW5yZWdfbGlzdDoJTGlzdCBlbnRyeSAgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGUKICAqCQkJZGV2aWNlOyBzZWUgdGhlIGZ1bmN0aW9uIHVucmVnaXN0ZXJfbmV0ZGV2CiYjNDM7ICoJQHVucmVnX2xpc3RfbmV0Okxpc3QgZW50cnkgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGUgY3Jvc3MtbmV0bnMKJiM0MzsgKgkJCWRldmljZTsgc2VlIHRoZSBmdW5jdGlvbiB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoKQogICoJQGNsb3NlX2xpc3Q6CUxpc3QgZW50cnkgdXNlZCB3aGVuIHdlIGFyZSBjbG9zaW5nIHRoZSBkZXZpY2UKICAqCUBwdHlwZV9hbGw6ICAgICBEZXZpY2Utc3BlY2lmaWMgcGFja2V0IGhhbmRsZXJzIGZvciBhbGwgcHJvdG9jb2xzCiAgKglAcHR5cGVfc3BlY2lmaWM6IERldmljZS1zcGVjaWZpYywgcHJvdG9jb2wtc3BlY2lmaWMgcGFja2V0IGhhbmRsZXJzCkBAIC0yMjQxLDYgJiM0MzsyMjQzLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQJZGV2X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAluYXBpX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAl1bnJlZ19saXN0OwomIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAl1bnJlZ19saXN0X25ldDsKJiM0MzsjZW5kaWYKIAlzdHJ1Y3QgbGlzdF9oZWFkCWNsb3NlX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAlwdHlwZV9hbGw7CiAKQEAgLTM0NzIsNiAmIzQzOzM0NzcsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBOVUxMKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKJiM0Mzt2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKJiM0Mzt2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIGludCBuZXRkZXZfcmVmY250X3JlYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCBlYTM5ZGQyM2ExOTc2ZS4uOTU3MjkzMzllN2E1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMTE1LDYgJiM0MzsxMTUsMTAgQEAgYm9vbCBydG5sX25ldF9pc19sb2NrZWQoc3RydWN0IG5ldCAqbmV0KTsKIAogYm9vbCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQoc3RydWN0IG5ldCAqbmV0KTsKIAomIzQzO3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpOwomIzQzO3ZvaWQgcnRubF9uZXRfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7CiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApCQkJCVwKIAlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKG5ldCkpCiAjZGVmaW5lIHJ0bmxfbmV0X2RlcmVmZXJlbmNlKG5ldCwgcCkJCQkJCVwKQEAgLTE1MCw2ICYjNDM7MTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBBU1NFUlRfUlROTF9ORVQoc3RydWN0IG5ldCAqbmV0KQogCUFTU0VSVF9SVE5MKCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsKICNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3J0bmxfbmV0KG5ldCwgcCkJCVwKIAlyY3VfZGVyZWZlcmVuY2VfcnRubChwKQogI2RlZmluZSBydG5sX25ldF9kZXJlZmVyZW5jZShuZXQsIHApCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCmluZGV4IDgwZGU1ZTk4YTY2ZDZjLi41MDFhZjE5OTlmZTgzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtMTk3LDYgJiM0MzsxOTcsOSBAQCBzdHJ1Y3QgbmV0IHsKICNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKIAkvKiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHdoZW4gdGhlIGNvbmZpZyBndWFyZCBpcyByZW1vdmVkLiAqLwogCXN0cnVjdCBtdXRleAkJcnRubF9tdXRleDsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXJ0bmxfd29yazsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAlkZXZfdW5yZWdfaGVhZDsKJiM0MzsJc3BpbmxvY2tfdAkJZGV2X3VucmVnX2xvY2s7CiAjZW5kaWYKICNpZiBJU19FTkFCTEVEKENPTkZJR19WU09DS0VUUykKIAlzdHJ1Y3QgbmV0bnNfdnNvY2sJdnNvY2s7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jNDNhNDRmYjY0OWZhMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExNjA4LDggJiM0MzsxMTYwOCwxMyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAJCQlydG5sX2xvY2soKTsKIAogCQkJLyogUmVicm9hZGNhc3QgdW5yZWdpc3RlciBub3RpZmljYXRpb24gKi8KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBsaXN0LCB0b2RvX2xpc3QpCiYjNDM7CQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkgewomIzQzOwkJCQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiYjNDM7CiYjNDM7CQkJCV9fcnRubF9uZXRfbG9jayhuZXQpOwogCQkJCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfVU5SRUdJU1RFUiwgZGV2KTsKJiM0MzsJCQkJX19ydG5sX25ldF91bmxvY2sobmV0KTsKJiM0MzsJCQl9CiAKIAkJCV9fcnRubF91bmxvY2soKTsKIAkJCXJjdV9iYXJyaWVyKCk7CkBAIC0xMjA4Nyw2ICYjNDM7MTIwOTIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7bmFwaV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdCk7CiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQpOwomIzQzOyNlbmRpZgogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtjbG9zZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7bGlua193YXRjaF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7YWRqX2xpc3QudXBwZXIpOwpAQCAtMTIzMDQsNiAmIzQzOzEyMzEyLDEwIEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlBU1NFUlRfUlROTCgpOwogCiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDt1bnJlZ19saXN0X25ldCkpOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChoZWFkKSB7CiAJCWxpc3RfbW92ZV90YWlsKCZhbXA7ZGV2LSZndDt1bnJlZ19saXN0LCBoZWFkKTsKIAl9IGVsc2UgewpAQCAtMTI0ODAsNiAmIzQzOzEyNDkyLDE2IEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7CiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwkJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwomIzQzOwomIzQzOwkJLyogc3Bpbl9sb2NrKCkgY2FuIGJlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGxvb3AKJiM0MzsJCSAqIG9uY2UgdGhlIHBlci1uZXRucyBSVE5MIGNvbnZlcnNpb24gY29tcGxldGVzLgomIzQzOwkJICovCiYjNDM7CQlzcGluX2xvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7ZGV2LSZndDt1bnJlZ19saXN0X25ldCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzOyNlbmRpZgogCQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXYtJmd0O2Rldl9yZWdpc3RlcmVkX3RyYWNrZXIpOwogCQluZXRfc2V0X3RvZG8oZGV2KTsKIAkJY250JiM0MzsmIzQzOzsKQEAgLTEyNTAyLDYgJiM0MzsxMjUyNCw5NiBAQCB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MCiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CW5ldGRldl9sb2NrKGRldik7CiYjNDM7CiYjNDM7CWlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKSB7CiYjNDM7CQluZXRkZXZfdW5sb2NrKGRldik7CiYjNDM7CQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldCA9IGRldl9uZXQoZGV2KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiYjNDM7CiYjNDM7CURFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3QpKTsKJiM0MzsJREVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQpKTsKJiM0MzsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQsICZhbXA7bmV0LSZndDtkZXZfdW5yZWdfaGVhZCk7CiYjNDM7CXJ0bmxfbmV0X3F1ZXVlX3dvcmsobmV0KTsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsKJiM0MzsJbmV0ZGV2X3VubG9jayhkZXYpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldCk7CiYjNDM7CiYjNDM7dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAqdG1wOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCBoZWFkLCB1bnJlZ19saXN0KSB7CiYjNDM7CQkvKiBPbmNlIGFsbCBjcm9zcy1uZXRucyB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIGlzCiYjNDM7CQkgKiBjb252ZXJ0ZWQgdG8gX25ldCgpIChvciBmb3IgZGVidWdnaW5nKSwgcmVtb3ZlIHRoaXMgY2hlY2suCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCURFQlVHX05FVF9XQVJOX09OQ0UoIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCksCiYjNDM7CQkJCSAgICAmIzM0OyVzIHdhcyB1bnJlZ2lzdGVyZWQgZnJvbSBhIGRpZmZlcmVudCBuZXRucy5cbiYjMzQ7LAomIzQzOwkJCQkgICAgZGV2LSZndDtuYW1lKTsKJiM0MzsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3QpOwomIzQzOwkJbGlzdF9tb3ZlX3RhaWwoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0LCAmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2hlYWQpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21vdmVfbmV0KHN0cnVjdCBuZXQgKm5ldF9vbGQsCiYjNDM7CQkJCQkgIHN0cnVjdCBuZXQgKm5ldCwKJiM0MzsJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CWlmIChuZXRfb2xkICZndDsgbmV0KSB7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsJCXNwaW5fbG9ja19uZXN0ZWQoJmFtcDtuZXRfb2xkLSZndDtkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bmV0X29sZC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX25lc3RlZCgmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0KSkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0KTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtkZXYtJmd0O3VucmVnX2xpc3RfbmV0LCAmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2hlYWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bmV0X29sZC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzOwlzcGluX3VubG9jaygmYW1wO25ldC0mZ3Q7ZGV2X3VucmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7CiYjNDM7CUxJU1RfSEVBRCh1bnJlZ19oZWFkX25ldCk7CiYjNDM7CUxJU1RfSEVBRCh1bnJlZ19oZWFkKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiYjNDM7CWxpc3Rfc3BsaWNlX2luaXQoJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19oZWFkLCAmYW1wO3VucmVnX2hlYWRfbmV0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtuZXQtJmd0O2Rldl91bnJlZ19sb2NrKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmYW1wO3VucmVnX2hlYWRfbmV0LCB1bnJlZ19saXN0X25ldCkgewomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdF9uZXQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO2Rldi0mZ3Q7dW5yZWdfbGlzdCwgJmFtcDt1bnJlZ19oZWFkKTsKJiM0MzsJfQomIzQzOwomIzQzOwl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZhbXA7dW5yZWdfaGVhZCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKgl1bnJlZ2lzdGVyX25ldGRldiAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsCiAgKglAZGV2OiBkZXZpY2UKQEAgLTEyNjU4LDYgJiM0MzsxMjc3MCwxMCBAQCBpbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LAogCW5ldGRldl91bmxvY2soZGV2KTsKIAlkZXYtJmd0O2lmaW5kZXggPSBuZXdfaWZpbmRleDsKIAomIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbW92ZV9uZXQobmV0X29sZCwgbmV0LCBkZXYpOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChuZXdfbmFtZVswXSkgewogCQkvKiBSZW5hbWUgdGhlIG5ldGRldiB0byBwcmVwYXJlZCBuYW1lICovCiAJCXdyaXRlX3NlcWxvY2tfYmgoJmFtcDtuZXRkZXZfcmVuYW1lX2xvY2spOwpAQCAtMTMwMzQsNyAmIzQzOzEzMTUwLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJICogUHVzaCBhbGwgbWlncmF0YWJsZSBuZXR3b3JrIGRldmljZXMgYmFjayB0byB0aGUKIAkgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlCiAJICovCi0JQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAlmb3JfZWFjaF9uZXRkZXZfc2FmZShuZXQsIGRldiwgYXV4KSB7CiAJCWludCBlcnI7CiAJCWNoYXIgZmJfbmFtZVtJRk5BTVNJWl07CkBAIC0xMzA3NywyMSAmIzQzOzEzMTkzLDM2IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdCkKIAlMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJX19ydG5sX25ldF9sb2NrKCZhbXA7aW5pdF9uZXQpOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7CiYjNDM7CQlfX3J0bmxfbmV0X2xvY2sobmV0KTsKIAkJZGVmYXVsdF9kZXZpY2VfZXhpdF9uZXQobmV0KTsKJiM0MzsJCV9fcnRubF9uZXRfdW5sb2NrKG5ldCk7CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAomIzQzOwlfX3J0bmxfbmV0X3VubG9jaygmYW1wO2luaXRfbmV0KTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldCwgbmV0X2xpc3QsIGV4aXRfbGlzdCkgewomIzQzOwkJX19ydG5sX25ldF9sb2NrKG5ldCk7CiYjNDM7CiAJCWZvcl9lYWNoX25ldGRldl9yZXZlcnNlKG5ldCwgZGV2KSB7CiAJCQlpZiAoZGV2LSZndDtydG5sX2xpbmtfb3BzICZhbXA7JmFtcDsgZGV2LSZndDtydG5sX2xpbmtfb3BzLSZndDtkZWxsaW5rKQogCQkJCWRldi0mZ3Q7cnRubF9saW5rX29wcy0mZ3Q7ZGVsbGluayhkZXYsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiAJCQllbHNlCiAJCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCAmYW1wO2Rldl9raWxsX2xpc3QpOwogCQl9CiYjNDM7CiYjNDM7CQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQlfX3J0bmxfbmV0X3VubG9jayhuZXQpOwogCX0KIAl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZhbXA7ZGV2X2tpbGxfbGlzdCk7CiAJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgZGVmYXVsdF9kZXZpY2Vfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IGQ5ZGFmZTI0ZjU3ZTNmLi5hOTFkMmI1OGFhZGRmOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwpAQCAtMTgxLDYgJiM0MzsxODEsNyBAQCBzdGF0aWMgdm9pZCBvcHNfZXhpdF9ydG5sX2xpc3QoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqb3BzX2xpc3QsCiAJCQkJb3BzLSZndDtleGl0X3J0bmwobmV0LCAmYW1wO2Rldl9raWxsX2xpc3QpOwogCQl9CiAKJiM0MzsJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0KG5ldCwgJmFtcDtkZXZfa2lsbF9saXN0KTsKIAkJX19ydG5sX25ldF91bmxvY2sobmV0KTsKIAl9CiAKQEAgLTQyMiw2ICYjNDM7NDIzLDkgQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX24KICNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkwKIAltdXRleF9pbml0KCZhbXA7bmV0LSZndDtydG5sX211dGV4KTsKIAlsb2NrX3NldF9jbXBfZm4oJmFtcDtuZXQtJmd0O3J0bmxfbXV0ZXgsIHJ0bmxfbmV0X2xvY2tfY21wX2ZuLCBOVUxMKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV0LSZndDtydG5sX3dvcmssIHJ0bmxfbmV0X3dvcmtfZnVuYyk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfaGVhZCk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfbG9jayk7CiAjZW5kaWYKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtwdHlwZV9hbGwpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAxMmFhM2FhMTY4OGIxMy4uYjEyOWY3OTNkODUxNjQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xOTcsNiAmIzQzOzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KQogewogCUFTU0VSVF9SVE5MKCk7CiAKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQobmV0KTsKIAltdXRleF91bmxvY2soJmFtcDtuZXQtJmd0O3J0bmxfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChfX3J0bmxfbmV0X3VubG9jayk7CkBAIC0yNzMsNiAmIzQzOzI3NCwyOSBAQCBib29sIGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZChzdHJ1Y3QgbmV0ICpuZXQpCiAJcmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgJmFtcDsmYW1wOyBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZXQtJmd0O3J0bmxfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnRubF9uZXRfd3E7CiYjNDM7CiYjNDM7dm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXF1ZXVlX3dvcmsocnRubF9uZXRfd3EsICZhbXA7bmV0LSZndDtydG5sX3dvcmspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKQomIzQzO3sKJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJ0bmxfbmV0X3dxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7CiYjNDM7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7bmV0LSZndDtkZXZfdW5yZWdfaGVhZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJ0bmxfbmV0X2xvY2sobmV0KTsKJiM0MzsJcnRubF9uZXRfdW5sb2NrKG5ldCk7CiYjNDM7fQogI2Vsc2UKIHN0YXRpYyBpbnQgcnRubF9uZXRfY21wX2xvY2tzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9hLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYikKIHsKQEAgLTI4MiwxMCAmIzQzOzMwNiwxMSBAQCBzdGF0aWMgaW50IHJ0bmxfbmV0X2NtcF9sb2Nrcyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYSwgY29uc3Qgc3RydWN0IG5ldCAqbmV0X2IpCiAjZW5kaWYKIAogc3RydWN0IHJ0bmxfbmV0cyB7Ci0JLyogLSZndDtuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDMgbmV0bnMgYXQgbW9zdDsKLQkgKiAyIGZvciB0aGUgbmV3IGRldmljZSwgMSBmb3IgaXRzIHBlZXIuCiYjNDM7CS8qIC0mZ3Q7bmV3bGluaygpIG5lZWRzIHRvIGZyZWV6ZSA0IG5ldG5zIGF0IG1vc3Q7CiYjNDM7CSAqIDIgZm9yIHRoZSBuZXcgZGV2aWNlLCAxIGZvciBpdHMgcGVlciwgMSBmb3IKJiM0MzsJICogYW4gZXhpc3RpbmcgZGV2aWNlIChkb19zZXRsaW5rKCkgcGF0aCkuCiAJICovCi0Jc3RydWN0IG5ldCAqbmV0WzNdOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRbNF07CiAJdW5zaWduZWQgY2hhciBsZW47CiB9OwogCkBAIC02MzYsMTYgJiM0Mzs2NjEsMTUgQEAgaW50IHJ0bmxfbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRubF9saW5rX3JlZ2lzdGVyKTsKIAotc3RhdGljIHZvaWQgX19ydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQomIzQzO3N0YXRpYyB2b2lkIF9fcnRubF9raWxsX2xpbmtzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JTElTVF9IRUFEKGxpc3Rfa2lsbCk7CiAKIAlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHsKIAkJaWYgKGRldi0mZ3Q7cnRubF9saW5rX29wcyA9PSBvcHMpCi0JCQlvcHMtJmd0O2RlbGxpbmsoZGV2LCAmYW1wO2xpc3Rfa2lsbCk7CiYjNDM7CQkJb3BzLSZndDtkZWxsaW5rKGRldiwgZGV2X2tpbGxfbGlzdCk7CiAJfQotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtsaXN0X2tpbGwpOwogfQogCiAvKiBSZXR1cm4gd2l0aCB0aGUgcnRubF9sb2NrIGhlbGQgd2hlbiB0aGVyZSBhcmUgbm8gbmV0d29yawpAQCAtNjc2LDYgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgdm9pZCBydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwodm9pZCkKICAqLwogdm9pZCBydG5sX2xpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQogewomIzQzOwlMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7CiAJc3RydWN0IG5ldCAqbmV0OwogCiAJbXV0ZXhfbG9jaygmYW1wO2xpbmtfb3BzX211dGV4KTsKQEAgLTY4OSw4ICYjNDM7NzE0LDE0IEBAIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcykKIAlkb3duX3dyaXRlKCZhbXA7cGVybmV0X29wc19yd3NlbSk7CiAJcnRubF9sb2NrX3VucmVnaXN0ZXJpbmdfYWxsKCk7CiAKLQlmb3JfZWFjaF9uZXQobmV0KQotCQlfX3J0bmxfa2lsbF9saW5rcyhuZXQsIG9wcyk7CiYjNDM7CWZvcl9lYWNoX25ldChuZXQpIHsKJiM0MzsJCV9fcnRubF9uZXRfbG9jayhuZXQpOwomIzQzOwkJX19ydG5sX2tpbGxfbGlua3MobmV0LCBvcHMsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQlfX3J0bmxfbmV0X3VubG9jayhuZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtkZXZfa2lsbF9saXN0KTsKIAogCXJ0bmxfdW5sb2NrKCk7CiAJdXBfd3JpdGUoJmFtcDtwZXJuZXRfb3BzX3J3c2VtKTsKQEAgLTQxNTUsNiAmIzQzOzQxODYsOCBAQCBzdGF0aWMgaW50IHJ0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJfQogCX0KIAomIzQzOwlydG5sX25ldHNfYWRkKCZhbXA7cnRubF9uZXRzLCBnZXRfbmV0KHNvY2tfbmV0KHNrYi0mZ3Q7c2spKSk7CiYjNDM7CiAJcnRubF9uZXRzX2xvY2soJmFtcDtydG5sX25ldHMpOwogCXJldCA9IF9fcnRubF9uZXdsaW5rKHNrYiwgbmxoLCBvcHMsIHRndF9uZXQsIGxpbmtfbmV0LCBwZWVyX25ldCwgdGJzLCBkYXRhLCBleHRhY2spOwogCXJ0bmxfbmV0c191bmxvY2soJmFtcDtydG5sX25ldHMpOwpAQCAtNzIyMSw0ICYjNDM7NzI1NCwxMCBAQCB2b2lkIF9faW5pdCBydG5ldGxpbmtfaW5pdCh2b2lkKQogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYW1wO3J0bmV0bGlua19kZXZfbm90aWZpZXIpOwogCiAJcnRubF9yZWdpc3Rlcl9tYW55KHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVycyk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTAomIzQzOwlydG5sX25ldF93cSA9IGNyZWF0ZV93b3JrcXVldWUoJiMzNDtydG5sX25ldCYjMzQ7KTsKJiM0MzsJaWYgKCFydG5sX25ldF93cSkKJiM0MzsJCXBhbmljKCYjMzQ7Q291bGQgbm90IGNyZWF0ZSBydG5sX25ldCB3b3JrcSYjMzQ7KTsKJiM0MzsjZW5kaWYKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JraW5nIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgYXBwbGllZCwgYW5kIG15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdGhhdCBuZWVkIGZ1enppbmcuIEkmIzM5O20gc2VlaW5nIGEgbG90IG9mIGNodXJuIGluIGNvcmUgbmV0d29ya2luZywgc28gdGhpcyBsb29rcyBwcm9taXNpbmcgZm9yIGZpbmRpbmcgcG90ZW50aWFsIGJ1Z3MuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLCBwcmltYXJpbHkgYXJvdW5kIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBhbmQgUlROTCAoUm91dGluZyBhbmQgVHJhZmZpYyBDb250cm9sIE5ldGxpbmspIGxvY2tpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgcGVyLW5ldG5zIFJUTkwgbG9ja2luZyB1c2luZyBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCwgd2hpY2ggaXMgYSBwcmV0dHkgYmlnIGRlYWwsIGFuZCB0aGUgYG5ldGRldmljZWAgY29kZSBpdHNlbGYgaXMgYmVpbmcgaGVhdmlseSBtb2RpZmllZC4gVGhpcyBpbmRpY2F0ZXMgdGhlIHByaW1hcnkgYXJlYSBvZiBpbnRlcmVzdCwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBsb2NraW5nIHNjaGVtZSwgYW5kIHRoZSB3YXkgZGV2aWNlcyBhcmUgdW5yZWdpc3RlcmVkLgoKU3BlY2lmaWMgZHJpdmVycyBhcmUgYWxzbyBiZWluZyBtb2RpZmllZCB0byBwbGF5IG5pY2VseSB3aXRoIHRoZXNlIGNoYW5nZXMuIEkgc2VlIGBiYXJldWRwLmNgIG5vdyBpbmNsdWRlcyBhIG11dGV4IGBsb2NrYCwgYW5kIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGxvY2sgYXJlIGBiYXJldWRwX2ZpbmRfZGV2YCwgYGJhcmV1ZHBfY29uZmlndXJlYCwgYGJhcmV1ZHBfZGVsbGlua2AsIGBiYXJldWRwX2luaXRfbmV0YCwgYGJhcmV1ZHBfZXhpdF9ydG5sX25ldGAsIHBsdXMgYF9fYmFyZXVkcF9kZWxsaW5rYCBpcyBhZGRlZC4gYGlwdmxhbmAsIGBpcHZ0YXBgLCBhbmQgYHZldGhgIGFsbCBzZWVtIHRvIGhhdmUgc2ltaWxhciB1cGRhdGVzLCB3aXRoIGxvY2tpbmcgb3IgbmV3IGRldmljZSB1bnJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGFkZGVkIHRvIHVzZSB0aGUgbmV3IGxvY2tpbmcgc2NoZW1lIGFuZCBgbmV0ZGV2aWNlYCBpbmZyYXN0cnVjdHVyZS4KCkZ1bmN0aW9uYWxseSwgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IGEgJiMzNDt5ZXMmIzM0Oy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBhbmQgYW55IGNoYW5nZSB0byBsb2NraW5nIG9yIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBjYW4gZWFzaWx5IGludHJvZHVjZSBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4gQW5kIHllcywgYWxsIHRoZXNlIG5ldyBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlLCBzaW5jZSB0aGV5JiMzOTtyZSBiYXNpYyBuZXR3b3JrIGRldmljZXMgYW5kIHVucmVnaXN0cmF0aW9uIGxvZ2ljLCBzbyB0aGV5JiMzOTtyZSBhbGwgcHJldHR5IHN0YW5kYXJkLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2N1c2VkLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLCBpdCYjMzk7cyB0aGUgbHluY2hwaW4gZm9yIHRoZSB3aG9sZSB0aGluZy4gVGhlbiwgdGhlIGluZGl2aWR1YWwgZHJpdmVyIGNvbmZpZ3Mgd2lsbCBuZWVkIHRvIGJlIGVuYWJsZWQ6IGBDT05GSUdfQkFSRVVEUGAsIGBDT05GSUdfSVBWTEFOYCwgYENPTkZJR19JUFZUQVBgLCBhbmQgYENPTkZJR19WRVRIYC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCBpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBjb25maXJtIHRoYXQsIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQgb3B0aW9uIGlzIGRlc2lnbmVkIGZvciwgaWYgcG9zc2libGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoYXQgb25lLgoKU28gdGhlIHBsYW46IHZlcmlmeSBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCwgaWRlbnRpZnkga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBhbmQgdGhlIENPTkZJRyBvcHRpb25zIHJlcXVpcmVkIHRvIHRlc3QgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFQlVHX05FVF9TTUFMTF9SVE5MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE0OT1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMjQ1LVx0c3RydWN0IGxpc3RfaGVhZFx0dW5yZWdfbGlzdDtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjI0NjojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIyNDctXHRzdHJ1Y3QgbGlzdF9oZWFkXHR1bnJlZ19saXN0X25ldDtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0NzU9c3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDc5LVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDgwOiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzQ4MS12b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLTk5LVxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaDoxMDA6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC0xMDEtdm9pZCBfX3J0bmxfbmV0X2xvY2soc3RydWN0IG5ldCAqbmV0KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE5Ni0jZW5kaWZcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoxOTc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE5OC1cdC8qIE1vdmUgdG8gYSBiZXR0ZXIgcGxhY2Ugd2hlbiB0aGUgY29uZmlnIGd1YXJkIGlzIHJlbW92ZWQuICovXG4tLVxubmV0L0tjb25maWcuZGVidWc9MjE9Y29uZmlnIERFQlVHX05FVFxuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTI3LVxubmV0L0tjb25maWcuZGVidWc6Mjg6Y29uZmlnIERFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvS2NvbmZpZy5kZWJ1Zy0yOS1cdGJvb2wgXCYjMzQ7QWRkIGV4dHJhIHBlci1uZXRucyBtdXRleCBpbnNpZGUgUlROTFwmIzM0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyMDMwPXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjA5NC1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0KTtcbm5ldC9jb3JlL2Rldi5jOjEyMDk1OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbm5ldC9jb3JlL2Rldi5jLTEyMDk2LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjMxMT12b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIzMTQtXG5uZXQvY29yZS9kZXYuYzoxMjMxNTojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9kZXYuYy0xMjMxNi1cdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTIzNzY9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNDk0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpIHtcbm5ldC9jb3JlL2Rldi5jOjEyNDk1OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbm5ldC9jb3JlL2Rldi5jLTEyNDk2LVx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI1MjU9RVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTI2LVxubmV0L2NvcmUvZGV2LmM6MTI1Mjc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxubmV0L2NvcmUvZGV2LmMtMTI1Mjgtdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNjM2PWludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI3NzItXG5uZXQvY29yZS9kZXYuYzoxMjc3MzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9kZXYuYy0xMjc3NC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21vdmVfbmV0KG5ldF9vbGQsIG5ldCwgZGV2KTtcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NDAzPXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDIyLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjQyMzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDI0LVx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTg0PUVYUE9SVF9TWU1CT0wobG9ja2RlcF9ydG5sX2lzX2hlbGQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE4Ni1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE4NzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xODgtdm9pZCBfX3J0bmxfbmV0X2xvY2soc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyNDk9dm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjU3LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzI1ODojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjU5LVx0cnRubF9uZXRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKFwmIzM0O3J0bmxfbmV0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZGV2aWNlIFVucmVnaXN0cmF0aW9uIGFuZCBQb3RlbnRpYWwgSW1wYWN0IG9mIERFQlVHX05FVF9TTUFMTF9SVE5MKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgREVCVUdfTkVUX1NNQUxMX1JUTkxgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgYXJlYXM6IGBiYXJldWRwYCwgYGlwdmxhbmAsIGBpcHZ0YXBgLCBgdmV0aGAsIGFuZCBjb3JlIG5ldGRldmljZSB1bnJlZ2lzdHJhdGlvbi4gRnJvbSB0aGUgaW5pdGlhbCBnbGFuY2UsIGl0ICpzZWVtcyogZnVuY3Rpb25hbCwgYnV0IHdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXRhaWxzLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2Ugc3ltYm9scyBhbmQgYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Q6CgoqICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAKKiAgIGBydG5sX25ldF93b3JrX2Z1bmNgCiogICBgYmFyZXVkcF9kZWxsaW5rYAoqICAgYGlwdmxhbl9saW5rX2RlbGV0ZWAKKiAgIGBpcHZ0YXBfZGVsbGlua2AKKiAgIGB2ZXRoX2RlbGxpbmtgCiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGAKCkkmIzM5O20gbm93IGNoZWNraW5nIHRoZSB2aXNpYmlsaXR5IG9mIGNlcnRhaW4gZnVuY3Rpb25zLiBXZSBhbHJlYWR5IGtub3cgdGhhdCBgX19iYXJldWRwX2RlbGxpbmtgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gcmVtZW1iZXIuIGBfX2lwdmxhbl9saW5rX2RlbGV0ZWAgaXMgZXhwb3J0ZWQsIGFuZCB0aGF0IGlzIGltcG9ydGFudCB0b28uIGBfX2lwdnRhcF9kZWxsaW5rYCBhbmQgYHZldGhfZGVsbGlua2AgYXJlIHN0YXRpYy4gYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAgaXMgZXhwb3J0ZWQsIHdoaWxlIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAgYW5kIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAgYXJlIGdsb2JhbC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBlc3NlbnRpYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgdGhlc2U6CgoqICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAKKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAKKiAgIGBydG5sX25ldF93b3JrX2Z1bmNgCiogICBgYmFyZXVkcF9kZWxsaW5rYAoqICAgYGlwdmxhbl9saW5rX2RlbGV0ZWAKKiAgIGBpcHZ0YXBfZGVsbGlua2AKKiAgIGB2ZXRoX2RlbGxpbmtgCiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGAKCldlIGFsc28gbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczoKCiogICBgREVCVUdfTkVUX1NNQUxMX1JUTkxgCiogICBgQkFSRVVEUGAKKiAgIGBJUFZMQU5gCiogICBgSVBWVEFQYAoqICAgYFZFVEhgCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY29ycmVsYXRlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpdGggdGhlIHN5bWJvbHMuIEkgbmVlZCB0byBkaXZlIGluIGFuZCBjb25maXJtIGhvdyB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQgYW5kIGhvdyB0aGUgb3B0aW9uIGFmZmVjdHMgdGhlc2UgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgYW5kIGdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBrZXkgc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkFSRVVEUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTI0NT1jb25maWcgR0VORVZFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTktXG5kcml2ZXJzL25ldC9LY29uZmlnOjI2MDpjb25maWcgQkFSRVVEUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjEtXHR0cmlzdGF0ZSBcJiMzNDtCYXJlIFVEUCBFbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipWZXJpZnlpbmcgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2dpZXMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHNvbWUgY29yZSBuZXR3b3JrIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMuIEkgbmVlZCB0byByZWZyZXNoIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIGFuZCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBnbyB0aHJvdWdoIElQVkxBTiwgSVBWVEFQLCBhbmQgVkVUSC4gVGhlcmUgYXJlIHNvIG1hbnkgc3VidGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbSB0aGF0IGEgcXVpY2sgcmV2aWV3IGlzIGFsd2F5cyBnb29kLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgZXhhY3QgYmVoYXZpb3IgYW5kIHVzZS1jYXNlcyBmb3IgZWFjaC4gSG93IHRoZXkgaGFuZGxlIE1BQyBhZGRyZXNzZXMsIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBpbnRlcmZhY2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciByb3V0aW5nIGFuZCBicmlkZ2luZyBhcmUgYWxsIHRvcCBvZiBtaW5kLiBUaW1lIHRvIHJ1biBzb21lIHRlc3RzLCBtYXliZSBzcGluIHVwIGEgZmV3IGNvbnRhaW5lcnMgdG8gc2ltdWxhdGUgdHJhZmZpYyBhbmQgcHJvYmUgYXQgYSBncmFudWxhciBsZXZlbC4gV2UmIzM5O2xsIHNlZSBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJhY3QuIEl0JiMzOTtzIHRpbWUgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgYW5kIGVuc3VyZSBteSBrbm93bGVkZ2UgaXMgdXAtdG8tZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWTEFOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0xOTItXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5Mzpjb25maWcgSVBWTEFOX0wzU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0xOTQtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMTk4LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTk6Y29uZmlnIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUC1WTEFOIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFZUQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xOTk9Y29uZmlnIElQVkxBTlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjE1LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTY6Y29uZmlnIElQVlRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMTctXHR0cmlzdGF0ZSBcJiMzNDtJUC1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkVUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIFVucmVnaXN0cmF0aW9uIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgYEJBUkVVRFBgLCBgSVBWTEFOYCwgYElQVlRBUGAsIGFuZCBgVkVUSGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBkZXZpY2VzIGFyZSB1bnJlZ2lzdGVyZWQgaW4gdmFyaW91cyBzY2VuYXJpb3MuIE15IG1pbmQga2VlcHMganVtcGluZyB0byB0aGVzZSBrZXkgc3ltYm9sczogYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAsIGBydG5sX25ldF93b3JrX2Z1bmNgLCBhbG9uZyB3aXRoIHRoZSBkZXZpY2Utc3BlY2lmaWMgdW5saW5raW5nIGZ1bmN0aW9uczogYGJhcmV1ZHBfZGVsbGlua2AsIGBpcHZsYW5fbGlua19kZWxldGVgLCBgaXB2dGFwX2RlbGxpbmtgLCBgdmV0aF9kZWxsaW5rYCwgYW5kIGBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgZWFjaCBvZiB0aGVtIGNvbWVzIGludG8gcGxheS4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGlwdmxhbl9saW5rX2RlbGV0ZWAgbWFya2VkIGFzIHN0YXRpYyBhdCBzb21lIHBvaW50PyBBaCB5ZXMsIG5vdyBgX19pcHZsYW5fbGlua19kZWxldGVgIGlzIGV4cG9ydGVkLCBzbyBJIHRoaW5rIEkgbmVlZCB0byBhY2NvdW50IGZvciBib3RoIGhlcmUuIFNob3VsZCBJIGp1c3QgaW5jbHVkZSBib3RoIG9yIHJlbHkgb24gdGhlIGV4cG9ydGVkIHZlcnNpb24/IEFoLCBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGluY2x1ZGUgYm90aCwgdG8gYmUgdGhvcm91Z2guIE5vdywgbGV0JiMzOTtzIGluY2x1ZGUgYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBhbmQgYGlwdmxhbl9saW5rX2RlbGV0ZWAuIEFjdHVhbGx5LCB3YWl0LCBgaXB2bGFuX2xpbmtfZGVsZXRlYCBpcyBpbmRlZWQgc3RhdGljIHdpdGhpbiBgaXB2bGFuX21haW4uY2AuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwdmxhbl9saW5rX2RlbGV0ZWAgaW4gYGlwdmxhbl9tYWluLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdmxhbl9saW5rX2RlbGV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmg9MTcxPWludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaC0xNzItXHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oOjE3Mzp2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaC0xNzQtXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYz03MDc9RVhQT1JUX1NZTUJPTF9HUEwoaXB2bGFuX2xpbmtfbmV3KTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTcwOC1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjcwOTp2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTcxMC1cdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzI3LX1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjcyODpFWFBPUlRfU1lNQk9MKF9faXB2bGFuX2xpbmtfZGVsZXRlKTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTcyOS1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjczMDpzdGF0aWMgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTczMS17XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzM1LVx0aWYgKCFpcHZsYW4tXHUwMDNlZHlpbmcpXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3MzY6XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTczNy1cdG11dGV4X3VubG9jayhcdTAwMjZpcHZsYW4tXHUwMDNlcG9ydC1cdTAwM2Vwbm9kZXNfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM9NzY3PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcHZsYW5fbGlua19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzcyLVx0Lm5ld2xpbmtcdD0gaXB2bGFuX2xpbmtfbmV3LFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM6NzczOlx0LmRlbGxpbmtcdD0gaXB2bGFuX2xpbmtfZGVsZXRlLFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzc0LVx0LmdldF9saW5rX25ldCAgID0gaXB2bGFuX2dldF9saW5rX25ldCxcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYz03ODk9c3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTg0NS0jZW5kaWZcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjg0NjpcdFx0XHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVx1MDAzZWRldiwgXHUwMDI2bHN0X2tpbGwpO1xuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtODQ3LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jPTExMj1zdGF0aWMgdm9pZCBfX2lwdnRhcF9kZWxsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMtMTE4LVx0dGFwX2RlbF9xdWV1ZXMoXHUwMDI2dmxhbnRhcC1cdTAwM2V0YXApO1xuZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jOjExOTpcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgZGV2LCBoZWFkKTtcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYy0xMjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg4MQoJCQkJCQkJb3V0cHV0OiAyOTUKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBSZWNvbW1lbmRhdGlvbjogV29ydGhGdXp6aW5nPXRydWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBuZXR3b3JrIGRldmljZXMgYXJlIHVucmVnaXN0ZXJlZCwgcGFydGljdWxhcmx5IGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuIFRoZSBpbmNsdXNpb24gb2YgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAsIGBydG5sX25ldF93b3JrX2Z1bmNgLCBgYmFyZXVkcF9kZWxsaW5rYCwgYF9fYmFyZXVkcF9kZWxsaW5rYCwgYGlwdmxhbl9saW5rX2RlbGV0ZWAsIGBfX2lwdmxhbl9saW5rX2RlbGV0ZWAsIGBpcHZ0YXBfZGVsbGlua2AsIGBfX2lwdnRhcF9kZWxsaW5rYCwgYHZldGhfZGVsbGlua2AsIGFuZCBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGAgc3VnZ2VzdHMgYSBzdWJzdGFudGlhbCBzaGlmdCBpbiBkZXZpY2UgbWFuYWdlbWVudC4gQm90aCBgX19pcHZsYW5fbGlua19kZWxldGVgIGFuZCBgaXB2bGFuX2xpbmtfZGVsZXRlYCBhcmUgc29saWQgY2FuZGlkYXRlcyBmb3IgYXR0ZW50aW9uLgoKVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIChgREVCVUdfTkVUX1NNQUxMX1JUTkxgLCBgQkFSRVVEUGAsIGBJUFZMQU5gLCBgSVBWVEFQYCwgYFZFVEhgKSBjb25maXJtIHRoYXQgdGhpcyB0b3VjaGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgZGlyZWN0bHksIHdpdGggdGhlIGNoYW5nZXMgc3ByZWFkIGFjcm9zcyBgYmFyZXVkcC5jYCwgYGlwdmxhbi9pcHZsYW4uaGAsIGBpcHZsYW4vaXB2bGFuX21haW4uY2AsIGBpcHZsYW4vaXB2dGFwLmNgLCBgdmV0aC5jYCwgYG5ldGRldmljZS5oYCwgYHJ0bmV0bGluay5oYCwgYG5ldF9uYW1lc3BhY2UuaGAsIGBkZXYuY2AsIGBuZXRfbmFtZXNwYWNlLmNgLCBhbmQgYHJ0bmV0bGluay5jYC4gR29vZCwgYWxsIHRoZSByZWxldmFudCBmaWxlcyBzZWVtIHRvIGJlIGFjY291bnRlZCBmb3IgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb25zLgoKVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEgaXMgb3VyIGd1aWRlIGhlcmUuIFRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycy4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHVzaW5nIGBERUJVR19ORVRfU01BTExfUlROTGAgYW5kIHVwZGF0ZXMgdG8gaG93IHZhcmlvdXMgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgaGFuZGxlIHVucmVnaXN0cmF0aW9uLCBzeW5jaHJvbml6YXRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSBzY3JlYW1zIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZSBpbnRlZ3JhdGlvbiBvZiBSVE5MIGxvY2tpbmcgaW50byBleGlzdGluZyB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMsIGVzcGVjaWFsbHkgYWNyb3NzIG5hbWVzcGFjZXMsIGlzIHJpcGUgZm9yIHN1YnRsZSBlcnJvcnMuIFRoZXJlZm9yZSwgZnV6emluZyBpcyBlc3NlbnRpYWwuIEl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGlkZW50aWZ5aW5nIHRoZXNlIGNvbXBsZXggY29uY3VycmVuY3kgaXNzdWVzIGJlZm9yZSB0aGV5IGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTkVUX1NNQUxMX1JUTkwmIzM0OywKICAgICYjMzQ7QkFSRVVEUCYjMzQ7LAogICAgJiMzNDtJUFZMQU4mIzM0OywKICAgICYjMzQ7SVBWVEFQJiMzNDssCiAgICAmIzM0O1ZFVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7cnRubF9uZXRfd29ya19mdW5jJiMzNDssCiAgICAmIzM0O2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtfX2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtpcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7X19pcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7aXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19pcHZ0YXBfZGVsbGluayYjMzQ7LAogICAgJiMzNDt2ZXRoX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7ZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTkVUX1NNQUxMX1JUTkwmIzM0OywKICAgICYjMzQ7QkFSRVVEUCYjMzQ7LAogICAgJiMzNDtJUFZMQU4mIzM0OywKICAgICYjMzQ7SVBWVEFQJiMzNDssCiAgICAmIzM0O1ZFVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQmIzM0OywKICAgICYjMzQ7cnRubF9uZXRfd29ya19mdW5jJiMzNDssCiAgICAmIzM0O2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtfX2JhcmV1ZHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtpcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7X19pcHZsYW5fbGlua19kZWxldGUmIzM0OywKICAgICYjMzQ7aXB2dGFwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7X19pcHZ0YXBfZGVsbGluayYjMzQ7LAogICAgJiMzNDt2ZXRoX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7ZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAwOjI2OjQwLjQ3NzU3MTE1OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjkyMTY5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX05FVF9TTUFMTF9SVE5MXCIsXG4gICAgXCJCQVJFVURQXCIsXG4gICAgXCJJUFZMQU5cIixcbiAgICBcIklQVlRBUFwiLFxuICAgIFwiVkVUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldFwiLFxuICAgIFwidW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0XCIsXG4gICAgXCJydG5sX25ldF93b3JrX2Z1bmNcIixcbiAgICBcImJhcmV1ZHBfZGVsbGlua1wiLFxuICAgIFwiX19iYXJldWRwX2RlbGxpbmtcIixcbiAgICBcImlwdmxhbl9saW5rX2RlbGV0ZVwiLFxuICAgIFwiX19pcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcImlwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJfX2lwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJ2ZXRoX2RlbGxpbmtcIixcbiAgICBcImRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6MjY6NDAuNDc3NTc4NDM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjEyNzA5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OGQ0MGE5NjYyNzExY2JiNjY0ZTQwMGE5MzYwZTcwZDY4M2YyMGQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMDA6MjY6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jIGIvZHJpdmVycy9uZXQvYmFyZXVkcC5jXFxuaW5kZXggNWVmODQxYzg1NTI2OTcuLmMzYjVlZDUyZDg3Nzg5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xcbkBAIC0zNiw2ICszNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmFyZXVkcF9uZXRfaWQ7XFxuIFxcbiBzdHJ1Y3QgYmFyZXVkcF9uZXQge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBiYXJldWRwX2xpc3Q7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGxvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYmFyZXVkcF9jb25mIHtcXG5AQCAtNjM2LDEwICs2MzcsMTUgQEAgc3RhdGljIHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcF9maW5kX2RldihzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuLFxcbiB7XFxuIFxcdHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgKnQgPSBOVUxMO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbitcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShiYXJldWRwLCBcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCwgbmV4dCkge1xcbiBcXHRcXHRpZiAoY29uZi1cXHUwMDNlcG9ydCA9PSBiYXJldWRwLVxcdTAwM2Vwb3J0KVxcbiBcXHRcXHRcXHR0ID0gYmFyZXVkcDtcXG4gXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZibi1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHRyZXR1cm4gdDtcXG4gfVxcbiBcXG5AQCAtNjc1LDcgKzY4MSwxMCBAQCBzdGF0aWMgaW50IGJhcmV1ZHBfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJuLVxcdTAwM2Vsb2NrKTtcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQsIFxcdTAwMjZibi1cXHUwMDNlYmFyZXVkcF9saXN0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZibi1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNjkyLDEyICs3MDEsMjYgQEAgc3RhdGljIGludCBiYXJldWRwX2xpbmtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQpO1xcbitcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQobmV0LCBkZXYsIGhlYWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBiYXJldWRwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuO1xcbiBcXG4tXFx0bGlzdF9kZWwoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQpO1xcbi1cXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xcbitcXHRibiA9IG5ldF9nZW5lcmljKGJhcmV1ZHAtXFx1MDAzZW5ldCwgYmFyZXVkcF9uZXRfaWQpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmJhcmV1ZHAtXFx1MDAzZW5leHQpKVxcbitcXHRcXHRfX2JhcmV1ZHBfZGVsbGluayhkZXZfbmV0KGRldiksIGRldiwgaGVhZCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC03NzYsNiArNzk5LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IGJhcmV1ZHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCk7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNmJuLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC03ODUsMTMgKzgxMCwyNSBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHN0cnVjdCBiYXJldWRwX25ldCAqYm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcXG4gXFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCAqbmV4dDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJuLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCBcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCwgbmV4dClcXG4tXFx0XFx0YmFyZXVkcF9kZWxsaW5rKGJhcmV1ZHAtXFx1MDAzZWRldiwgZGV2X2tpbGxfbGlzdCk7XFxuK1xcdFxcdF9fYmFyZXVkcF9kZWxsaW5rKG5ldCwgYmFyZXVkcC1cXHUwMDNlZGV2LCBkZXZfa2lsbF9saXN0KTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Ym4tXFx1MDAzZWxvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHN0cnVjdCBiYXJldWRwX25ldCAqYm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcXG4rXFxuK1xcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2Ym4tXFx1MDAzZWJhcmV1ZHBfbGlzdCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJhcmV1ZHBfbmV0X29wcyA9IHtcXG4gXFx0LmluaXQgPSBiYXJldWRwX2luaXRfbmV0LFxcbiBcXHQuZXhpdF9ydG5sID0gYmFyZXVkcF9leGl0X3J0bmxfbmV0LFxcbitcXHQuZXhpdCA9IGJhcmV1ZHBfZXhpdF9uZXQsXFxuIFxcdC5pZCAgID0gXFx1MDAyNmJhcmV1ZHBfbmV0X2lkLFxcbiBcXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmFyZXVkcF9uZXQpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmggYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmhcXG5pbmRleCA4MGY4NGZjODcwMDhiMy4uOGQwNWFkNDgwNDM4ZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXFxuQEAgLTY5LDYgKzY5LDcgQEAgc3RydWN0IGlwdmxfZGV2IHtcXG4gXFx0REVDTEFSRV9CSVRNQVAobWFjX2ZpbHRlcnMsIElQVkxBTl9NQUNfRklMVEVSX1NJWkUpO1xcbiBcXHRuZXRkZXZfZmVhdHVyZXNfdFxcdHNmZWF0dXJlcztcXG4gXFx0dTMyXFx0XFx0XFx0bXNnX2VuYWJsZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdGR5aW5nO1xcbiB9O1xcbiBcXG4gc3RydWN0IGlwdmxfYWRkciB7XFxuQEAgLTkxLDEyICs5MiwxMyBAQCBzdHJ1Y3QgaXB2bF9wb3J0IHtcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWRcXHRobGhlYWRbSVBWTEFOX0hBU0hfU0laRV07XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRhZGRyc19sb2NrOyAvKiBndWFyZHMgaGFzaC10YWJsZSBhbmQgYWRkcnMgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGlwdmxhbnM7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdHBub2Rlc19sb2NrO1xcbiBcXHR1MTZcXHRcXHRcXHRtb2RlO1xcbiBcXHR1MTZcXHRcXHRcXHRmbGFncztcXG4gXFx0dTE2XFx0XFx0XFx0ZGV2X2lkX3N0YXJ0O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3cTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZFxcdGJhY2tsb2c7XFxuLVxcdGludFxcdFxcdFxcdGNvdW50O1xcbitcXHRyZWZjb3VudF90XFx0XFx0Y291bnQ7XFxuIFxcdHN0cnVjdCBpZGFcXHRcXHRpZGE7XFxuIFxcdG5ldGRldmljZV90cmFja2VyXFx0ZGV2X3RyYWNrZXI7XFxuIH07XFxuQEAgLTE2OCw3ICsxNzAsOCBAQCB2b2lkIGlwdmxhbl9jb3VudF9yeChjb25zdCBzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbixcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuLCBib29sIHN1Y2Nlc3MsIGJvb2wgbWNhc3QpO1xcbiBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcXG4rdm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7XFxuIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBpcHZsYW5fbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTtcXG4gI2lmZGVmIENPTkZJR19JUFZMQU5fTDNTXFxuQEAgLTIwNyw0ICsyMTAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0aWZfaXNfaXB2bGFuX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZXJ4X2hhbmRsZXIpID09IGlwdmxhbl9oYW5kbGVfZnJhbWU7XFxuIH1cXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXFxuK2V4dGVybiB2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbisjZW5kaWZcXG4rXFxuICNlbmRpZiAvKiBfX0lQVkxBTl9IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcXG5pbmRleCBlZDQ2NDM5YTlmNGViMS4uZWU0NmE1NWY3M2QxNGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uY1xcbkBAIC03LDYgKzcsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJpcHZsYW4uaFxcXCJcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXFxuK3ZvaWQgKCpfX2lwdnRhcF9kZWxsaW5rX3B0cikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbitFWFBPUlRfU1lNQk9MKF9faXB2dGFwX2RlbGxpbmtfcHRyKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG5AQCAtMTYsNiArMjIsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxcbiBcXG4gXFx0QVNTRVJUX1JUTkwoKTtcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZW1vZGUgIT0gbnZhbCkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2Vwbm9kZXNfbG9jayk7XFxuK1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XFxuIFxcdFxcdFxcdGZsYWdzID0gaXB2bGFuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzO1xcbiBcXHRcXHRcXHRpZiAobnZhbCA9PSBJUFZMQU5fTU9ERV9MMyB8fCBudmFsID09IElQVkxBTl9NT0RFX0wzUykge1xcbkBAIC00MCw2ICs0OCw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsXFxuIFxcdFxcdFxcdGlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRwb3J0LVxcdTAwM2Vtb2RlID0gbnZhbDtcXG4rXFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtNTYsNiArNjYsOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9zZXRfcG9ydF9tb2RlKHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQsIHUxNiBudmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuIFxcdH1cXG4gXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtNzYsNiArODgsNyBAQCBzdGF0aWMgaW50IGlwdmxhbl9wb3J0X2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnBvcnQtXFx1MDAzZWhsaGVhZFtpZHhdKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2VhZGRyc19sb2NrKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2ViYWNrbG9nKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZwb3J0LVxcdTAwM2V3cSwgaXB2bGFuX3Byb2Nlc3NfbXVsdGljYXN0KTtcXG4gXFx0aWRhX2luaXQoXFx1MDAyNnBvcnQtXFx1MDAzZWlkYSk7XFxuQEAgLTg2LDYgKzk5LDcgQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZwb3J0LVxcdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycjpcXG5AQCAtOTMsMTYgKzEwNywxOCBAQCBzdGF0aWMgaW50IGlwdmxhbl9wb3J0X2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3N0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IGlwdmxfcG9ydCAqcG9ydClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwoZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnQtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuLVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2cG9ydC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiBcXHRpZiAocG9ydC1cXHUwMDNlbW9kZSA9PSBJUFZMQU5fTU9ERV9MM1MpXFxuIFxcdFxcdGlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTtcXG4rXFxuIFxcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cG9ydC1cXHUwMDNld3EpO1xcbitcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnBvcnQtXFx1MDAzZWRldl90cmFja2VyKTtcXG4rXFxuIFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2cG9ydC1cXHUwMDNlYmFja2xvZykpICE9IE5VTEwpIHtcXG4gXFx0XFx0ZGV2X3B1dChza2ItXFx1MDAzZWRldik7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbkBAIC0xMTEsNiArMTI3LDI3IEBAIHN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0a2ZyZWUocG9ydCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X3B1dChzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnBvcnQtXFx1MDAzZWNvdW50KSlcXG4rXFx0XFx0aXB2bGFuX3BvcnRfZGVzdHJveShwb3J0KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBpcHZsX3BvcnQgKmlwdmxhbl9wb3J0X2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSBOVUxMO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkge1xcbitcXHRcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3JjdShkZXYpO1xcbitcXHRcXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlY291bnQpKVxcbitcXHRcXHRcXHRwb3J0ID0gTlVMTDtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBwb3J0O1xcbit9XFxuK1xcbiAjZGVmaW5lIElQVkxBTl9BTFdBWVNfT05fT0ZMT0FEUyBcXFxcXFxuIFxcdChORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgXFxcXFxcbiBcXHQgTkVUSUZfRl9HU09fUk9CVVNUIHwgTkVUSUZfRl9HU09fU09GVFdBUkUgfCBORVRJRl9GX0dTT19FTkNBUF9BTEwpXFxuQEAgLTE1MywzMCArMTkwLDQ1IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKCFpcHZsYW4tXFx1MDAzZXBjcHVfc3RhdHMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0bmV0ZGV2X2xvY2socGh5X2Rldik7XFxuK1xcbiBcXHRpZiAoIW5ldGlmX2lzX2lwdmxhbl9wb3J0KHBoeV9kZXYpKSB7XFxuIFxcdFxcdGVyciA9IGlwdmxhbl9wb3J0X2NyZWF0ZShwaHlfZGV2KTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcXG4gXFx0XFx0XFx0ZnJlZV9wZXJjcHUoaXB2bGFuLVxcdTAwM2VwY3B1X3N0YXRzKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbitcXHRcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XFxuK1xcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2cG9ydC1cXHUwMDNlY291bnQsIDEpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cG9ydC1cXHUwMDNlY291bnQpO1xcbiBcXHR9XFxuLVxcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcXG4tXFx0cG9ydC1cXHUwMDNlY291bnQgKz0gMTtcXG4rXFxuK1xcdG5ldGRldl91bmxvY2socGh5X2Rldik7XFxuK1xcbitcXHRpcHZsYW4tXFx1MDAzZXBvcnQgPSBwb3J0O1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGlwdmxhbl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpwaHlfZGV2ID0gaXB2bGFuLVxcdTAwM2VwaHlfZGV2O1xcbi1cXHRzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0O1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXY7XFxuIFxcbiBcXHRmcmVlX3BlcmNwdShpcHZsYW4tXFx1MDAzZXBjcHVfc3RhdHMpO1xcbiBcXG4tXFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xcbi1cXHRwb3J0LVxcdTAwM2Vjb3VudCAtPSAxO1xcbi1cXHRpZiAoIXBvcnQtXFx1MDAzZWNvdW50KVxcbi1cXHRcXHRpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQtXFx1MDAzZWRldik7XFxuK1xcdHBoeV9kZXYgPSBpcHZsYW4tXFx1MDAzZXBoeV9kZXY7XFxuK1xcdG5ldGRldl9ob2xkKHBoeV9kZXYsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuK1xcdG5ldGRldl9sb2NrKHBoeV9kZXYpO1xcbitcXG4rXFx0aXB2bGFuX3BvcnRfcHV0KGlwdmxhbi1cXHUwMDNlcG9ydCk7XFxuK1xcbitcXHRuZXRkZXZfdW5sb2NrKHBoeV9kZXYpO1xcbitcXHRuZXRkZXZfcHV0KHBoeV9kZXYsIFxcdTAwMjZkZXZfdHJhY2tlcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaXB2bGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtNTk0LDkgKzY0Niw3IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHQvKiBpcHZsYW5faW5pdCgpIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgcG9ydCwgaWYgcmVxdWlyZWQgKi9cXG4tXFx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xcbi1cXHRpcHZsYW4tXFx1MDAzZXBvcnQgPSBwb3J0O1xcbitcXHRwb3J0ID0gaXB2bGFuLVxcdTAwM2Vwb3J0O1xcbiBcXG4gXFx0LyogSWYgdGhlIHBvcnQtaWQgYmFzZSBpcyBhdCB0aGUgTUFYIHZhbHVlLCB0aGVuIHdyYXAgaXQgYXJvdW5kIGFuZFxcbiBcXHQgKiBiZWdpbiBmcm9tIDB4MSBhZ2Fpbi4gVGhpcyBtYXkgYmUgZHVlIHRvIGEgYnVzeSBzeXN0ZW0gd2hlcmUgbG90c1xcbkBAIC02MzksNyArNjg5LDEwIEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byB1bmxpbmtfbmV0ZGV2O1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiBcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2aXB2bGFuLVxcdTAwM2Vwbm9kZSwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4rXFxuIFxcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHBoeV9kZXYsIGRldik7XFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtNjUzLDcgKzcwNiw4IEBAIGludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19uZXcpO1xcbiBcXG4tdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4rdm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHN0cnVjdCBpcHZsX2FkZHIgKmFkZHIsICpuZXh0O1xcbkBAIC02NjgsMTAgKzcyMiwyMCBAQCB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiBcXG4gXFx0aWRhX2ZyZWUoXFx1MDAyNmlwdmxhbi1cXHUwMDNlcG9ydC1cXHUwMDNlaWRhLCBkZXYtXFx1MDAzZWRldl9pZCk7XFxuIFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2aXB2bGFuLVxcdTAwM2Vwbm9kZSk7XFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChuZXQsIGRldiwgaGVhZCk7XFxuIFxcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi1cXHUwMDNlcGh5X2RldiwgZGV2KTtcXG4gfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19kZWxldGUpO1xcbitFWFBPUlRfU1lNQk9MKF9faXB2bGFuX2xpbmtfZGVsZXRlKTtcXG4rXFxuK3N0YXRpYyB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmlwdmxhbi1cXHUwMDNlcG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbitcXHRpZiAoIWlwdmxhbi1cXHUwMDNlZHlpbmcpXFxuK1xcdFxcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpcHZsYW4tXFx1MDAzZXBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4rfVxcbiBcXG4gdm9pZCBpcHZsYW5fbGlua19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuQEAgLTcyOSwxNCArNzkzLDE5IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4gXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbztcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiBcXHRzdHJ1Y3QgaXB2bF9kZXYgKmlwdmxhbiwgKm5leHQ7XFxuK1xcdGludCBlcnIsIHJldCA9IE5PVElGWV9ET05FO1xcbiBcXHRzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0O1xcbiBcXHRMSVNUX0hFQUQobHN0X2tpbGwpO1xcbi1cXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFuZXRpZl9pc19pcHZsYW5fcG9ydChkZXYpKVxcbi1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK1xcdGlmIChldmVudCA9PSBORVRERVZfUFJFQ0hBTkdFVVBQRVIgfHxcXG4rXFx0ICAgIGV2ZW50ID09IE5FVERFVl9DSEFOR0VVUFBFUilcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xcbitcXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0KGRldik7XFxuK1xcdGlmICghcG9ydClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4gXFxuIFxcdHN3aXRjaCAoZXZlbnQpIHtcXG4gXFx0Y2FzZSBORVRERVZfVVA6XFxuQEAgLTc2MCwxNiArODI5LDI2IEBAIHN0YXRpYyBpbnQgaXB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4gXFx0XFx0XFx0aXB2bGFuX21pZ3JhdGVfbDNzX2hvb2sob2xkbmV0LCBuZXduZXQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxcbitcXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOiB7XFxuK1xcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4rXFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCBcXHUwMDI2cG9ydC1cXHUwMDNlaXB2bGFucywgcG5vZGUpXFxuLVxcdFxcdFxcdGlwdmxhbi1cXHUwMDNlZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzLVxcdTAwM2VkZWxsaW5rKGlwdmxhbi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxzdF9raWxsKTtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlwdmxhbiwgbmV4dCwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XFxuK1xcdFxcdFxcdGlwdmxhbi1cXHUwMDNlZHlpbmcgPSB0cnVlO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUClcXG4rXFx0XFx0XFx0aWYgKGlwdmxhbi1cXHUwMDNlZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzICE9IFxcdTAwMjZpcHZsYW5fbGlua19vcHMpXFxuK1xcdFxcdFxcdFxcdF9faXB2dGFwX2RlbGxpbmtfcHRyKG5ldCwgaXB2bGFuLVxcdTAwM2VkZXYsIFxcdTAwMjZsc3Rfa2lsbCk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rI2VuZGlmXFxuK1xcdFxcdFxcdFxcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVxcdTAwM2VkZXYsIFxcdTAwMjZsc3Rfa2lsbCk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmxzdF9raWxsKTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcbitcXHR9XFxuIFxcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XFxuIFxcdFxcdFxcdG5ldGlmX2luaGVyaXRfdHNvX21heChpcHZsYW4tXFx1MDAzZWRldiwgZGV2KTtcXG5AQCAtNzg4LDggKzg2NywxMCBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuIFxcdFxcdFxcdGVyciA9IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShpcHZsYW4tXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwcmVjaGFkZHJfaW5mby1cXHUwMDNlZGV2X2FkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcXG4rXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcbkBAIC04MDIsNyArODgzLDggQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbiBcXG4gXFx0Y2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOlxcbiBcXHRcXHQvKiBGb3JiaWQgdW5kZXJseWluZyBkZXZpY2UgdG8gY2hhbmdlIGl0cyB0eXBlLiAqL1xcbi1cXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4rXFx0XFx0cmV0ID0gTk9USUZZX0JBRDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6XFxuIFxcdGNhc2UgTkVUREVWX0JPTkRJTkdfRkFJTE9WRVI6XFxuQEAgLTgxMCw3ICs4OTIsMTIgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXFx1MDAyNnBvcnQtXFx1MDAzZWlwdmxhbnMsIHBub2RlKVxcbiBcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoZXZlbnQsIGlwdmxhbi1cXHUwMDNlZGV2KTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnQtXFx1MDAzZXBub2Rlc19sb2NrKTtcXG4rXFxuK1xcdGlwdmxhbl9wb3J0X3B1dChwb3J0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qIHRoZSBjYWxsZXIgbXVzdCBoZWxkIHRoZSBhZGRycyBsb2NrICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuY1xcbmluZGV4IDJkNmJiZGRkMWVkZDUxLi42NmM5NDlkOTQyNjEwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcXG5AQCAtMTA5LDE0ICsxMDksMjYgQEAgc3RhdGljIGludCBpcHZ0YXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2lwdnRhcF9kZWxsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcXG4rXFx0dGFwX2RlbF9xdWV1ZXMoXFx1MDAyNnZsYW50YXAtXFx1MDAzZXRhcCk7XFxuK1xcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgZGV2LCBoZWFkKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXB2dGFwX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IHZsYW50YXAtXFx1MDAzZXZsYW4ucG9ydDtcXG4gXFxuLVxcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcXG4tXFx0dGFwX2RlbF9xdWV1ZXMoXFx1MDAyNnZsYW4tXFx1MDAzZXRhcCk7XFxuLVxcdGlwdmxhbl9saW5rX2RlbGV0ZShkZXYsIGhlYWQpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2Vwbm9kZXNfbG9jayk7XFxuK1xcdGlmICghdmxhbnRhcC1cXHUwMDNldmxhbi5keWluZylcXG4rXFx0XFx0X19pcHZ0YXBfZGVsbGluayhkZXZfbmV0KGRldiksIGRldiwgaGVhZCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcHZ0YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtMTk4LDYgKzIxMCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gX19pcHZ0YXBfZGVsbGluaztcXG4rXFxuIFxcdGVyciA9IHRhcF9jcmVhdGVfY2RldihcXHUwMDI2aXB2dGFwX2NkZXYsIFxcdTAwMjZpcHZ0YXBfbWFqb3IsIFxcXCJpcHZ0YXBcXFwiLFxcbiBcXHRcXHRcXHQgICAgICBUSElTX01PRFVMRSk7XFxuIFxcdGlmIChlcnIpXFxuQEAgLTIyNCw2ICsyMzgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpcHZ0YXBfaW5pdCh2b2lkKVxcbiBvdXQyOlxcbiBcXHR0YXBfZGVzdHJveV9jZGV2KGlwdnRhcF9tYWpvciwgXFx1MDAyNmlwdnRhcF9jZGV2KTtcXG4gb3V0MTpcXG4rXFx0X19pcHZ0YXBfZGVsbGlua19wdHIgPSBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBtb2R1bGVfaW5pdChpcHZ0YXBfaW5pdCk7XFxuQEAgLTIzNCw2ICsyNTAsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaXB2dGFwX2V4aXQodm9pZClcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmlwdnRhcF9ub3RpZmllcl9ibG9jayk7XFxuIFxcdGNsYXNzX3VucmVnaXN0ZXIoXFx1MDAyNmlwdnRhcF9jbGFzcyk7XFxuIFxcdHRhcF9kZXN0cm95X2NkZXYoaXB2dGFwX21ham9yLCBcXHUwMDI2aXB2dGFwX2NkZXYpO1xcbitcXHRfX2lwdnRhcF9kZWxsaW5rX3B0ciA9IE5VTEw7XFxuIH1cXG4gbW9kdWxlX2V4aXQoaXB2dGFwX2V4aXQpO1xcbiBNT0RVTEVfQUxJQVNfUlROTF9MSU5LKFxcXCJpcHZ0YXBcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuaW5kZXggMWM1MTQyMTQ5MTc1MzYuLjgxNzBiZjMzY2NmOTU2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xcbkBAIC03Nyw2ICs3Nyw3IEBAIHN0cnVjdCB2ZXRoX3ByaXYge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqX3hkcF9wcm9nO1xcbiBcXHRzdHJ1Y3QgdmV0aF9ycVxcdFxcdCpycTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0cmVxdWVzdGVkX2hlYWRyb29tO1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlclxcdHBlZXJfdHJhY2tlcjtcXG4gfTtcXG4gXFxuIHN0cnVjdCB2ZXRoX3hkcF90eF9icSB7XFxuQEAgLTE5MDEsMTUgKzE5MDIsMTcgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIFxcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIocHJpdi1cXHUwMDNlcGVlciwgcGVlcik7XFxuK1xcdG5ldGRldl9ob2xkKHBlZXIsIFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbiBcXHRlcnIgPSB2ZXRoX2luaXRfcXVldWVzKGRldiwgdGIpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9xdWV1ZXM7XFxuIFxcbiBcXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVxcdTAwM2VwZWVyLCBkZXYpO1xcbitcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xcbiBcXHRlcnIgPSB2ZXRoX2luaXRfcXVldWVzKHBlZXIsIHRiKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfcXVldWVzO1xcbitcXHRcXHRnb3RvIGVycl9wZWVyX3F1ZXVlcztcXG4gXFxuIFxcdHZldGhfZGlzYWJsZV9ncm8oZGV2KTtcXG4gXFx0LyogdXBkYXRlIFhEUCBzdXBwb3J0ZWQgZmVhdHVyZXMgKi9cXG5AQCAtMTkxOCw3ICsxOTIxLDExIEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9wZWVyX3F1ZXVlczpcXG4rXFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyX3RyYWNrZXIpO1xcbitcXHRwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gZXJyX3F1ZXVlczpcXG4rXFx0bmV0ZGV2X3B1dChwZWVyLCBcXHUwMDI2cHJpdi1cXHUwMDNlcGVlcl90cmFja2VyKTtcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gZXJyX3JlZ2lzdGVyX2RldjpcXG4gXFx0Lyogbm90aGluZyB0byBkbyAqL1xcbkBAIC0xOTMzLDI0ICsxOTQwLDI1IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBzdGF0aWMgdm9pZCB2ZXRoX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4ge1xcbi1cXHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xcbitcXHRuZXRkZXZpY2VfdHJhY2tlciAqcGVlcl90cmFja2VyO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcjtcXG4rXFx0c3RydWN0IHZldGhfcHJpdiAqcHJpdjtcXG4gXFxuIFxcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRwZWVyID0gcnRubF9kZXJlZmVyZW5jZShwcml2LVxcdTAwM2VwZWVyKTtcXG4rXFx0cGVlcl90cmFja2VyID0gXFx1MDAyNnByaXYtXFx1MDAzZXBlZXJfdHJhY2tlcjtcXG4rXFx0cGVlciA9IHVucmN1X3BvaW50ZXIoeGNoZyhcXHUwMDI2cHJpdi1cXHUwMDNlcGVlciwgTlVMTCkpO1xcbitcXHRpZiAoIXBlZXIpXFxuK1xcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIE5vdGUgOiBkZWxsaW5rKCkgaXMgY2FsbGVkIGZyb20gZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaCgpLFxcbi1cXHQgKiBiZWZvcmUgYSByY3Vfc3luY2hyb25pemUoKSBwb2ludC4gVGhlIGRldmljZXMgYXJlIGd1YXJhbnRlZWRcXG4tXFx0ICogbm90IGJlaW5nIGZyZWVkIGJlZm9yZSBvbmUgUkNVIGdyYWNlIHBlcmlvZC5cXG4tXFx0ICovXFxuLVxcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cXHUwMDNlcGVlciwgTlVMTCk7XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XFxuIFxcbi1cXHRpZiAocGVlcikge1xcbi1cXHRcXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XFxuLVxcdFxcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cXHUwMDNlcGVlciwgTlVMTCk7XFxuLVxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKHBlZXIsIGhlYWQpO1xcbi1cXHR9XFxuK1xcdHByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTtcXG4rXFx0ZGV2ID0gdW5yY3VfcG9pbnRlcih4Y2hnKFxcdTAwMjZwcml2LVxcdTAwM2VwZWVyLCBOVUxMKSk7XFxuK1xcdGlmIChkZXYpXFxuK1xcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChkZXZfbmV0KGRldiksIHBlZXIsIGhlYWQpO1xcbitcXG4rXFx0bmV0ZGV2X3B1dChwZWVyLCBwZWVyX3RyYWNrZXIpO1xcbitcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBlZXJfdHJhY2tlcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2ZXRoX3BvbGljeVtWRVRIX0lORk9fTUFYICsgMV0gPSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjhkYjI1Yjc5NTczZTNjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTE4NDUsNiArMTg0NSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuICAqXFx0QG5hcGlfbGlzdDpcXHRMaXN0IGVudHJ5IHVzZWQgZm9yIHBvbGxpbmcgTkFQSSBkZXZpY2VzXFxuICAqXFx0QHVucmVnX2xpc3Q6XFx0TGlzdCBlbnRyeSAgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGVcXG4gICpcXHRcXHRcXHRkZXZpY2U7IHNlZSB0aGUgZnVuY3Rpb24gdW5yZWdpc3Rlcl9uZXRkZXZcXG4rICpcXHRAdW5yZWdfbGlzdF9uZXQ6TGlzdCBlbnRyeSB3aGVuIHdlIGFyZSB1bnJlZ2lzdGVyaW5nIHRoZSBjcm9zcy1uZXRuc1xcbisgKlxcdFxcdFxcdGRldmljZTsgc2VlIHRoZSBmdW5jdGlvbiB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoKVxcbiAgKlxcdEBjbG9zZV9saXN0OlxcdExpc3QgZW50cnkgdXNlZCB3aGVuIHdlIGFyZSBjbG9zaW5nIHRoZSBkZXZpY2VcXG4gICpcXHRAcHR5cGVfYWxsOiAgICAgRGV2aWNlLXNwZWNpZmljIHBhY2tldCBoYW5kbGVycyBmb3IgYWxsIHByb3RvY29sc1xcbiAgKlxcdEBwdHlwZV9zcGVjaWZpYzogRGV2aWNlLXNwZWNpZmljLCBwcm90b2NvbC1zcGVjaWZpYyBwYWNrZXQgaGFuZGxlcnNcXG5AQCAtMjI0MSw2ICsyMjQzLDkgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZGV2X2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRuYXBpX2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR1bnJlZ19saXN0O1xcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHR1bnJlZ19saXN0X25ldDtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRjbG9zZV9saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0cHR5cGVfYWxsO1xcbiBcXG5AQCAtMzQ3Miw2ICszNDc3LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIE5VTEwpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbit2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCk7XFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCBlYTM5ZGQyM2ExOTc2ZS4uOTU3MjkzMzllN2E1NDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcXG5AQCAtMTE1LDYgKzExNSwxMCBAQCBib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xcbiBcXG4gYm9vbCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQoc3RydWN0IG5ldCAqbmV0KTtcXG4gXFxuK3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpO1xcbit2b2lkIHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKTtcXG4rdm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4rXFxuICNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3J0bmxfbmV0KG5ldCwgcClcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQobmV0KSlcXG4gI2RlZmluZSBydG5sX25ldF9kZXJlZmVyZW5jZShuZXQsIHApXFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0xNTAsNiArMTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBBU1NFUlRfUlROTF9ORVQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRBU1NFUlRfUlROTCgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXFxuK3tcXG4rfVxcbitcXG4gI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfcnRubF9uZXQobmV0LCBwKVxcdFxcdFxcXFxcXG4gXFx0cmN1X2RlcmVmZXJlbmNlX3J0bmwocClcXG4gI2RlZmluZSBydG5sX25ldF9kZXJlZmVyZW5jZShuZXQsIHApXFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcXG5pbmRleCA4MGRlNWU5OGE2NmQ2Yy4uNTAxYWYxOTk5ZmU4MzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuQEAgLTE5Nyw2ICsxOTcsOSBAQCBzdHJ1Y3QgbmV0IHtcXG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbiBcXHQvKiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHdoZW4gdGhlIGNvbmZpZyBndWFyZCBpcyByZW1vdmVkLiAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRydG5sX211dGV4O1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRydG5sX3dvcms7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRkZXZfdW5yZWdfaGVhZDtcXG4rXFx0c3BpbmxvY2tfdFxcdFxcdGRldl91bnJlZ19sb2NrO1xcbiAjZW5kaWZcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZTT0NLRVRTKVxcbiBcXHRzdHJ1Y3QgbmV0bnNfdnNvY2tcXHR2c29jaztcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jNDNhNDRmYjY0OWZhMiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTExNjA4LDggKzExNjA4LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4gXFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcbiBcXHRcXHRcXHQvKiBSZWJyb2FkY2FzdCB1bnJlZ2lzdGVyIG5vdGlmaWNhdGlvbiAqL1xcbi1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgbGlzdCwgdG9kb19saXN0KVxcbitcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgbGlzdCwgdG9kb19saXN0KSB7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4rXFxuK1xcdFxcdFxcdFxcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xcbiBcXHRcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVIsIGRldik7XFxuK1xcdFxcdFxcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK1xcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdF9fcnRubF91bmxvY2soKTtcXG4gXFx0XFx0XFx0cmN1X2JhcnJpZXIoKTtcXG5AQCAtMTIwODcsNiArMTIwOTIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VuYXBpX2xpc3QpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0KTtcXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0X25ldCk7XFxuKyNlbmRpZlxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VjbG9zZV9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlbGlua193YXRjaF9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlYWRqX2xpc3QudXBwZXIpO1xcbkBAIC0xMjMwNCw2ICsxMjMxMiwxMCBAQCB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuIHtcXG4gXFx0QVNTRVJUX1JUTkwoKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcXG4rXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0X25ldCkpO1xcbisjZW5kaWZcXG4rXFxuIFxcdGlmIChoZWFkKSB7XFxuIFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3QsIGhlYWQpO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0xMjQ4MCw2ICsxMjQ5MiwxNiBAQCB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbm90aWZ5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIFxcdHN5bmNocm9uaXplX25ldCgpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpIHtcXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbitcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuK1xcbitcXHRcXHQvKiBzcGluX2xvY2soKSBjYW4gYmUgbW92ZWQgb3V0c2lkZSBvZiB0aGUgbG9vcFxcbitcXHRcXHQgKiBvbmNlIHRoZSBwZXItbmV0bnMgUlROTCBjb252ZXJzaW9uIGNvbXBsZXRlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfbG9jayk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3RfbmV0KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbisjZW5kaWZcXG4gXFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZWRldl9yZWdpc3RlcmVkX3RyYWNrZXIpO1xcbiBcXHRcXHRuZXRfc2V0X3RvZG8oZGV2KTtcXG4gXFx0XFx0Y250Kys7XFxuQEAgLTEyNTAyLDYgKzEyNTI0LDk2IEBAIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2soZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKSB7XFxuK1xcdFxcdG5ldGRldl91bmxvY2soZGV2KTtcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRuZXQgPSBkZXZfbmV0KGRldik7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXG4rXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0KSk7XFxuK1xcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcXG4rXFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQsIFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19oZWFkKTtcXG4rXFx0cnRubF9uZXRfcXVldWVfd29yayhuZXQpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXG4rXFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KTtcXG4rXFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsIGhlYWQsIHVucmVnX2xpc3QpIHtcXG4rXFx0XFx0LyogT25jZSBhbGwgY3Jvc3MtbmV0bnMgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoKSBpc1xcbitcXHRcXHQgKiBjb252ZXJ0ZWQgdG8gX25ldCgpIChvciBmb3IgZGVidWdnaW5nKSwgcmVtb3ZlIHRoaXMgY2hlY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0REVCVUdfTkVUX1dBUk5fT05DRSghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCIlcyB3YXMgdW5yZWdpc3RlcmVkIGZyb20gYSBkaWZmZXJlbnQgbmV0bnMuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgZGV2LVxcdTAwM2VuYW1lKTtcXG4rXFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdCk7XFxuK1xcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3RfbmV0LCBcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCk7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChzdHJ1Y3QgbmV0ICpuZXRfb2xkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXQgKm5ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdGlmIChuZXRfb2xkIFxcdTAwM2UgbmV0KSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm5ldF9vbGQtXFx1MDAzZWRldl91bnJlZ19sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0X29sZC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXHRcXHRzcGluX2xvY2tfbmVzdGVkKFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0X25ldCkpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3RfbmV0LCBcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXRfb2xkLVxcdTAwM2VkZXZfdW5yZWdfbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrKTtcXG4rfVxcbitcXG4rdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnRtcDtcXG4rXFx0TElTVF9IRUFEKHVucmVnX2hlYWRfbmV0KTtcXG4rXFx0TElTVF9IRUFEKHVucmVnX2hlYWQpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrKTtcXG4rXFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCwgXFx1MDAyNnVucmVnX2hlYWRfbmV0KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCBcXHUwMDI2dW5yZWdfaGVhZF9uZXQsIHVucmVnX2xpc3RfbmV0KSB7XFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXVucmVnX2xpc3QsIFxcdTAwMjZ1bnJlZ19oZWFkKTtcXG4rXFx0fVxcbitcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2dW5yZWdfaGVhZCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICpcXHR1bnJlZ2lzdGVyX25ldGRldiAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsXFxuICAqXFx0QGRldjogZGV2aWNlXFxuQEAgLTEyNjU4LDYgKzEyNzcwLDEwIEBAIGludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdG5ldGRldl91bmxvY2soZGV2KTtcXG4gXFx0ZGV2LVxcdTAwM2VpZmluZGV4ID0gbmV3X2lmaW5kZXg7XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21vdmVfbmV0KG5ldF9vbGQsIG5ldCwgZGV2KTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAobmV3X25hbWVbMF0pIHtcXG4gXFx0XFx0LyogUmVuYW1lIHRoZSBuZXRkZXYgdG8gcHJlcGFyZWQgbmFtZSAqL1xcbiBcXHRcXHR3cml0ZV9zZXFsb2NrX2JoKFxcdTAwMjZuZXRkZXZfcmVuYW1lX2xvY2spO1xcbkBAIC0xMzAzNCw3ICsxMzE1MCw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHQgKiBQdXNoIGFsbCBtaWdyYXRhYmxlIG5ldHdvcmsgZGV2aWNlcyBiYWNrIHRvIHRoZVxcbiBcXHQgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXFxuIFxcdCAqL1xcbi1cXHRBU1NFUlRfUlROTCgpO1xcbitcXG4gXFx0Zm9yX2VhY2hfbmV0ZGV2X3NhZmUobmV0LCBkZXYsIGF1eCkge1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXHRcXHRjaGFyIGZiX25hbWVbSUZOQU1TSVpdO1xcbkBAIC0xMzA3NywyMSArMTMxOTMsMzYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxcbiBcXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdF9fcnRubF9uZXRfbG9jayhcXHUwMDI2aW5pdF9uZXQpO1xcbitcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShuZXQsIG5ldF9saXN0LCBleGl0X2xpc3QpIHtcXG4rXFx0XFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XFxuIFxcdFxcdGRlZmF1bHRfZGV2aWNlX2V4aXRfbmV0KG5ldCk7XFxuK1xcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXG4rXFx0X19ydG5sX25ldF91bmxvY2soXFx1MDAyNmluaXRfbmV0KTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7XFxuK1xcdFxcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xcbitcXG4gXFx0XFx0Zm9yX2VhY2hfbmV0ZGV2X3JldmVyc2UobmV0LCBkZXYpIHtcXG4gXFx0XFx0XFx0aWYgKGRldi1cXHUwMDNlcnRubF9saW5rX29wcyBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZXJ0bmxfbGlua19vcHMtXFx1MDAzZWRlbGxpbmspXFxuIFxcdFxcdFxcdFxcdGRldi1cXHUwMDNlcnRubF9saW5rX29wcy1cXHUwMDNlZGVsbGluayhkZXYsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuK1xcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuIFxcdH1cXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRydG5sX25ldF9mbHVzaF93b3JrcXVldWUoKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBfX25ldF9pbml0ZGF0YSBkZWZhdWx0X2RldmljZV9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xcbmluZGV4IGQ5ZGFmZTI0ZjU3ZTNmLi5hOTFkMmI1OGFhZGRmOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG5AQCAtMTgxLDYgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIG9wc19leGl0X3J0bmxfbGlzdChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpvcHNfbGlzdCxcXG4gXFx0XFx0XFx0XFx0b3BzLVxcdTAwM2VleGl0X3J0bmwobmV0LCBcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0KG5ldCwgXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXHRcXHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xcbiBcXHR9XFxuIFxcbkBAIC00MjIsNiArNDIzLDkgQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25cXG4gI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZuZXQtXFx1MDAzZXJ0bmxfbXV0ZXgpO1xcbiBcXHRsb2NrX3NldF9jbXBfZm4oXFx1MDAyNm5ldC1cXHUwMDNlcnRubF9tdXRleCwgcnRubF9uZXRfbG9ja19jbXBfZm4sIE5VTEwpO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrLCBydG5sX25ldF93b3JrX2Z1bmMpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZuZXQtXFx1MDAzZWRldl91bnJlZ19sb2NrKTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VwdHlwZV9hbGwpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmIxMjlmNzkzZDg1MTY0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXFxuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5AQCAtMTk3LDYgKzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcbitcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldChuZXQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlcnRubF9tdXRleCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX3J0bmxfbmV0X3VubG9jayk7XFxuQEAgLTI3Myw2ICsyNzQsMjkgQEAgYm9vbCBsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSBcXHUwMDI2XFx1MDAyNiBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF9tdXRleCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQpO1xcbitcXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpydG5sX25ldF93cTtcXG4rXFxuK3ZvaWQgcnRubF9uZXRfcXVldWVfd29yayhzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0cXVldWVfd29yayhydG5sX25ldF93cSwgXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrKTtcXG4rfVxcbitcXG4rdm9pZCBydG5sX25ldF9mbHVzaF93b3JrcXVldWUodm9pZClcXG4re1xcbitcXHRmbHVzaF93b3JrcXVldWUocnRubF9uZXRfd3EpO1xcbit9XFxuK1xcbit2b2lkIHJ0bmxfbmV0X3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7XFxuK1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmV0LVxcdTAwM2VkZXZfdW5yZWdfaGVhZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0bmxfbmV0X2xvY2sobmV0KTtcXG4rXFx0cnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK31cXG4gI2Vsc2VcXG4gc3RhdGljIGludCBydG5sX25ldF9jbXBfbG9ja3MoY29uc3Qgc3RydWN0IG5ldCAqbmV0X2EsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9iKVxcbiB7XFxuQEAgLTI4MiwxMCArMzA2LDExIEBAIHN0YXRpYyBpbnQgcnRubF9uZXRfY21wX2xvY2tzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9hLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYilcXG4gI2VuZGlmXFxuIFxcbiBzdHJ1Y3QgcnRubF9uZXRzIHtcXG4tXFx0LyogLVxcdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDMgbmV0bnMgYXQgbW9zdDtcXG4tXFx0ICogMiBmb3IgdGhlIG5ldyBkZXZpY2UsIDEgZm9yIGl0cyBwZWVyLlxcbitcXHQvKiAtXFx1MDAzZW5ld2xpbmsoKSBuZWVkcyB0byBmcmVlemUgNCBuZXRucyBhdCBtb3N0O1xcbitcXHQgKiAyIGZvciB0aGUgbmV3IGRldmljZSwgMSBmb3IgaXRzIHBlZXIsIDEgZm9yXFxuK1xcdCAqIGFuIGV4aXN0aW5nIGRldmljZSAoZG9fc2V0bGluaygpIHBhdGgpLlxcbiBcXHQgKi9cXG4tXFx0c3RydWN0IG5ldCAqbmV0WzNdO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRbNF07XFxuIFxcdHVuc2lnbmVkIGNoYXIgbGVuO1xcbiB9O1xcbiBcXG5AQCAtNjM2LDE2ICs2NjEsMTUgQEAgaW50IHJ0bmxfbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfbGlua19yZWdpc3Rlcik7XFxuIFxcbi1zdGF0aWMgdm9pZCBfX3J0bmxfa2lsbF9saW5rcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXFxuK3N0YXRpYyB2b2lkIF9fcnRubF9raWxsX2xpbmtzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi1cXHRMSVNUX0hFQUQobGlzdF9raWxsKTtcXG4gXFxuIFxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbiBcXHRcXHRpZiAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID09IG9wcylcXG4tXFx0XFx0XFx0b3BzLVxcdTAwM2VkZWxsaW5rKGRldiwgXFx1MDAyNmxpc3Rfa2lsbCk7XFxuK1xcdFxcdFxcdG9wcy1cXHUwMDNlZGVsbGluayhkZXYsIGRldl9raWxsX2xpc3QpO1xcbiBcXHR9XFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmxpc3Rfa2lsbCk7XFxuIH1cXG4gXFxuIC8qIFJldHVybiB3aXRoIHRoZSBydG5sX2xvY2sgaGVsZCB3aGVuIHRoZXJlIGFyZSBubyBuZXR3b3JrXFxuQEAgLTY3Niw2ICs3MDAsNyBAQCBzdGF0aWMgdm9pZCBydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwodm9pZClcXG4gICovXFxuIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcXG4ge1xcbitcXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxpbmtfb3BzX211dGV4KTtcXG5AQCAtNjg5LDggKzcxNCwxNCBAQCB2b2lkIHJ0bmxfbGlua191bnJlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbiBcXHRydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwoKTtcXG4gXFxuLVxcdGZvcl9lYWNoX25ldChuZXQpXFxuLVxcdFxcdF9fcnRubF9raWxsX2xpbmtzKG5ldCwgb3BzKTtcXG4rXFx0Zm9yX2VhY2hfbmV0KG5ldCkge1xcbitcXHRcXHRfX3J0bmxfbmV0X2xvY2sobmV0KTtcXG4rXFx0XFx0X19ydG5sX2tpbGxfbGlua3MobmV0LCBvcHMsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuK1xcdFxcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XFxuK1xcdH1cXG4rXFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gXFx0dXBfd3JpdGUoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbkBAIC00MTU1LDYgKzQxODYsOCBAQCBzdGF0aWMgaW50IHJ0bmxfbmV3bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRydG5sX25ldHNfYWRkKFxcdTAwMjZydG5sX25ldHMsIGdldF9uZXQoc29ja19uZXQoc2tiLVxcdTAwM2VzaykpKTtcXG4rXFxuIFxcdHJ0bmxfbmV0c19sb2NrKFxcdTAwMjZydG5sX25ldHMpO1xcbiBcXHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcXG4gXFx0cnRubF9uZXRzX3VubG9jayhcXHUwMDI2cnRubF9uZXRzKTtcXG5AQCAtNzIyMSw0ICs3MjU0LDEwIEBAIHZvaWQgX19pbml0IHJ0bmV0bGlua19pbml0KHZvaWQpXFxuIFxcdHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2cnRuZXRsaW5rX2Rldl9ub3RpZmllcik7XFxuIFxcbiBcXHRydG5sX3JlZ2lzdGVyX21hbnkocnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcXG4rXFx0cnRubF9uZXRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKFxcXCJydG5sX25ldFxcXCIpO1xcbitcXHRpZiAoIXJ0bmxfbmV0X3dxKVxcbitcXHRcXHRwYW5pYyhcXFwiQ291bGQgbm90IGNyZWF0ZSBydG5sX25ldCB3b3JrcVxcXCIpO1xcbisjZW5kaWZcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNjo0MC44Mzk1NzkyNjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTMwMTUwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX05FVF9TTUFMTF9SVE5MXCIsXG4gICAgXCJCQVJFVURQXCIsXG4gICAgXCJJUFZMQU5cIixcbiAgICBcIklQVlRBUFwiLFxuICAgIFwiVkVUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldFwiLFxuICAgIFwidW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0XCIsXG4gICAgXCJydG5sX25ldF93b3JrX2Z1bmNcIixcbiAgICBcImJhcmV1ZHBfZGVsbGlua1wiLFxuICAgIFwiX19iYXJldWRwX2RlbGxpbmtcIixcbiAgICBcImlwdmxhbl9saW5rX2RlbGV0ZVwiLFxuICAgIFwiX19pcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcImlwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJfX2lwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJ2ZXRoX2RlbGxpbmtcIixcbiAgICBcImRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OGQ0MGE5NjYyNzExY2JiNjY0ZTQwMGE5MzYwZTcwZDY4M2YyMGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwMDoyNjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JhcmV1ZHAuYyBiL2RyaXZlcnMvbmV0L2JhcmV1ZHAuY1xuaW5kZXggNWVmODQxYzg1NTI2OTcuLmMzYjVlZDUyZDg3Nzg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYmFyZXVkcC5jXG4rKysgYi9kcml2ZXJzL25ldC9iYXJldWRwLmNcbkBAIC0zNiw2ICszNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmFyZXVkcF9uZXRfaWQ7XG4gXG4gc3RydWN0IGJhcmV1ZHBfbmV0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGJhcmV1ZHBfbGlzdDtcbitcdHN0cnVjdCBtdXRleFx0XHRsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJhcmV1ZHBfY29uZiB7XG5AQCAtNjM2LDEwICs2MzcsMTUgQEAgc3RhdGljIHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcF9maW5kX2RldihzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuLFxuIHtcbiBcdHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgKnQgPSBOVUxMO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmFyZXVkcCwgXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0LCBuZXh0KSB7XG4gXHRcdGlmIChjb25mLVx1MDAzZXBvcnQgPT0gYmFyZXVkcC1cdTAwM2Vwb3J0KVxuIFx0XHRcdHQgPSBiYXJldWRwO1xuIFx0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuK1xuIFx0cmV0dXJuIHQ7XG4gfVxuIFxuQEAgLTY3NSw3ICs2ODEsMTAgQEAgc3RhdGljIGludCBiYXJldWRwX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNmJhcmV1ZHAtXHUwMDNlbmV4dCwgXHUwMDI2Ym4tXHUwMDNlYmFyZXVkcF9saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OTIsMTIgKzcwMSwyNiBAQCBzdGF0aWMgaW50IGJhcmV1ZHBfbGlua19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2JhcmV1ZHBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbit7XG4rXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1xuK1x0bGlzdF9kZWxfaW5pdChcdTAwMjZiYXJldWRwLVx1MDAzZW5leHQpO1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYmFyZXVkcF9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4ge1xuIFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBiYXJldWRwX25ldCAqYm47XG4gXG4tXHRsaXN0X2RlbChcdTAwMjZiYXJldWRwLVx1MDAzZW5leHQpO1xuLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbitcdGJuID0gbmV0X2dlbmVyaWMoYmFyZXVkcC1cdTAwM2VuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Ym4tXHUwMDNlbG9jayk7XG4rXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2YmFyZXVkcC1cdTAwM2VuZXh0KSlcbitcdFx0X19iYXJldWRwX2RlbGxpbmsoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJhcmV1ZHBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTc3Niw2ICs3OTksOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgYmFyZXVkcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC03ODUsMTMgKzgxMCwyNSBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzdHJ1Y3QgYmFyZXVkcF9uZXQgKmJuID0gbmV0X2dlbmVyaWMobmV0LCBiYXJldWRwX25ldF9pZCk7XG4gXHRzdHJ1Y3QgYmFyZXVkcF9kZXYgKmJhcmV1ZHAsICpuZXh0O1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZibi1cdTAwM2Vsb2NrKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXJldWRwLCBuZXh0LCBcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QsIG5leHQpXG4tXHRcdGJhcmV1ZHBfZGVsbGluayhiYXJldWRwLVx1MDAzZWRldiwgZGV2X2tpbGxfbGlzdCk7XG4rXHRcdF9fYmFyZXVkcF9kZWxsaW5rKG5ldCwgYmFyZXVkcC1cdTAwM2VkZXYsIGRldl9raWxsX2xpc3QpO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJuLVx1MDAzZWxvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJhcmV1ZHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHN0cnVjdCBiYXJldWRwX25ldCAqYm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGJhcmV1ZHBfbmV0X2lkKTtcbitcbitcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZibi1cdTAwM2ViYXJldWRwX2xpc3QpKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBiYXJldWRwX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IGJhcmV1ZHBfaW5pdF9uZXQsXG4gXHQuZXhpdF9ydG5sID0gYmFyZXVkcF9leGl0X3J0bmxfbmV0LFxuK1x0LmV4aXQgPSBiYXJldWRwX2V4aXRfbmV0LFxuIFx0LmlkICAgPSBcdTAwMjZiYXJldWRwX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiYXJldWRwX25ldCksXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmggYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmhcbmluZGV4IDgwZjg0ZmM4NzAwOGIzLi44ZDA1YWQ0ODA0MzhmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaFxuKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oXG5AQCAtNjksNiArNjksNyBAQCBzdHJ1Y3QgaXB2bF9kZXYge1xuIFx0REVDTEFSRV9CSVRNQVAobWFjX2ZpbHRlcnMsIElQVkxBTl9NQUNfRklMVEVSX1NJWkUpO1xuIFx0bmV0ZGV2X2ZlYXR1cmVzX3RcdHNmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4rXHRib29sXHRcdFx0ZHlpbmc7XG4gfTtcbiBcbiBzdHJ1Y3QgaXB2bF9hZGRyIHtcbkBAIC05MSwxMiArOTIsMTMgQEAgc3RydWN0IGlwdmxfcG9ydCB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZFx0aGxoZWFkW0lQVkxBTl9IQVNIX1NJWkVdO1xuIFx0c3BpbmxvY2tfdFx0XHRhZGRyc19sb2NrOyAvKiBndWFyZHMgaGFzaC10YWJsZSBhbmQgYWRkcnMgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGlwdmxhbnM7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0cG5vZGVzX2xvY2s7XG4gXHR1MTZcdFx0XHRtb2RlO1xuIFx0dTE2XHRcdFx0ZmxhZ3M7XG4gXHR1MTZcdFx0XHRkZXZfaWRfc3RhcnQ7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdxO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0YmFja2xvZztcbi1cdGludFx0XHRcdGNvdW50O1xuK1x0cmVmY291bnRfdFx0XHRjb3VudDtcbiBcdHN0cnVjdCBpZGFcdFx0aWRhO1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXJcdGRldl90cmFja2VyO1xuIH07XG5AQCAtMTY4LDcgKzE3MCw4IEBAIHZvaWQgaXB2bGFuX2NvdW50X3J4KGNvbnN0IHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgc3VjY2VzcywgYm9vbCBtY2FzdCk7XG4gaW50IGlwdmxhbl9saW5rX25ldyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi12b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbit2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGlwdmxhbl9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpO1xuICNpZmRlZiBDT05GSUdfSVBWTEFOX0wzU1xuQEAgLTIwNyw0ICsyMTAsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0aWZfaXNfaXB2bGFuX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGlwdmxhbl9oYW5kbGVfZnJhbWU7XG4gfVxuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFZUQVApXG4rZXh0ZXJuIHZvaWQgKCpfX2lwdnRhcF9kZWxsaW5rX3B0cikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuKyNlbmRpZlxuK1xuICNlbmRpZiAvKiBfX0lQVkxBTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uY1xuaW5kZXggZWQ0NjQzOWE5ZjRlYjEuLmVlNDZhNTVmNzNkMTRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jXG5AQCAtNyw2ICs3LDEyIEBAXG4gXG4gI2luY2x1ZGUgXCJpcHZsYW4uaFwiXG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVlRBUClcbit2b2lkICgqX19pcHZ0YXBfZGVsbGlua19wdHIpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuK0VYUE9SVF9TWU1CT0woX19pcHZ0YXBfZGVsbGlua19wdHIpO1xuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuQEAgLTE2LDYgKzIyLDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCxcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXHRpZiAocG9ydC1cdTAwM2Vtb2RlICE9IG52YWwpIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbitcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpcHZsYW4sIFx1MDAyNnBvcnQtXHUwMDNlaXB2bGFucywgcG5vZGUpIHtcbiBcdFx0XHRmbGFncyA9IGlwdmxhbi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3M7XG4gXHRcdFx0aWYgKG52YWwgPT0gSVBWTEFOX01PREVfTDMgfHwgbnZhbCA9PSBJUFZMQU5fTU9ERV9MM1MpIHtcbkBAIC00MCw2ICs0OCw4IEBAIHN0YXRpYyBpbnQgaXB2bGFuX3NldF9wb3J0X21vZGUoc3RydWN0IGlwdmxfcG9ydCAqcG9ydCwgdTE2IG52YWwsXG4gXHRcdFx0aXB2bGFuX2wzc191bnJlZ2lzdGVyKHBvcnQpO1xuIFx0XHR9XG4gXHRcdHBvcnQtXHUwMDNlbW9kZSA9IG52YWw7XG4rXG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTU2LDYgKzY2LDggQEAgc3RhdGljIGludCBpcHZsYW5fc2V0X3BvcnRfbW9kZShzdHJ1Y3QgaXB2bF9wb3J0ICpwb3J0LCB1MTYgbnZhbCxcbiBcdFx0XHRcdFx0IE5VTEwpO1xuIFx0fVxuIFxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtNzYsNiArODgsNyBAQCBzdGF0aWMgaW50IGlwdmxhbl9wb3J0X2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2cG9ydC1cdTAwM2VobGhlYWRbaWR4XSk7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwb3J0LVx1MDAzZWFkZHJzX2xvY2spO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cG9ydC1cdTAwM2ViYWNrbG9nKTtcbiBcdElOSVRfV09SSyhcdTAwMjZwb3J0LVx1MDAzZXdxLCBpcHZsYW5fcHJvY2Vzc19tdWx0aWNhc3QpO1xuIFx0aWRhX2luaXQoXHUwMDI2cG9ydC1cdTAwM2VpZGEpO1xuQEAgLTg2LDYgKzk5LDcgQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNnBvcnQtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyOlxuQEAgLTkzLDE2ICsxMDcsMTggQEAgc3RhdGljIGludCBpcHZsYW5fcG9ydF9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQpXG4ge1xuLVx0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydC1cdTAwM2VkZXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuLVx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnBvcnQtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0aWYgKHBvcnQtXHUwMDNlbW9kZSA9PSBJUFZMQU5fTU9ERV9MM1MpXG4gXHRcdGlwdmxhbl9sM3NfdW5yZWdpc3Rlcihwb3J0KTtcbitcbiBcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cG9ydC1cdTAwM2V3cSk7XG4rXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cG9ydC1cdTAwM2VkZXZfdHJhY2tlcik7XG4rXG4gXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cG9ydC1cdTAwM2ViYWNrbG9nKSkgIT0gTlVMTCkge1xuIFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbkBAIC0xMTEsNiArMTI3LDI3IEBAIHN0YXRpYyB2b2lkIGlwdmxhbl9wb3J0X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGtmcmVlKHBvcnQpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBpcHZsYW5fcG9ydF9wdXQoc3RydWN0IGlwdmxfcG9ydCAqcG9ydClcbit7XG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBvcnQtXHUwMDNlY291bnQpKVxuK1x0XHRpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGlwdmxfcG9ydCAqaXB2bGFuX3BvcnRfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IGlwdmxfcG9ydCAqcG9ydCA9IE5VTEw7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRpZiAobmV0aWZfaXNfaXB2bGFuX3BvcnQoZGV2KSkge1xuK1x0XHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1x0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZwb3J0LVx1MDAzZWNvdW50KSlcbitcdFx0XHRwb3J0ID0gTlVMTDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHBvcnQ7XG4rfVxuK1xuICNkZWZpbmUgSVBWTEFOX0FMV0FZU19PTl9PRkxPQURTIFxcXG4gXHQoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IFxcXG4gXHQgTkVUSUZfRl9HU09fUk9CVVNUIHwgTkVUSUZfRl9HU09fU09GVFdBUkUgfCBORVRJRl9GX0dTT19FTkNBUF9BTEwpXG5AQCAtMTUzLDMwICsxOTAsNDUgQEAgc3RhdGljIGludCBpcHZsYW5faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKCFpcHZsYW4tXHUwMDNlcGNwdV9zdGF0cylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4rXHRuZXRkZXZfbG9jayhwaHlfZGV2KTtcbitcbiBcdGlmICghbmV0aWZfaXNfaXB2bGFuX3BvcnQocGh5X2RldikpIHtcbiBcdFx0ZXJyID0gaXB2bGFuX3BvcnRfY3JlYXRlKHBoeV9kZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdFx0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcbiBcdFx0XHRmcmVlX3BlcmNwdShpcHZsYW4tXHUwMDNlcGNwdV9zdGF0cyk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuK1x0XHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XG4rXHRcdHJlZmNvdW50X3NldChcdTAwMjZwb3J0LVx1MDAzZWNvdW50LCAxKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBvcnQgPSBpcHZsYW5fcG9ydF9nZXRfcnRubChwaHlfZGV2KTtcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBvcnQtXHUwMDNlY291bnQpO1xuIFx0fVxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuLVx0cG9ydC1cdTAwM2Vjb3VudCArPSAxO1xuK1xuK1x0bmV0ZGV2X3VubG9jayhwaHlfZGV2KTtcbitcbitcdGlwdmxhbi1cdTAwM2Vwb3J0ID0gcG9ydDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcHZsYW5fdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwdmxfZGV2ICppcHZsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2Rldjtcbi1cdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQ7XG4rXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpwaHlfZGV2O1xuIFxuIFx0ZnJlZV9wZXJjcHUoaXB2bGFuLVx1MDAzZXBjcHVfc3RhdHMpO1xuIFxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKHBoeV9kZXYpO1xuLVx0cG9ydC1cdTAwM2Vjb3VudCAtPSAxO1xuLVx0aWYgKCFwb3J0LVx1MDAzZWNvdW50KVxuLVx0XHRpcHZsYW5fcG9ydF9kZXN0cm95KHBvcnQtXHUwMDNlZGV2KTtcbitcdHBoeV9kZXYgPSBpcHZsYW4tXHUwMDNlcGh5X2RldjtcbitcdG5ldGRldl9ob2xkKHBoeV9kZXYsIFx1MDAyNmRldl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbitcdG5ldGRldl9sb2NrKHBoeV9kZXYpO1xuK1xuK1x0aXB2bGFuX3BvcnRfcHV0KGlwdmxhbi1cdTAwM2Vwb3J0KTtcbitcbitcdG5ldGRldl91bmxvY2socGh5X2Rldik7XG4rXHRuZXRkZXZfcHV0KHBoeV9kZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiB9XG4gXG4gc3RhdGljIGludCBpcHZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuQEAgLTU5NCw5ICs2NDYsNyBAQCBpbnQgaXB2bGFuX2xpbmtfbmV3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0LyogaXB2bGFuX2luaXQoKSB3b3VsZCBoYXZlIGNyZWF0ZWQgdGhlIHBvcnQsIGlmIHJlcXVpcmVkICovXG4tXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0X3J0bmwocGh5X2Rldik7XG4tXHRpcHZsYW4tXHUwMDNlcG9ydCA9IHBvcnQ7XG4rXHRwb3J0ID0gaXB2bGFuLVx1MDAzZXBvcnQ7XG4gXG4gXHQvKiBJZiB0aGUgcG9ydC1pZCBiYXNlIGlzIGF0IHRoZSBNQVggdmFsdWUsIHRoZW4gd3JhcCBpdCBhcm91bmQgYW5kXG4gXHQgKiBiZWdpbiBmcm9tIDB4MSBhZ2Fpbi4gVGhpcyBtYXkgYmUgZHVlIHRvIGEgYnVzeSBzeXN0ZW0gd2hlcmUgbG90c1xuQEAgLTYzOSw3ICs2ODksMTAgQEAgaW50IGlwdmxhbl9saW5rX25ldyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byB1bmxpbmtfbmV0ZGV2O1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmlwdmxhbi1cdTAwM2Vwbm9kZSwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbitcbiBcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHBoeV9kZXYsIGRldik7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NTMsNyArNzA2LDggQEAgaW50IGlwdmxhbl9saW5rX25ldyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19uZXcpO1xuIFxuLXZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4rdm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbiBcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcHZsX2FkZHIgKmFkZHIsICpuZXh0O1xuQEAgLTY2OCwxMCArNzIyLDIwIEBAIHZvaWQgaXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXG4gXHRpZGFfZnJlZShcdTAwMjZpcHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VpZGEsIGRldi1cdTAwM2VkZXZfaWQpO1xuIFx0bGlzdF9kZWxfcmN1KFx1MDAyNmlwdmxhbi1cdTAwM2Vwbm9kZSk7XG4tXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KG5ldCwgZGV2LCBoZWFkKTtcbiBcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGlwdmxhbi1cdTAwM2VwaHlfZGV2LCBkZXYpO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChpcHZsYW5fbGlua19kZWxldGUpO1xuK0VYUE9SVF9TWU1CT0woX19pcHZsYW5fbGlua19kZWxldGUpO1xuK1xuK3N0YXRpYyB2b2lkIGlwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2aXB2bGFuLVx1MDAzZXBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuK1x0aWYgKCFpcHZsYW4tXHUwMDNlZHlpbmcpXG4rXHRcdF9faXB2bGFuX2xpbmtfZGVsZXRlKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZpcHZsYW4tXHUwMDNlcG9ydC1cdTAwM2Vwbm9kZXNfbG9jayk7XG4rfVxuIFxuIHZvaWQgaXB2bGFuX2xpbmtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG5AQCAtNzI5LDE0ICs3OTMsMTkgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvICpwcmVjaGFkZHJfaW5mbztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcdHN0cnVjdCBpcHZsX2RldiAqaXB2bGFuLCAqbmV4dDtcbitcdGludCBlcnIsIHJldCA9IE5PVElGWV9ET05FO1xuIFx0c3RydWN0IGlwdmxfcG9ydCAqcG9ydDtcbiBcdExJU1RfSEVBRChsc3Rfa2lsbCk7XG4tXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFuZXRpZl9pc19pcHZsYW5fcG9ydChkZXYpKVxuLVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHRpZiAoZXZlbnQgPT0gTkVUREVWX1BSRUNIQU5HRVVQUEVSIHx8XG4rXHQgICAgZXZlbnQgPT0gTkVUREVWX0NIQU5HRVVQUEVSKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cG9ydCA9IGlwdmxhbl9wb3J0X2dldF9ydG5sKGRldik7XG4rXHRwb3J0ID0gaXB2bGFuX3BvcnRfZ2V0KGRldik7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuIFxuIFx0c3dpdGNoIChldmVudCkge1xuIFx0Y2FzZSBORVRERVZfVVA6XG5AQCAtNzYwLDE2ICs4MjksMjYgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0XHRcdGlwdmxhbl9taWdyYXRlX2wzc19ob29rKG9sZG5ldCwgbmV3bmV0KTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4tXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuK1x0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjoge1xuK1x0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4rXG4gXHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19VTlJFR0lTVEVSSU5HKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKVxuLVx0XHRcdGlwdmxhbi1cdTAwM2VkZXYtXHUwMDNlcnRubF9saW5rX29wcy1cdTAwM2VkZWxsaW5rKGlwdmxhbi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2bHN0X2tpbGwpO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXB2bGFuLCBuZXh0LCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XG4rXHRcdFx0aXB2bGFuLVx1MDAzZWR5aW5nID0gdHJ1ZTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWVEFQKVxuK1x0XHRcdGlmIChpcHZsYW4tXHUwMDNlZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgIT0gXHUwMDI2aXB2bGFuX2xpbmtfb3BzKVxuK1x0XHRcdFx0X19pcHZ0YXBfZGVsbGlua19wdHIobmV0LCBpcHZsYW4tXHUwMDNlZGV2LCBcdTAwMjZsc3Rfa2lsbCk7XG4rXHRcdFx0ZWxzZVxuKyNlbmRpZlxuK1x0XHRcdFx0X19pcHZsYW5fbGlua19kZWxldGUobmV0LCBpcHZsYW4tXHUwMDNlZGV2LCBcdTAwMjZsc3Rfa2lsbCk7XG4rXHRcdH1cbitcbiBcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsc3Rfa2lsbCk7XG4gXHRcdGJyZWFrO1xuLVxuK1x0fVxuIFx0Y2FzZSBORVRERVZfRkVBVF9DSEFOR0U6XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXB2bGFuLCBcdTAwMjZwb3J0LVx1MDAzZWlwdmxhbnMsIHBub2RlKSB7XG4gXHRcdFx0bmV0aWZfaW5oZXJpdF90c29fbWF4KGlwdmxhbi1cdTAwM2VkZXYsIGRldik7XG5AQCAtNzg4LDggKzg2NywxMCBAQCBzdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG4gXHRcdFx0ZXJyID0gbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KGlwdmxhbi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0XHQgIHByZWNoYWRkcl9pbmZvLVx1MDAzZWRldl9hZGRyLFxuIFx0XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdHJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbkBAIC04MDIsNyArODgzLDggQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFxuIFx0Y2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOlxuIFx0XHQvKiBGb3JiaWQgdW5kZXJseWluZyBkZXZpY2UgdG8gY2hhbmdlIGl0cyB0eXBlLiAqL1xuLVx0XHRyZXR1cm4gTk9USUZZX0JBRDtcbitcdFx0cmV0ID0gTk9USUZZX0JBRDtcbitcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6XG4gXHRjYXNlIE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSOlxuQEAgLTgxMCw3ICs4OTIsMTIgQEAgc3RhdGljIGludCBpcHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwdmxhbiwgXHUwMDI2cG9ydC1cdTAwM2VpcHZsYW5zLCBwbm9kZSlcbiBcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoZXZlbnQsIGlwdmxhbi1cdTAwM2VkZXYpO1xuIFx0fVxuLVx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlcG5vZGVzX2xvY2spO1xuK1xuK1x0aXB2bGFuX3BvcnRfcHV0KHBvcnQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyogdGhlIGNhbGxlciBtdXN0IGhlbGQgdGhlIGFkZHJzIGxvY2sgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMgYi9kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmNcbmluZGV4IDJkNmJiZGRkMWVkZDUxLi42NmM5NDlkOTQyNjEwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuY1xuKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdnRhcC5jXG5AQCAtMTA5LDE0ICsxMDksMjYgQEAgc3RhdGljIGludCBpcHZ0YXBfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgX19pcHZ0YXBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbitcdHRhcF9kZWxfcXVldWVzKFx1MDAyNnZsYW50YXAtXHUwMDNldGFwKTtcbitcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgZGV2LCBoZWFkKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaXB2dGFwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbi1cdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBpcHZ0YXBfZGV2ICp2bGFudGFwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBpcHZsX3BvcnQgKnBvcnQgPSB2bGFudGFwLVx1MDAzZXZsYW4ucG9ydDtcbiBcbi1cdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIoZGV2KTtcbi1cdHRhcF9kZWxfcXVldWVzKFx1MDAyNnZsYW4tXHUwMDNldGFwKTtcbi1cdGlwdmxhbl9saW5rX2RlbGV0ZShkZXYsIGhlYWQpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbitcdGlmICghdmxhbnRhcC1cdTAwM2V2bGFuLmR5aW5nKVxuK1x0XHRfX2lwdnRhcF9kZWxsaW5rKGRldl9uZXQoZGV2KSwgZGV2LCBoZWFkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZXBub2Rlc19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXB2dGFwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtMTk4LDYgKzIxMCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gX19pcHZ0YXBfZGVsbGluaztcbitcbiBcdGVyciA9IHRhcF9jcmVhdGVfY2RldihcdTAwMjZpcHZ0YXBfY2RldiwgXHUwMDI2aXB2dGFwX21ham9yLCBcImlwdnRhcFwiLFxuIFx0XHRcdCAgICAgIFRISVNfTU9EVUxFKTtcbiBcdGlmIChlcnIpXG5AQCAtMjI0LDYgKzIzOCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGlwdnRhcF9pbml0KHZvaWQpXG4gb3V0MjpcbiBcdHRhcF9kZXN0cm95X2NkZXYoaXB2dGFwX21ham9yLCBcdTAwMjZpcHZ0YXBfY2Rldik7XG4gb3V0MTpcbitcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gTlVMTDtcbitcbiBcdHJldHVybiBlcnI7XG4gfVxuIG1vZHVsZV9pbml0KGlwdnRhcF9pbml0KTtcbkBAIC0yMzQsNiArMjUwLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGlwdnRhcF9leGl0KHZvaWQpXG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcHZ0YXBfbm90aWZpZXJfYmxvY2spO1xuIFx0Y2xhc3NfdW5yZWdpc3RlcihcdTAwMjZpcHZ0YXBfY2xhc3MpO1xuIFx0dGFwX2Rlc3Ryb3lfY2RldihpcHZ0YXBfbWFqb3IsIFx1MDAyNmlwdnRhcF9jZGV2KTtcbitcdF9faXB2dGFwX2RlbGxpbmtfcHRyID0gTlVMTDtcbiB9XG4gbW9kdWxlX2V4aXQoaXB2dGFwX2V4aXQpO1xuIE1PRFVMRV9BTElBU19SVE5MX0xJTksoXCJpcHZ0YXBcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5pbmRleCAxYzUxNDIxNDkxNzUzNi4uODE3MGJmMzNjY2Y5NTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTc3LDYgKzc3LDcgQEAgc3RydWN0IHZldGhfcHJpdiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0Kl94ZHBfcHJvZztcbiBcdHN0cnVjdCB2ZXRoX3JxXHRcdCpycTtcbiBcdHVuc2lnbmVkIGludFx0XHRyZXF1ZXN0ZWRfaGVhZHJvb207XG4rXHRuZXRkZXZpY2VfdHJhY2tlclx0cGVlcl90cmFja2VyO1xuIH07XG4gXG4gc3RydWN0IHZldGhfeGRwX3R4X2JxIHtcbkBAIC0xOTAxLDE1ICsxOTAyLDE3IEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVx1MDAzZXBlZXIsIHBlZXIpO1xuK1x0bmV0ZGV2X2hvbGQocGVlciwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuIFx0ZXJyID0gdmV0aF9pbml0X3F1ZXVlcyhkZXYsIHRiKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3F1ZXVlcztcbiBcbiBcdHByaXYgPSBuZXRkZXZfcHJpdihwZWVyKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihwcml2LVx1MDAzZXBlZXIsIGRldik7XG4rXHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyLCBHRlBfS0VSTkVMKTtcbiBcdGVyciA9IHZldGhfaW5pdF9xdWV1ZXMocGVlciwgdGIpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfcXVldWVzO1xuK1x0XHRnb3RvIGVycl9wZWVyX3F1ZXVlcztcbiBcbiBcdHZldGhfZGlzYWJsZV9ncm8oZGV2KTtcbiBcdC8qIHVwZGF0ZSBYRFAgc3VwcG9ydGVkIGZlYXR1cmVzICovXG5AQCAtMTkxOCw3ICsxOTIxLDExIEBAIHN0YXRpYyBpbnQgdmV0aF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfcGVlcl9xdWV1ZXM6XG4rXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuK1x0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gZXJyX3F1ZXVlczpcbitcdG5ldGRldl9wdXQocGVlciwgXHUwMDI2cHJpdi1cdTAwM2VwZWVyX3RyYWNrZXIpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiBlcnJfcmVnaXN0ZXJfZGV2OlxuIFx0Lyogbm90aGluZyB0byBkbyAqL1xuQEAgLTE5MzMsMjQgKzE5NDAsMjUgQEAgc3RhdGljIGludCB2ZXRoX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBzdGF0aWMgdm9pZCB2ZXRoX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgdmV0aF9wcml2ICpwcml2O1xuK1x0bmV0ZGV2aWNlX3RyYWNrZXIgKnBlZXJfdHJhY2tlcjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpwZWVyO1xuK1x0c3RydWN0IHZldGhfcHJpdiAqcHJpdjtcbiBcbiBcdHByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0cGVlciA9IHJ0bmxfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VwZWVyKTtcbitcdHBlZXJfdHJhY2tlciA9IFx1MDAyNnByaXYtXHUwMDNlcGVlcl90cmFja2VyO1xuK1x0cGVlciA9IHVucmN1X3BvaW50ZXIoeGNoZyhcdTAwMjZwcml2LVx1MDAzZXBlZXIsIE5VTEwpKTtcbitcdGlmICghcGVlcilcbitcdFx0cmV0dXJuO1xuIFxuLVx0LyogTm90ZSA6IGRlbGxpbmsoKSBpcyBjYWxsZWQgZnJvbSBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoKCksXG4tXHQgKiBiZWZvcmUgYSByY3Vfc3luY2hyb25pemUoKSBwb2ludC4gVGhlIGRldmljZXMgYXJlIGd1YXJhbnRlZWRcbi1cdCAqIG5vdCBiZWluZyBmcmVlZCBiZWZvcmUgb25lIFJDVSBncmFjZSBwZXJpb2QuXG4tXHQgKi9cbi1cdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4gXG4tXHRpZiAocGVlcikge1xuLVx0XHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4tXHRcdFJDVV9JTklUX1BPSU5URVIocHJpdi1cdTAwM2VwZWVyLCBOVUxMKTtcbi1cdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUocGVlciwgaGVhZCk7XG4tXHR9XG4rXHRwcml2ID0gbmV0ZGV2X3ByaXYocGVlcik7XG4rXHRkZXYgPSB1bnJjdV9wb2ludGVyKHhjaGcoXHUwMDI2cHJpdi1cdTAwM2VwZWVyLCBOVUxMKSk7XG4rXHRpZiAoZGV2KVxuK1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoZGV2X25ldChkZXYpLCBwZWVyLCBoZWFkKTtcbitcbitcdG5ldGRldl9wdXQocGVlciwgcGVlcl90cmFja2VyKTtcbitcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBlZXJfdHJhY2tlcik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2ZXRoX3BvbGljeVtWRVRIX0lORk9fTUFYICsgMV0gPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li44ZGIyNWI3OTU3M2UzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0xODQ1LDYgKzE4NDUsOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAbmFwaV9saXN0Olx0TGlzdCBlbnRyeSB1c2VkIGZvciBwb2xsaW5nIE5BUEkgZGV2aWNlc1xuICAqXHRAdW5yZWdfbGlzdDpcdExpc3QgZW50cnkgIHdoZW4gd2UgYXJlIHVucmVnaXN0ZXJpbmcgdGhlXG4gICpcdFx0XHRkZXZpY2U7IHNlZSB0aGUgZnVuY3Rpb24gdW5yZWdpc3Rlcl9uZXRkZXZcbisgKlx0QHVucmVnX2xpc3RfbmV0Okxpc3QgZW50cnkgd2hlbiB3ZSBhcmUgdW5yZWdpc3RlcmluZyB0aGUgY3Jvc3MtbmV0bnNcbisgKlx0XHRcdGRldmljZTsgc2VlIHRoZSBmdW5jdGlvbiB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoKVxuICAqXHRAY2xvc2VfbGlzdDpcdExpc3QgZW50cnkgdXNlZCB3aGVuIHdlIGFyZSBjbG9zaW5nIHRoZSBkZXZpY2VcbiAgKlx0QHB0eXBlX2FsbDogICAgIERldmljZS1zcGVjaWZpYyBwYWNrZXQgaGFuZGxlcnMgZm9yIGFsbCBwcm90b2NvbHNcbiAgKlx0QHB0eXBlX3NwZWNpZmljOiBEZXZpY2Utc3BlY2lmaWMsIHByb3RvY29sLXNwZWNpZmljIHBhY2tldCBoYW5kbGVyc1xuQEAgLTIyNDEsNiArMjI0Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmFwaV9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0dW5yZWdfbGlzdDtcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHR1bnJlZ19saXN0X25ldDtcbisjZW5kaWZcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGNsb3NlX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwdHlwZV9hbGw7XG4gXG5AQCAtMzQ3Miw2ICszNDc3LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBOVUxMKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTtcbit2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0KHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbit7XG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCBlYTM5ZGQyM2ExOTc2ZS4uOTU3MjkzMzllN2E1NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMTE1LDYgKzExNSwxMCBAQCBib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xuIFxuIGJvb2wgbG9ja2RlcF9ydG5sX25ldF9pc19oZWxkKHN0cnVjdCBuZXQgKm5ldCk7XG4gXG4rdm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBydG5sX25ldF9mbHVzaF93b3JrcXVldWUodm9pZCk7XG4rdm9pZCBydG5sX25ldF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitcbiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApXHRcdFx0XHRcXFxuIFx0cmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZChuZXQpKVxuICNkZWZpbmUgcnRubF9uZXRfZGVyZWZlcmVuY2UobmV0LCBwKVx0XHRcdFx0XHRcXFxuQEAgLTE1MCw2ICsxNTQsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIEFTU0VSVF9SVE5MX05FVChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRBU1NFUlRfUlROTCgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgcnRubF9uZXRfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG4re1xuK31cbitcbiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9ydG5sX25ldChuZXQsIHApXHRcdFxcXG4gXHRyY3VfZGVyZWZlcmVuY2VfcnRubChwKVxuICNkZWZpbmUgcnRubF9uZXRfZGVyZWZlcmVuY2UobmV0LCBwKVx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5pbmRleCA4MGRlNWU5OGE2NmQ2Yy4uNTAxYWYxOTk5ZmU4MzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuQEAgLTE5Nyw2ICsxOTcsOSBAQCBzdHJ1Y3QgbmV0IHtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4gXHQvKiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHdoZW4gdGhlIGNvbmZpZyBndWFyZCBpcyByZW1vdmVkLiAqL1xuIFx0c3RydWN0IG11dGV4XHRcdHJ0bmxfbXV0ZXg7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJ0bmxfd29yaztcbitcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl91bnJlZ19oZWFkO1xuK1x0c3BpbmxvY2tfdFx0XHRkZXZfdW5yZWdfbG9jaztcbiAjZW5kaWZcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVlNPQ0tFVFMpXG4gXHRzdHJ1Y3QgbmV0bnNfdnNvY2tcdHZzb2NrO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jNDNhNDRmYjY0OWZhMiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTExNjA4LDggKzExNjA4LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiBcdFx0XHRydG5sX2xvY2soKTtcbiBcbiBcdFx0XHQvKiBSZWJyb2FkY2FzdCB1bnJlZ2lzdGVyIG5vdGlmaWNhdGlvbiAqL1xuLVx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBsaXN0LCB0b2RvX2xpc3QpXG4rXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuK1x0XHRcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuK1xuK1x0XHRcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4gXHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVIsIGRldik7XG4rXHRcdFx0XHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRfX3J0bmxfdW5sb2NrKCk7XG4gXHRcdFx0cmN1X2JhcnJpZXIoKTtcbkBAIC0xMjA4Nyw2ICsxMjA5Miw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCk7XG4rI2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlY2xvc2VfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbGlua193YXRjaF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VhZGpfbGlzdC51cHBlcik7XG5AQCAtMTIzMDQsNiArMTIzMTIsMTAgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIHtcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcbisjZW5kaWZcbitcbiBcdGlmIChoZWFkKSB7XG4gXHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0LCBoZWFkKTtcbiBcdH0gZWxzZSB7XG5AQCAtMTI0ODAsNiArMTI0OTIsMTYgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkge1xuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbitcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuK1xuK1x0XHQvKiBzcGluX2xvY2soKSBjYW4gYmUgbW92ZWQgb3V0c2lkZSBvZiB0aGUgbG9vcFxuK1x0XHQgKiBvbmNlIHRoZSBwZXItbmV0bnMgUlROTCBjb252ZXJzaW9uIGNvbXBsZXRlcy5cbitcdFx0ICovXG4rXHRcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuKyNlbmRpZlxuIFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2LVx1MDAzZWRldl9yZWdpc3RlcmVkX3RyYWNrZXIpO1xuIFx0XHRuZXRfc2V0X3RvZG8oZGV2KTtcbiBcdFx0Y250Kys7XG5AQCAtMTI1MDIsNiArMTI1MjQsOTYgQEAgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gfVxuIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7XG4gXG4rI2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdG5ldGRldl9sb2NrKGRldik7XG4rXG4rXHRpZiAobmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkge1xuK1x0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4rXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdG5ldCA9IGRldl9uZXQoZGV2KTtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK1xuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCkpO1xuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcbitcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0LCBcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuK1x0cnRubF9uZXRfcXVldWVfd29yayhuZXQpO1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcbitcdG5ldGRldl91bmxvY2soZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQpO1xuK1xuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgaGVhZCwgdW5yZWdfbGlzdCkge1xuK1x0XHQvKiBPbmNlIGFsbCBjcm9zcy1uZXRucyB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZSgpIGlzXG4rXHRcdCAqIGNvbnZlcnRlZCB0byBfbmV0KCkgKG9yIGZvciBkZWJ1Z2dpbmcpLCByZW1vdmUgdGhpcyBjaGVjay5cbitcdFx0ICovXG4rXHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0REVCVUdfTkVUX1dBUk5fT05DRSghbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSxcbitcdFx0XHRcdCAgICBcIiVzIHdhcyB1bnJlZ2lzdGVyZWQgZnJvbSBhIGRpZmZlcmVudCBuZXRucy5cXG5cIixcbitcdFx0XHRcdCAgICBkZXYtXHUwMDNlbmFtZSk7XG4rXG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3QpO1xuK1x0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQsIFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChzdHJ1Y3QgbmV0ICpuZXRfb2xkLFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdGlmIChuZXRfb2xkIFx1MDAzZSBuZXQpIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4rXHRcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2bmV0X29sZC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm5ldF9vbGQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuK1x0XHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0fVxuK1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V1bnJlZ19saXN0X25ldCkpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdF9uZXQsIFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCk7XG4rXHR9XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZuZXRfb2xkLVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4rfVxuK1xuK3ZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICp0bXA7XG4rXHRMSVNUX0hFQUQodW5yZWdfaGVhZF9uZXQpO1xuK1x0TElTVF9IRUFEKHVucmVnX2hlYWQpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfbG9jayk7XG4rXHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCwgXHUwMDI2dW5yZWdfaGVhZF9uZXQpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgXHUwMDI2dW5yZWdfaGVhZF9uZXQsIHVucmVnX2xpc3RfbmV0KSB7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXVucmVnX2xpc3RfbmV0KTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNldW5yZWdfbGlzdCwgXHUwMDI2dW5yZWdfaGVhZCk7XG4rXHR9XG4rXG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNnVucmVnX2hlYWQpO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKlx0dW5yZWdpc3Rlcl9uZXRkZXYgLSByZW1vdmUgZGV2aWNlIGZyb20gdGhlIGtlcm5lbFxuICAqXHRAZGV2OiBkZXZpY2VcbkBAIC0xMjY1OCw2ICsxMjc3MCwxMCBAQCBpbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxuIFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuIFx0ZGV2LVx1MDAzZWlmaW5kZXggPSBuZXdfaWZpbmRleDtcbiBcbisjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tb3ZlX25ldChuZXRfb2xkLCBuZXQsIGRldik7XG4rI2VuZGlmXG4rXG4gXHRpZiAobmV3X25hbWVbMF0pIHtcbiBcdFx0LyogUmVuYW1lIHRoZSBuZXRkZXYgdG8gcHJlcGFyZWQgbmFtZSAqL1xuIFx0XHR3cml0ZV9zZXFsb2NrX2JoKFx1MDAyNm5ldGRldl9yZW5hbWVfbG9jayk7XG5AQCAtMTMwMzQsNyArMTMxNTAsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGRlZmF1bHRfZGV2aWNlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdCAqIFB1c2ggYWxsIG1pZ3JhdGFibGUgbmV0d29yayBkZXZpY2VzIGJhY2sgdG8gdGhlXG4gXHQgKiBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXG4gXHQgKi9cbi1cdEFTU0VSVF9SVE5MKCk7XG4rXG4gXHRmb3JfZWFjaF9uZXRkZXZfc2FmZShuZXQsIGRldiwgYXV4KSB7XG4gXHRcdGludCBlcnI7XG4gXHRcdGNoYXIgZmJfbmFtZVtJRk5BTVNJWl07XG5AQCAtMTMwNzcsMjEgKzEzMTkzLDM2IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdClcbiBcdExJU1RfSEVBRChkZXZfa2lsbF9saXN0KTtcbiBcbiBcdHJ0bmxfbG9jaygpO1xuK1xuK1x0X19ydG5sX25ldF9sb2NrKFx1MDAyNmluaXRfbmV0KTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7XG4rXHRcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xuIFx0XHRkZWZhdWx0X2RldmljZV9leGl0X25ldChuZXQpO1xuK1x0XHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xuK1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbitcdF9fcnRubF9uZXRfdW5sb2NrKFx1MDAyNmluaXRfbmV0KTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCBuZXRfbGlzdCwgZXhpdF9saXN0KSB7XG4rXHRcdF9fcnRubF9uZXRfbG9jayhuZXQpO1xuK1xuIFx0XHRmb3JfZWFjaF9uZXRkZXZfcmV2ZXJzZShuZXQsIGRldikge1xuIFx0XHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNlZGVsbGluaylcbiBcdFx0XHRcdGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHR9XG4rXG4rXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0KG5ldCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4rXHRcdF9fcnRubF9uZXRfdW5sb2NrKG5ldCk7XG4gXHR9XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0cnRubF91bmxvY2soKTtcbitcbitcdHJ0bmxfbmV0X2ZsdXNoX3dvcmtxdWV1ZSgpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIF9fbmV0X2luaXRkYXRhIGRlZmF1bHRfZGV2aWNlX29wcyA9IHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IGQ5ZGFmZTI0ZjU3ZTNmLi5hOTFkMmI1OGFhZGRmOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTgxLDYgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIG9wc19leGl0X3J0bmxfbGlzdChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpvcHNfbGlzdCxcbiBcdFx0XHRcdG9wcy1cdTAwM2VleGl0X3J0bmwobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiBcdFx0fVxuIFxuK1x0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldChuZXQsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHRfX3J0bmxfbmV0X3VubG9jayhuZXQpO1xuIFx0fVxuIFxuQEAgLTQyMiw2ICs0MjMsOSBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfblxuICNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbiBcdG11dGV4X2luaXQoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgpO1xuIFx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4LCBydG5sX25ldF9sb2NrX2NtcF9mbiwgTlVMTCk7XG4rXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfd29yaywgcnRubF9uZXRfd29ya19mdW5jKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VkZXZfdW5yZWdfaGVhZCk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2xvY2spO1xuICNlbmRpZlxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX2FsbCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggMTJhYTNhYTE2ODhiMTMuLmIxMjlmNzkzZDg1MTY0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMTk3LDYgKzE5Nyw3IEBAIHZvaWQgX19ydG5sX25ldF91bmxvY2soc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldChuZXQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX3J0bmxfbmV0X3VubG9jayk7XG5AQCAtMjczLDYgKzI3NCwyOSBAQCBib29sIGxvY2tkZXBfcnRubF9uZXRfaXNfaGVsZChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSBcdTAwMjZcdTAwMjYgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfbmV0X2lzX2hlbGQpO1xuK1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnRubF9uZXRfd3E7XG4rXG4rdm9pZCBydG5sX25ldF9xdWV1ZV93b3JrKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRxdWV1ZV93b3JrKHJ0bmxfbmV0X3dxLCBcdTAwMjZuZXQtXHUwMDNlcnRubF93b3JrKTtcbit9XG4rXG4rdm9pZCBydG5sX25ldF9mbHVzaF93b3JrcXVldWUodm9pZClcbit7XG4rXHRmbHVzaF93b3JrcXVldWUocnRubF9uZXRfd3EpO1xuK31cbitcbit2b2lkIHJ0bmxfbmV0X3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXQsIHJ0bmxfd29yayk7XG4rXG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydG5sX25ldF9sb2NrKG5ldCk7XG4rXHRydG5sX25ldF91bmxvY2sobmV0KTtcbit9XG4gI2Vsc2VcbiBzdGF0aWMgaW50IHJ0bmxfbmV0X2NtcF9sb2Nrcyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYSwgY29uc3Qgc3RydWN0IG5ldCAqbmV0X2IpXG4ge1xuQEAgLTI4MiwxMCArMzA2LDExIEBAIHN0YXRpYyBpbnQgcnRubF9uZXRfY21wX2xvY2tzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldF9hLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXRfYilcbiAjZW5kaWZcbiBcbiBzdHJ1Y3QgcnRubF9uZXRzIHtcbi1cdC8qIC1cdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDMgbmV0bnMgYXQgbW9zdDtcbi1cdCAqIDIgZm9yIHRoZSBuZXcgZGV2aWNlLCAxIGZvciBpdHMgcGVlci5cbitcdC8qIC1cdTAwM2VuZXdsaW5rKCkgbmVlZHMgdG8gZnJlZXplIDQgbmV0bnMgYXQgbW9zdDtcbitcdCAqIDIgZm9yIHRoZSBuZXcgZGV2aWNlLCAxIGZvciBpdHMgcGVlciwgMSBmb3JcbitcdCAqIGFuIGV4aXN0aW5nIGRldmljZSAoZG9fc2V0bGluaygpIHBhdGgpLlxuIFx0ICovXG4tXHRzdHJ1Y3QgbmV0ICpuZXRbM107XG4rXHRzdHJ1Y3QgbmV0ICpuZXRbNF07XG4gXHR1bnNpZ25lZCBjaGFyIGxlbjtcbiB9O1xuIFxuQEAgLTYzNiwxNiArNjYxLDE1IEBAIGludCBydG5sX2xpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocnRubF9saW5rX3JlZ2lzdGVyKTtcbiBcbi1zdGF0aWMgdm9pZCBfX3J0bmxfa2lsbF9saW5rcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpXG4rc3RhdGljIHZvaWQgX19ydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdExJU1RfSEVBRChsaXN0X2tpbGwpO1xuIFxuIFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG4gXHRcdGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcyA9PSBvcHMpXG4tXHRcdFx0b3BzLVx1MDAzZWRlbGxpbmsoZGV2LCBcdTAwMjZsaXN0X2tpbGwpO1xuK1x0XHRcdG9wcy1cdTAwM2VkZWxsaW5rKGRldiwgZGV2X2tpbGxfbGlzdCk7XG4gXHR9XG4tXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmxpc3Rfa2lsbCk7XG4gfVxuIFxuIC8qIFJldHVybiB3aXRoIHRoZSBydG5sX2xvY2sgaGVsZCB3aGVuIHRoZXJlIGFyZSBubyBuZXR3b3JrXG5AQCAtNjc2LDYgKzcwMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bmxfbG9ja191bnJlZ2lzdGVyaW5nX2FsbCh2b2lkKVxuICAqL1xuIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcbiB7XG4rXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpbmtfb3BzX211dGV4KTtcbkBAIC02ODksOCArNzE0LDE0IEBAIHZvaWQgcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcylcbiBcdGRvd25fd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG4gXHRydG5sX2xvY2tfdW5yZWdpc3RlcmluZ19hbGwoKTtcbiBcbi1cdGZvcl9lYWNoX25ldChuZXQpXG4tXHRcdF9fcnRubF9raWxsX2xpbmtzKG5ldCwgb3BzKTtcbitcdGZvcl9lYWNoX25ldChuZXQpIHtcbitcdFx0X19ydG5sX25ldF9sb2NrKG5ldCk7XG4rXHRcdF9fcnRubF9raWxsX2xpbmtzKG5ldCwgb3BzLCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbitcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXQobmV0LCBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbitcdFx0X19ydG5sX25ldF91bmxvY2sobmV0KTtcbitcdH1cbitcbitcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXG4gXHRydG5sX3VubG9jaygpO1xuIFx0dXBfd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG5AQCAtNDE1NSw2ICs0MTg2LDggQEAgc3RhdGljIGludCBydG5sX25ld2xpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdH1cbiBcdH1cbiBcbitcdHJ0bmxfbmV0c19hZGQoXHUwMDI2cnRubF9uZXRzLCBnZXRfbmV0KHNvY2tfbmV0KHNrYi1cdTAwM2VzaykpKTtcbitcbiBcdHJ0bmxfbmV0c19sb2NrKFx1MDAyNnJ0bmxfbmV0cyk7XG4gXHRyZXQgPSBfX3J0bmxfbmV3bGluayhza2IsIG5saCwgb3BzLCB0Z3RfbmV0LCBsaW5rX25ldCwgcGVlcl9uZXQsIHRicywgZGF0YSwgZXh0YWNrKTtcbiBcdHJ0bmxfbmV0c191bmxvY2soXHUwMDI2cnRubF9uZXRzKTtcbkBAIC03MjIxLDQgKzcyNTQsMTAgQEAgdm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcbiBcdHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZydG5ldGxpbmtfZGV2X25vdGlmaWVyKTtcbiBcbiBcdHJ0bmxfcmVnaXN0ZXJfbWFueShydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnMpO1xuK1xuKyNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcbitcdHJ0bmxfbmV0X3dxID0gY3JlYXRlX3dvcmtxdWV1ZShcInJ0bmxfbmV0XCIpO1xuK1x0aWYgKCFydG5sX25ldF93cSlcbitcdFx0cGFuaWMoXCJDb3VsZCBub3QgY3JlYXRlIHJ0bmxfbmV0IHdvcmtxXCIpO1xuKyNlbmRpZlxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAwOjI2OjQwLjgzOTU4MTIyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY1MjAyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29ya2luZyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhcHBsaWVkLCBhbmQgbXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSAqZnVuY3Rpb25hbCogY2hhbmdlcyB0aGF0IG5lZWQgZnV6emluZy4gSSdtIHNlZWluZyBhIGxvdCBvZiBjaHVybiBpbiBjb3JlIG5ldHdvcmtpbmcsIHNvIHRoaXMgbG9va3MgcHJvbWlzaW5nIGZvciBmaW5kaW5nIHBvdGVudGlhbCBidWdzLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IsIHByaW1hcmlseSBhcm91bmQgZGV2aWNlIHVucmVnaXN0cmF0aW9uIGFuZCBSVE5MIChSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgTmV0bGluaykgbG9ja2luZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgdXNpbmcgYENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTGAsIHdoaWNoIGlzIGEgcHJldHR5IGJpZyBkZWFsLCBhbmQgdGhlIGBuZXRkZXZpY2VgIGNvZGUgaXRzZWxmIGlzIGJlaW5nIGhlYXZpbHkgbW9kaWZpZWQuIFRoaXMgaW5kaWNhdGVzIHRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgbG9ja2luZyBzY2hlbWUsIGFuZCB0aGUgd2F5IGRldmljZXMgYXJlIHVucmVnaXN0ZXJlZC5cblxuU3BlY2lmaWMgZHJpdmVycyBhcmUgYWxzbyBiZWluZyBtb2RpZmllZCB0byBwbGF5IG5pY2VseSB3aXRoIHRoZXNlIGNoYW5nZXMuIEkgc2VlIGBiYXJldWRwLmNgIG5vdyBpbmNsdWRlcyBhIG11dGV4IGBsb2NrYCwgYW5kIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGxvY2sgYXJlIGBiYXJldWRwX2ZpbmRfZGV2YCwgYGJhcmV1ZHBfY29uZmlndXJlYCwgYGJhcmV1ZHBfZGVsbGlua2AsIGBiYXJldWRwX2luaXRfbmV0YCwgYGJhcmV1ZHBfZXhpdF9ydG5sX25ldGAsIHBsdXMgYF9fYmFyZXVkcF9kZWxsaW5rYCBpcyBhZGRlZC4gYGlwdmxhbmAsIGBpcHZ0YXBgLCBhbmQgYHZldGhgIGFsbCBzZWVtIHRvIGhhdmUgc2ltaWxhciB1cGRhdGVzLCB3aXRoIGxvY2tpbmcgb3IgbmV3IGRldmljZSB1bnJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGFkZGVkIHRvIHVzZSB0aGUgbmV3IGxvY2tpbmcgc2NoZW1lIGFuZCBgbmV0ZGV2aWNlYCBpbmZyYXN0cnVjdHVyZS5cblxuRnVuY3Rpb25hbGx5LCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIFwieWVzXCIuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgYW5kIGFueSBjaGFuZ2UgdG8gbG9ja2luZyBvciBkZXZpY2UgdW5yZWdpc3RyYXRpb24gY2FuIGVhc2lseSBpbnRyb2R1Y2Ugc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MuIEFuZCB5ZXMsIGFsbCB0aGVzZSBuZXcgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSwgc2luY2UgdGhleSdyZSBiYXNpYyBuZXR3b3JrIGRldmljZXMgYW5kIHVucmVnaXN0cmF0aW9uIGxvZ2ljLCBzbyB0aGV5J3JlIGFsbCBwcmV0dHkgc3RhbmRhcmQuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSBmb2N1c2VkLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCBgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLCBpdCdzIHRoZSBseW5jaHBpbiBmb3IgdGhlIHdob2xlIHRoaW5nLiBUaGVuLCB0aGUgaW5kaXZpZHVhbCBkcml2ZXIgY29uZmlncyB3aWxsIG5lZWQgdG8gYmUgZW5hYmxlZDogYENPTkZJR19CQVJFVURQYCwgYENPTkZJR19JUFZMQU5gLCBgQ09ORklHX0lQVlRBUGAsIGFuZCBgQ09ORklHX1ZFVEhgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgYENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTGAgaW4gdGhlIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGF0LCBhbmQgZmluZCBvdXQgd2hhdCB0aGF0IG9wdGlvbiBpcyBkZXNpZ25lZCBmb3IsIGlmIHBvc3NpYmxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoYXQgb25lLlxuXG5TbyB0aGUgcGxhbjogdmVyaWZ5IGBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxgLCBpZGVudGlmeSBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIGZ1enppbmcgb24sIGFuZCB0aGUgQ09ORklHIG9wdGlvbnMgcmVxdWlyZWQgdG8gdGVzdCB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzAxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6MjY6NTEuNDA0Nzg1MjA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODcwMDc1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVCVUdfTkVUX1NNQUxMX1JUTkxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTQ5PXN0cnVjdCBuZXRfZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjI0NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0dW5yZWdfbGlzdDtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIyNDY6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjI0Ny1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0dW5yZWdfbGlzdF9uZXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0NzU9c3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0NzktXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDgwOiNpZmRlZiBDT05GSUdfREVCVUdfTkVUX1NNQUxMX1JUTkxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0ODEtdm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtOTktXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaDoxMDA6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtMTAxLXZvaWQgX19ydG5sX25ldF9sb2NrKHN0cnVjdCBuZXQgKm5ldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMTk2LSNlbmRpZlxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoxOTc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0xOTgtXFx0LyogTW92ZSB0byBhIGJldHRlciBwbGFjZSB3aGVuIHRoZSBjb25maWcgZ3VhcmQgaXMgcmVtb3ZlZC4gKi9cXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnPTIxPWNvbmZpZyBERUJVR19ORVRcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnLTI3LVxcbm5ldC9LY29uZmlnLmRlYnVnOjI4OmNvbmZpZyBERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9LY29uZmlnLmRlYnVnLTI5LVxcdGJvb2wgXFxcIkFkZCBleHRyYSBwZXItbmV0bnMgbXV0ZXggaW5zaWRlIFJUTkxcXFwiXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjAzMD1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjA5NC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2V1bnJlZ19saXN0KTtcXG5uZXQvY29yZS9kZXYuYzoxMjA5NTojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxubmV0L2NvcmUvZGV2LmMtMTIwOTYtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIzMTE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIzMTQtXFxubmV0L2NvcmUvZGV2LmM6MTIzMTU6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL2Rldi5jLTEyMzE2LVxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNldW5yZWdfbGlzdF9uZXQpKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyMzc2PXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyNDk0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7XFxubmV0L2NvcmUvZGV2LmM6MTI0OTU6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL2Rldi5jLTEyNDk2LVxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNTI1PUVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSk7XFxubmV0L2NvcmUvZGV2LmMtMTI1MjYtXFxubmV0L2NvcmUvZGV2LmM6MTI1Mjc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL2Rldi5jLTEyNTI4LXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNjM2PWludCBfX2Rldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjc3Mi1cXG5uZXQvY29yZS9kZXYuYzoxMjc3MzojaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXFxubmV0L2NvcmUvZGV2LmMtMTI3NzQtXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbW92ZV9uZXQobmV0X29sZCwgbmV0LCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTQwMz1zdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDIyLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0MjM6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjQtXFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTE4ND1FWFBPUlRfU1lNQk9MKGxvY2tkZXBfcnRubF9pc19oZWxkKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE4Ni1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxODc6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE4OC12b2lkIF9fcnRubF9uZXRfbG9jayhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03MjQ5PXZvaWQgX19pbml0IHJ0bmV0bGlua19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MjU3LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyNTg6I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyNTktXFx0cnRubF9uZXRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKFxcXCJydG5sX25ldFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNjo1My4yOTE3OTkxOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTUzNTcxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRkZXZpY2UgVW5yZWdpc3RyYXRpb24gYW5kIFBvdGVudGlhbCBJbXBhY3Qgb2YgREVCVUdfTkVUX1NNQUxMX1JUTkwqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgREVCVUdfTkVUX1NNQUxMX1JUTkxgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgbG9va2luZyBhdC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBhcmVhczogYGJhcmV1ZHBgLCBgaXB2bGFuYCwgYGlwdnRhcGAsIGB2ZXRoYCwgYW5kIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uLiBGcm9tIHRoZSBpbml0aWFsIGdsYW5jZSwgaXQgKnNlZW1zKiBmdW5jdGlvbmFsLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgdGhlIGRldGFpbHMuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2Ugc3ltYm9scyBhbmQgYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdDpcblxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRgXG4qICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0YFxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGBcbiogICBgcnRubF9uZXRfd29ya19mdW5jYFxuKiAgIGBiYXJldWRwX2RlbGxpbmtgXG4qICAgYGlwdmxhbl9saW5rX2RlbGV0ZWBcbiogICBgaXB2dGFwX2RlbGxpbmtgXG4qICAgYHZldGhfZGVsbGlua2BcbiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGBcblxuSSdtIG5vdyBjaGVja2luZyB0aGUgdmlzaWJpbGl0eSBvZiBjZXJ0YWluIGZ1bmN0aW9ucy4gV2UgYWxyZWFkeSBrbm93IHRoYXQgYF9fYmFyZXVkcF9kZWxsaW5rYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gcmVtZW1iZXIuIGBfX2lwdmxhbl9saW5rX2RlbGV0ZWAgaXMgZXhwb3J0ZWQsIGFuZCB0aGF0IGlzIGltcG9ydGFudCB0b28uIGBfX2lwdnRhcF9kZWxsaW5rYCBhbmQgYHZldGhfZGVsbGlua2AgYXJlIHN0YXRpYy4gYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAgaXMgZXhwb3J0ZWQsIHdoaWxlIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAgYW5kIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAgYXJlIGdsb2JhbC5cblxuU28sIHRvIHN1bW1hcml6ZSwgdGhlIGVzc2VudGlhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSB0aGVzZTpcblxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRgXG4qICAgYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0YFxuKiAgIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGBcbiogICBgcnRubF9uZXRfd29ya19mdW5jYFxuKiAgIGBiYXJldWRwX2RlbGxpbmtgXG4qICAgYGlwdmxhbl9saW5rX2RlbGV0ZWBcbiogICBgaXB2dGFwX2RlbGxpbmtgXG4qICAgYHZldGhfZGVsbGlua2BcbiogICBgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaGBcblxuV2UgYWxzbyBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgYERFQlVHX05FVF9TTUFMTF9SVE5MYFxuKiAgIGBCQVJFVURQYFxuKiAgIGBJUFZMQU5gXG4qICAgYElQVlRBUGBcbiogICBgVkVUSGBcblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGNvcnJlbGF0ZSB0aGVzZSBjb25maWd1cmF0aW9ucyB3aXRoIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSBob3cgdGhlc2UgYXJlIGludGVyY29ubmVjdGVkIGFuZCBob3cgdGhlIG9wdGlvbiBhZmZlY3RzIHRoZXNlIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgYW5kIGdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBrZXkgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MDAuMjQ1MzczNDAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDM2MTkzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJBUkVVRFBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yNDU9Y29uZmlnIEdFTkVWRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTktXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjA6Y29uZmlnIEJBUkVVRFBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2MS1cXHR0cmlzdGF0ZSBcXFwiQmFyZSBVRFAgRW5jYXBzdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MDIuMTg4OTk3NTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDUwNDgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVmVyaWZ5aW5nIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gVGVjaG5vbG9naWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRlbHZlIGludG8gc29tZSBjb3JlIG5ldHdvcmsgdmlydHVhbGl6YXRpb24gY29tcG9uZW50cy4gSSBuZWVkIHRvIHJlZnJlc2ggYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGdvIHRocm91Z2ggSVBWTEFOLCBJUFZUQVAsIGFuZCBWRVRILiBUaGVyZSBhcmUgc28gbWFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIHRoYXQgYSBxdWljayByZXZpZXcgaXMgYWx3YXlzIGdvb2QuIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBleGFjdCBiZWhhdmlvciBhbmQgdXNlLWNhc2VzIGZvciBlYWNoLiBIb3cgdGhleSBoYW5kbGUgTUFDIGFkZHJlc3NlcywgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGludGVyZmFjZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJvdXRpbmcgYW5kIGJyaWRnaW5nIGFyZSBhbGwgdG9wIG9mIG1pbmQuIFRpbWUgdG8gcnVuIHNvbWUgdGVzdHMsIG1heWJlIHNwaW4gdXAgYSBmZXcgY29udGFpbmVycyB0byBzaW11bGF0ZSB0cmFmZmljIGFuZCBwcm9iZSBhdCBhIGdyYW51bGFyIGxldmVsLiBXZSdsbCBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LiBJdCdzIHRpbWUgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgYW5kIGVuc3VyZSBteSBrbm93bGVkZ2UgaXMgdXAtdG8tZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNzowNS4xMzk1MDQzNTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTA5MzM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWTEFOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE5Mi1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5Mzpjb25maWcgSVBWTEFOX0wzU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMTk0LVxcdGRlcGVuZHMgb24gTkVURklMVEVSXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE5OC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5OTpjb25maWcgSVBWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQLVZMQU4gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MDYuOTIwNjAzNzYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwNjkzMzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE5MTc4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNzowOC41Mjc1Mzg5MTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODU4MzMxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVlRBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTE5OT1jb25maWcgSVBWTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIxNjpjb25maWcgSVBWVEFQXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMTctXFx0dHJpc3RhdGUgXFxcIklQLVZMQU4gYmFzZWQgdGFwIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTAuMzEzMzgyMzcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MDYwNzE4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxOTI3OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTEuOTE5NDU3Nzk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1ODcwMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDIxPWNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MzU6Y29uZmlnIFZFVEhcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTMuNzA1MzM3NDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NDQ2MTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgVW5yZWdpc3RyYXRpb24gUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERFQlVHX05FVF9TTUFMTF9SVE5MYCwgYEJBUkVVRFBgLCBgSVBWTEFOYCwgYElQVlRBUGAsIGFuZCBgVkVUSGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBkZXZpY2VzIGFyZSB1bnJlZ2lzdGVyZWQgaW4gdmFyaW91cyBzY2VuYXJpb3MuIE15IG1pbmQga2VlcHMganVtcGluZyB0byB0aGVzZSBrZXkgc3ltYm9sczogYHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25ldGAsIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldGAsIGBydG5sX25ldF93b3JrX2Z1bmNgLCBhbG9uZyB3aXRoIHRoZSBkZXZpY2Utc3BlY2lmaWMgdW5saW5raW5nIGZ1bmN0aW9uczogYGJhcmV1ZHBfZGVsbGlua2AsIGBpcHZsYW5fbGlua19kZWxldGVgLCBgaXB2dGFwX2RlbGxpbmtgLCBgdmV0aF9kZWxsaW5rYCwgYW5kIGBkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgZWFjaCBvZiB0aGVtIGNvbWVzIGludG8gcGxheS5cblxuV2FpdCBhIHNlY29uZCwgd2Fzbid0IGBpcHZsYW5fbGlua19kZWxldGVgIG1hcmtlZCBhcyBzdGF0aWMgYXQgc29tZSBwb2ludD8gQWggeWVzLCBub3cgYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBpcyBleHBvcnRlZCwgc28gSSB0aGluayBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYm90aCBoZXJlLiBTaG91bGQgSSBqdXN0IGluY2x1ZGUgYm90aCBvciByZWx5IG9uIHRoZSBleHBvcnRlZCB2ZXJzaW9uPyBBaCwgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBpbmNsdWRlIGJvdGgsIHRvIGJlIHRob3JvdWdoLiBOb3csIGxldCdzIGluY2x1ZGUgYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBhbmQgYGlwdmxhbl9saW5rX2RlbGV0ZWAuIEFjdHVhbGx5LCB3YWl0LCBgaXB2bGFuX2xpbmtfZGVsZXRlYCBpcyBpbmRlZWQgc3RhdGljIHdpdGhpbiBgaXB2bGFuX21haW4uY2AuIE9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXB2bGFuX2xpbmtfZGVsZXRlYCBpbiBgaXB2bGFuX21haW4uY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzODAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDA6Mjc6MTkuMzk5ODAxNjk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg3MzQ1MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdmxhbl9saW5rX2RlbGV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmg9MTcxPWludCBpcHZsYW5fbGlua19uZXcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuLmgtMTcyLVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW4uaDoxNzM6dm9pZCBfX2lwdmxhbl9saW5rX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbi5oLTE3NC1cXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM9NzA3PUVYUE9SVF9TWU1CT0xfR1BMKGlwdmxhbl9saW5rX25ldyk7XFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzA4LVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjcwOTp2b2lkIF9faXB2bGFuX2xpbmtfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03MTAtXFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzI3LX1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3Mjg6RVhQT1JUX1NZTUJPTChfX2lwdmxhbl9saW5rX2RlbGV0ZSk7XFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzI5LVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjczMDpzdGF0aWMgdm9pZCBpcHZsYW5fbGlua19kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03MzEte1xcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtNzM1LVxcdGlmICghaXB2bGFuLVxcdTAwM2VkeWluZylcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3MzY6XFx0XFx0X19pcHZsYW5fbGlua19kZWxldGUoZGV2X25ldChkZXYpLCBkZXYsIGhlYWQpO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTczNy1cXHRtdXRleF91bmxvY2soXFx1MDAyNmlwdmxhbi1cXHUwMDNlcG9ydC1cXHUwMDNlcG5vZGVzX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM9NzY3PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcHZsYW5fbGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03NzItXFx0Lm5ld2xpbmtcXHQ9IGlwdmxhbl9saW5rX25ldyxcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYzo3NzM6XFx0LmRlbGxpbmtcXHQ9IGlwdmxhbl9saW5rX2RlbGV0ZSxcXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy03NzQtXFx0LmdldF9saW5rX25ldCAgID0gaXB2bGFuX2dldF9saW5rX25ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jPTc4OT1zdGF0aWMgaW50IGlwdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy04NDUtI2VuZGlmXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM6ODQ2OlxcdFxcdFxcdFxcdF9faXB2bGFuX2xpbmtfZGVsZXRlKG5ldCwgaXB2bGFuLVxcdTAwM2VkZXYsIFxcdTAwMjZsc3Rfa2lsbCk7XFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtODQ3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYz0xMTI9c3RhdGljIHZvaWQgX19pcHZ0YXBfZGVsbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2dGFwLmMtMTE4LVxcdHRhcF9kZWxfcXVldWVzKFxcdTAwMjZ2bGFudGFwLVxcdTAwM2V0YXApO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYzoxMTk6XFx0X19pcHZsYW5fbGlua19kZWxldGUobmV0LCBkZXYsIGhlYWQpO1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZ0YXAuYy0xMjAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMDoyNzoyMS4xODcxNTUyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTAyMzExNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUmVjb21tZW5kYXRpb246IFdvcnRoRnV6emluZz10cnVlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgbmV0d29yayBkZXZpY2VzIGFyZSB1bnJlZ2lzdGVyZWQsIHBhcnRpY3VsYXJseSBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLiBUaGUgaW5jbHVzaW9uIG9mIGB1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRgLCBgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRgLCBgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWVfbWFueV9uZXRgLCBgcnRubF9uZXRfd29ya19mdW5jYCwgYGJhcmV1ZHBfZGVsbGlua2AsIGBfX2JhcmV1ZHBfZGVsbGlua2AsIGBpcHZsYW5fbGlua19kZWxldGVgLCBgX19pcHZsYW5fbGlua19kZWxldGVgLCBgaXB2dGFwX2RlbGxpbmtgLCBgX19pcHZ0YXBfZGVsbGlua2AsIGB2ZXRoX2RlbGxpbmtgLCBhbmQgYGRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hgIHN1Z2dlc3RzIGEgc3Vic3RhbnRpYWwgc2hpZnQgaW4gZGV2aWNlIG1hbmFnZW1lbnQuIEJvdGggYF9faXB2bGFuX2xpbmtfZGVsZXRlYCBhbmQgYGlwdmxhbl9saW5rX2RlbGV0ZWAgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGF0dGVudGlvbi5cblxuVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIChgREVCVUdfTkVUX1NNQUxMX1JUTkxgLCBgQkFSRVVEUGAsIGBJUFZMQU5gLCBgSVBWVEFQYCwgYFZFVEhgKSBjb25maXJtIHRoYXQgdGhpcyB0b3VjaGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgZGlyZWN0bHksIHdpdGggdGhlIGNoYW5nZXMgc3ByZWFkIGFjcm9zcyBgYmFyZXVkcC5jYCwgYGlwdmxhbi9pcHZsYW4uaGAsIGBpcHZsYW4vaXB2bGFuX21haW4uY2AsIGBpcHZsYW4vaXB2dGFwLmNgLCBgdmV0aC5jYCwgYG5ldGRldmljZS5oYCwgYHJ0bmV0bGluay5oYCwgYG5ldF9uYW1lc3BhY2UuaGAsIGBkZXYuY2AsIGBuZXRfbmFtZXNwYWNlLmNgLCBhbmQgYHJ0bmV0bGluay5jYC4gR29vZCwgYWxsIHRoZSByZWxldmFudCBmaWxlcyBzZWVtIHRvIGJlIGFjY291bnRlZCBmb3IgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYSBpcyBvdXIgZ3VpZGUgaGVyZS4gVGhpcyBwYXRjaCBkZWZpbml0ZWx5IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IHBlci1uZXRucyBSVE5MIGxvY2tpbmcgdXNpbmcgYERFQlVHX05FVF9TTUFMTF9SVE5MYCBhbmQgdXBkYXRlcyB0byBob3cgdmFyaW91cyB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVycyBoYW5kbGUgdW5yZWdpc3RyYXRpb24sIHN5bmNocm9uaXphdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBNeSBleHBlcmllbmNlIHNjcmVhbXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlIGludGVncmF0aW9uIG9mIFJUTkwgbG9ja2luZyBpbnRvIGV4aXN0aW5nIHVucmVnaXN0cmF0aW9uIHByb2Nlc3NlcywgZXNwZWNpYWxseSBhY3Jvc3MgbmFtZXNwYWNlcywgaXMgcmlwZSBmb3Igc3VidGxlIGVycm9ycy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGVzc2VudGlhbC4gSXQncyBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBpZGVudGlmeWluZyB0aGVzZSBjb21wbGV4IGNvbmN1cnJlbmN5IGlzc3VlcyBiZWZvcmUgdGhleSBjYXVzZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4ODEsIk91dHB1dFRva2VucyI6Mjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAwOjI3OjI5LjY4OTQ2ODk3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNTUwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX05FVF9TTUFMTF9SVE5MXCIsXG4gICAgXCJCQVJFVURQXCIsXG4gICAgXCJJUFZMQU5cIixcbiAgICBcIklQVlRBUFwiLFxuICAgIFwiVkVUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX25ldFwiLFxuICAgIFwidW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlX21hbnlfbmV0XCIsXG4gICAgXCJydG5sX25ldF93b3JrX2Z1bmNcIixcbiAgICBcImJhcmV1ZHBfZGVsbGlua1wiLFxuICAgIFwiX19iYXJldWRwX2RlbGxpbmtcIixcbiAgICBcImlwdmxhbl9saW5rX2RlbGV0ZVwiLFxuICAgIFwiX19pcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcImlwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJfX2lwdnRhcF9kZWxsaW5rXCIsXG4gICAgXCJ2ZXRoX2RlbGxpbmtcIixcbiAgICBcImRlZmF1bHRfZGV2aWNlX2V4aXRfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcywgYWRkaW5nIHBlci1uZXRucyBSVE5MIGxvY2tpbmcgc3VwcG9ydCAoQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MKS4gSXQgbW9kaWZpZXMgY29yZSBuZXRkZXZpY2UgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHNldmVyYWwgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMgKGJhcmV1ZHAsIGlwdmxhbiwgaXB2dGFwLCB2ZXRoKSB0byB1c2UgdGhlIG5ldyBsb2NraW5nIGFuZCB1bnJlZ2lzdHJhdGlvbiBBUElzLiBUaGlzIGludm9sdmVzIGNvbXBsZXggc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIGRldmljZXMsIHdoaWNoIGlzIGhpZ2hseSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19ORVRfU01BTExfUlROTFwiLFxuICAgIFwiQkFSRVVEUFwiLFxuICAgIFwiSVBWTEFOXCIsXG4gICAgXCJJUFZUQVBcIixcbiAgICBcIlZFVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9uZXRcIixcbiAgICBcInVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbmV0XCIsXG4gICAgXCJ1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZV9tYW55X25ldFwiLFxuICAgIFwicnRubF9uZXRfd29ya19mdW5jXCIsXG4gICAgXCJiYXJldWRwX2RlbGxpbmtcIixcbiAgICBcIl9fYmFyZXVkcF9kZWxsaW5rXCIsXG4gICAgXCJpcHZsYW5fbGlua19kZWxldGVcIixcbiAgICBcIl9faXB2bGFuX2xpbmtfZGVsZXRlXCIsXG4gICAgXCJpcHZ0YXBfZGVsbGlua1wiLFxuICAgIFwiX19pcHZ0YXBfZGVsbGlua1wiLFxuICAgIFwidmV0aF9kZWxsaW5rXCIsXG4gICAgXCJkZWZhdWx0X2RldmljZV9leGl0X2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIHVucmVnaXN0ZXJpbmcgbmV0d29yayBkZXZpY2VzIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMsIGFkZGluZyBwZXItbmV0bnMgUlROTCBsb2NraW5nIHN1cHBvcnQgKENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTCkuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZGV2aWNlIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyBzZXZlcmFsIHZpcnR1YWwgbmV0d29yayBkcml2ZXJzIChiYXJldWRwLCBpcHZsYW4sIGlwdnRhcCwgdmV0aCkgdG8gdXNlIHRoZSBuZXcgbG9ja2luZyBhbmQgdW5yZWdpc3RyYXRpb24gQVBJcy4gVGhpcyBpbnZvbHZlcyBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgbmV0d29yayBkZXZpY2VzLCB3aGljaCBpcyBoaWdobHkgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[1] Phase: Succeeded StartedAt: 2026-07-03 00:27:41 +0000 UTC FinishedAt: 2026-07-03 00:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-03 00:27:41 +0000 UTC FinishedAt: 2026-07-03 00:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2] Phase: Succeeded StartedAt: 2026-07-03 00:27:41 +0000 UTC FinishedAt: 2026-07-03 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN) Phase: Failed StartedAt: 2026-07-03 00:27:41 +0000 UTC FinishedAt: 2026-07-03 04:24:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-03 00:27:41 +0000 UTC FinishedAt: 2026-07-03 00:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-03 00:27:41 +0000 UTC FinishedAt: 2026-07-03 00:27:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-889591877/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-03 00:27:51 +0000 UTC FinishedAt: 2026-07-03 00:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-03 00:27:51 +0000 UTC FinishedAt: 2026-07-03 00:50:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*005bd668-24b8-44ae-95ea-7e645537b28c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-889591877/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "658ed435-5f2a-41cc-9125-7f29272d13a6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3691429611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-03 00:27:51 +0000 UTC FinishedAt: 2026-07-03 00:49:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*005bd668-24b8-44ae-95ea-7e645537b28c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-889591877/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "658ed435-5f2a-41cc-9125-7f29272d13a6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3691429611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-03 00:50:09 +0000 UTC FinishedAt: 2026-07-03 00:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-03 00:50:09 +0000 UTC FinishedAt: 2026-07-03 00:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-03 00:50:09 +0000 UTC FinishedAt: 2026-07-03 00:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-03 00:50:09 +0000 UTC FinishedAt: 2026-07-03 00:50:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-2445565984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-03 00:50:19 +0000 UTC FinishedAt: 2026-07-03 00:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-03 00:50:19 +0000 UTC FinishedAt: 2026-07-03 00:52:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*658ed435-5f2a-41cc-9125-7f29272d13a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3691429611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-03 00:52:34 +0000 UTC FinishedAt: 2026-07-03 00:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-03 00:52:34 +0000 UTC FinishedAt: 2026-07-03 00:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-03 00:52:34 +0000 UTC FinishedAt: 2026-07-03 01:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-03 00:52:34 +0000 UTC FinishedAt: 2026-07-03 01:17:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*005bd668-24b8-44ae-95ea-7e645537b28c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-2445565984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b2911566-4150-4ffc-a3b8-4b0e6a6a4525", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3118814684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-03 00:52:34 +0000 UTC FinishedAt: 2026-07-03 01:16:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*005bd668-24b8-44ae-95ea-7e645537b28c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-2445565984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b2911566-4150-4ffc-a3b8-4b0e6a6a4525", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3118814684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-03 01:17:04 +0000 UTC FinishedAt: 2026-07-03 01:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-03 01:17:04 +0000 UTC FinishedAt: 2026-07-03 01:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-03 01:17:04 +0000 UTC FinishedAt: 2026-07-03 01:19:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-03 01:17:04 +0000 UTC FinishedAt: 2026-07-03 01:19:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2911566-4150-4ffc-a3b8-4b0e6a6a4525,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3118814684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10] Phase: Failed StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 04:24:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*658ed435-5f2a-41cc-9125-7f29272d13a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2911566-4150-4ffc-a3b8-4b0e6a6a4525,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3691429611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3118814684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 01:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 01:19:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-1348431481/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-retest Phase: Failed StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 01:21:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2911566-4150-4ffc-a3b8-4b0e6a6a4525,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3691429611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3118814684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 01:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 01:19:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-2262551670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 01:19:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-03 01:19:42 +0000 UTC FinishedAt: 2026-07-03 01:19:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-03 01:20:05 +0000 UTC FinishedAt: 2026-07-03 04:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-03 01:20:05 +0000 UTC FinishedAt: 2026-07-03 04:24:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*658ed435-5f2a-41cc-9125-7f29272d13a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2911566-4150-4ffc-a3b8-4b0e6a6a4525,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3691429611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3118814684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-1348431481/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-retest[1] Phase: Failed StartedAt: 2026-07-03 01:20:05 +0000 UTC FinishedAt: 2026-07-03 01:21:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59cnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unregister_netdevice_queue_net","unregister_netdevice_many_net","unregister_netdevice_queue_many_net","rtnl_net_work_func","bareudp_dellink","__bareudp_dellink","ipvlan_link_delete","__ipvlan_link_delete","ipvtap_dellink","__ipvtap_dellink","veth_dellink","default_device_exit_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08bc5b2636afcbadc31bb17243eec094e048bd79","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_NET_SMALL_RTNL","BAREUDP","IPVLAN","IPVTAP","VETH"],"series_id":"38748afc-2bf4-4bf5-9a26-a3d7a5923f6f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["a8a0740d-fdec-4a20-9aa5-7cb955707913"]},track:KASAN)[10].run-retest[1].retest Phase: Failed StartedAt: 2026-07-03 01:20:05 +0000 UTC FinishedAt: 2026-07-03 01:21:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2911566-4150-4ffc-a3b8-4b0e6a6a4525,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3691429611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-build-action-3118814684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59cnb/series-workflow59cnb-convert-artifact-2262551670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}