Name: series-workflowjzj9s Phase: Succeeded StartedAt: 2026-08-05 07:12:48 +0000 UTC FinishedAt: 2026-08-05 11:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[0] Phase: Succeeded StartedAt: 2026-08-05 07:12:48 +0000 UTC FinishedAt: 2026-08-05 07:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 07:12:48 +0000 UTC FinishedAt: 2026-08-05 07:37:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "5f0282df-eabc-45bb-8b1a-503a4eaa8bf1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_ioctl", "nbd_add_socket", "nbd_reconnect_socket", "nbd_set_size" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2FkZF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3JlY29ubmVjdF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3NldF9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTM0ZDNkYTNkYjIzNDhjNzU1NjNlZDk1ZDliYjllYjQ5ODQ2ODM0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDc6MzY6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmY4ZjUxZGYzMWFkYTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTY2LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbiYjNDM7c3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNiAmIzQzOzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4mIzQzO1x0bGltLVx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuJiM0MztcdGxpbS1cdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbiYjNDM7XHRcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcbiYjNDM7XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXG4mIzQzO1x0XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4mIzQzO1x0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuJiM0MztcdFx0bGltLVx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbkBAIC0zNTIsMjYgJiM0MzszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0aWYgKCEobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4tXHR9IGVsc2UgaWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcbi1cdH0gZWxzZSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcbi1cdH1cbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxuLVx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXG4mIzQzO1x0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXG4mIzQzO1x0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVx1MDAzZWRpc2spIFx1MDAyNlx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKSlcbiYjNDM7XHRcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICYjNDM7MTA3MCwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4mIzQzO1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4mIzQzO1x0XHRcdG5ld19pbmRleCA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbiYjNDM7XHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1xuJiM0Mztub19mYWxsYmFjazpcbiYjNDM7XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwmIzM0Oyk7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICYjNDM7MTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmJkLVx1MDAzZXBpZCkge1xuJiM0MztcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4mIzQzO1x0XHRcdFwmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSYjMzk7cmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiAmIzQzOzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTQwMiwxMSAmIzQzOzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4mIzQzO1x0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0cmV0dXJuIDE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTQ3MSw4ICYjNDM7MTQ3MCwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfbXV0ZXhfbG9jayhcdTAwMjZuYmQtXHUwMDNlY29uZmlnX3JlZnMsXG4gXHRcdFx0XHRcdFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jaykpIHtcbiBcdFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cdTAwM2Vjb25maWc7XG4mIzQzO1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbiYjNDM7XHRcdC8qIHJlc2V0IHF1ZXVlIGxpbWl0cyB0byBkZWZhdWx0ICovXG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiYjNDM7XHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbiYjNDM7XHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0XHRpZiAobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VieXRlc2l6ZSlcbiBcdFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsXG5AQCAtMTk0MSw3ICYjNDM7MTk0NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuIFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSA2NTUzNixcbkBAIC0xOTU4LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuJiM0MztcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiAmIzQzOzIxMTIsNTggQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4mIzQzO1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiYjNDM7XHRpbnQgcmVtLCBjb3VudCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xuJiM0MztcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICYjNDM7IDFdO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuJiM0MztcdFx0XHRcdFx0XHRhdHRyLFxuJiM0MztcdFx0XHRcdFx0XHRuYmRfc29ja19wb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHRcdGluZm8tXHUwMDNlZXh0YWNrKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGNiKSB7XG4mIzQzO1x0XHRcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcbkBAIC0yMTU5LDcgJiM0MzsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZF9pbmRleF9tdXRleCk7XG4gXG4gXHRpZiAoIW5iZCkge1xuLVx0XHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7XG4mIzQzO1x0XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXHUwMDNlIDAgPyByZXQgOiAxKTtcbiBcdFx0aWYgKElTX0VSUihuYmQpKSB7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhZGQgbmV3IGRldmljZVxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcbkBAIC0yMjI2LDM2ICYjNDM7MjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07XG4tXG4tXHRcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xuIFx0XHRuYmQtXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxuQEAgLTIzNDQsNiAmIzQzOzIzNzgsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkID0gTlVMTDtcbkBAIC0yNDQwLDQwICYjNDM7MjQ3OSwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XG4tXHRcdFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0aWYgKHJldCA9PSAtRU5PU1BDKVxuLVx0XHRcdFx0XHRyZXQgPSAwO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTtcbiYjNDM7XHQvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0ID0gMDtcbiBvdXQ6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG5AQCAtMjcyNSw4ICYjNDM7MjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4mIzQzO1x0aWYgKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIFx1MDAzYyAxKVxuJiM0MztcdFx0cHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxO1xuJiM0MztcdC8qIFNldCB0byB0aGUgaW50ZW5kZWQgY29ubmVjdGlvbiBjb3VudCBzbyBuYmRfc3RhcnRfZGV2aWNlKCkgY2FuIHNraXBcbiYjNDM7XHQgKiB0aGUgcXVldWUtZnJlZXppbmcgYmxrX21xX3VwZGF0ZV9ucl9od19xdWV1ZXMoKSBjYWxsLlxuJiM0MztcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkmIzQzOyYjNDM7KVxuLVx0XHRuYmRfZGV2X2FkZChpLCAxKTtcbiYjNDM7XHRcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNzg3LDMgJiM0MzsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwmIzM0O251bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXCYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiYjNDM7bW9kdWxlX3BhcmFtKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLCBpbnQsIDA0NDQpO1xuJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLFxuJiM0MztcJiMzNDtudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfcmVjb25uZWN0X3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfc2V0X3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZC9yZWNvbm5lY3RlZCwgaG93IHF1ZXVlIGxpbWl0cyBhcmUgYXBwbGllZCwgYW5kIGhvdyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZCB2aWEgTmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMzRkM2RhM2RiMjM0OGM3NTU2M2VkOTVkOWJiOWViNDk4NDY4MzQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwNzozNjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IDhmMTA3NjJlOTBlZjcuLmY4ZjUxZGYzMWFkYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtMTY2LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjsKIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjsKJiM0MztzdGF0aWMgaW50IHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zID0gMTsKIHN0YXRpYyBpbnQgcGFydF9zaGlmdDsKIAogc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpOwpAQCAtMzMxLDYgJiM0MzszMzIsMjYgQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLAogCW5zb2NrLSZndDtzZW50ID0gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlsaW0tJmd0O2ZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7CiYjNDM7CWxpbS0mZ3Q7bWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7CiYjNDM7CWxpbS0mZ3Q7bWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfVFJJTSkKJiM0MzsJCWxpbS0mZ3Q7bWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHsKJiM0MzsJCWxpbS0mZ3Q7ZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9GVUEpCiYjNDM7CQkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1JPVEFUSU9OQUwpCiYjNDM7CQlsaW0tJmd0O2ZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUykKJiM0MzsJCWxpbS0mZ3Q7bWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CkBAIC0zNTIsMjYgJiM0MzszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSkKIAkJcmV0dXJuIDA7CiAKIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwotCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9UUklNKQotCQlsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKLQllbHNlCi0JCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKLQlpZiAoIShuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHsKLQkJbGltLmZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTsKLQl9IGVsc2UgaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX0ZVQSkgewotCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUE7Ci0JfSBlbHNlIHsKLQkJbGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFOwotCQlsaW0uZmVhdHVyZXMgJmFtcDs9IH5CTEtfRkVBVF9GVUE7Ci0JfQotCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfUk9UQVRJT05BTCkKLQkJbGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7Ci0JaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUykKLQkJbGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKLQomIzQzOwluYmRfYXBwbHlfbGltaXRzKCZhbXA7bGltLCBuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MpOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTsKLQllcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7CS8qIE5vIG5lZWQgZnJlZXplIHdpdGggMCBjYXBhY2l0eSBhbmQgd3JpdGUgY2FjaGUgZGlzYWJsZWQgKi8KJiM0MzsJaWYgKCFnZXRfY2FwYWNpdHkobmJkLSZndDtkaXNrKSAmYW1wOyZhbXA7ICFibGtfcXVldWVfd3JpdGVfY2FjaGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSkpCiYjNDM7CQllcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0xMDYxLDQwICYjNDM7MTA3MCwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KQogCWludCBuZXdfaW5kZXggPSAtMTsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLSZndDtzb2Nrc1tpbmRleF07CiAJaW50IGZhbGxiYWNrID0gbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4OwomIzQzOwlpbnQgaTsKIAogCWlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCXJldHVybiBuZXdfaW5kZXg7CiAKLQlpZiAoY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMgJmx0Oz0gMSkgewotCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC0mZ3Q7ZGlzayksCi0JCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCXJldHVybiBuZXdfaW5kZXg7Ci0JfQomIzQzOwlpZiAoY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMgJmx0Oz0gMSkKJiM0MzsJCWdvdG8gbm9fZmFsbGJhY2s7CiAKIAlpZiAoZmFsbGJhY2sgJmd0Oz0gMCAmYW1wOyZhbXA7IGZhbGxiYWNrICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMgJmFtcDsmYW1wOwogCSAgICAhY29uZmlnLSZndDtzb2Nrc1tmYWxsYmFja10tJmd0O2RlYWQpCiAJCXJldHVybiBmYWxsYmFjazsKIAotCWlmIChuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXggJmx0OyAwIHx8Ci0JICAgIG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmZ3Q7PSBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyB8fAotCSAgICBjb25maWctJmd0O3NvY2tzW25zb2NrLSZndDtmYWxsYmFja19pbmRleF0tJmd0O2RlYWQpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9uczsgaSYjNDM7JiM0MzspIHsKLQkJCWlmIChpID09IGluZGV4KQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7Ci0JCQkJbmV3X2luZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQluc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7Ci0JCWlmIChuZXdfaW5kZXggJmx0OyAwKSB7Ci0JCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC0mZ3Q7ZGlzayksCi0JCQkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwotCQkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGkgIT0gaW5kZXggJmFtcDsmYW1wOyAhY29uZmlnLSZndDtzb2Nrc1tpXS0mZ3Q7ZGVhZCkgewomIzQzOwkJCW5ld19pbmRleCA9IGk7CiYjNDM7CQkJYnJlYWs7CiAJCX0KIAl9Ci0JbmV3X2luZGV4ID0gbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4OwomIzQzOwluc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7CiYjNDM7CWlmIChuZXdfaW5kZXggJmd0Oz0gMCkKJiM0MzsJCXJldHVybiBuZXdfaW5kZXg7CiYjNDM7CiYjNDM7bm9fZmFsbGJhY2s6CiYjNDM7CWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKIAlyZXR1cm4gbmV3X2luZGV4OwogfQogCkBAIC0xMjgxLDIzICYjNDM7MTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJc3RydWN0IG5iZF9zb2NrICoqc29ja3M7CiAJc3RydWN0IG5iZF9zb2NrICpuc29jazsKLQl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiAJaW50IGVycjsKIAogCS8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqLwogCWlmIChhcmcgJmd0OyBJTlRfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKG5iZC0mZ3Q7cGlkKSB7CiYjNDM7CQlkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC0mZ3Q7ZGlzayksCiYjNDM7CQkJJiMzNDtDYW5ub3QgYWRkIHNvY2tldCB0byBhIHJ1bm5pbmcgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiAJc29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCAmYW1wO2Vycik7CiAJaWYgKCFzb2NrKQogCQlyZXR1cm4gZXJyOwogCW5iZF9yZWNsYXNzaWZ5X3NvY2tldChzb2NrKTsKIAotCS8qCi0JICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJiMzOTtyZQotCSAqIHJlYWxsb2NhdGluZyB0aGUgLSZndDtzb2NrcyBhcnJheS4KLQkgKi8KLQltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSk7Ci0KIAlpZiAoIW5ldGxpbmsgJmFtcDsmYW1wOyAhbmJkLSZndDt0YXNrX3NldHVwICZhbXA7JmFtcDsKIAkgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgJmFtcDtjb25maWctJmd0O3J1bnRpbWVfZmxhZ3MpKQogCQluYmQtJmd0O3Rhc2tfc2V0dXAgPSBjdXJyZW50OwpAQCAtMTMzNywxMiAmIzQzOzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZywKIAlJTklUX1dPUksoJmFtcDtuc29jay0mZ3Q7d29yaywgbmJkX3BlbmRpbmdfY21kX3dvcmspOwogCXNvY2tzW2NvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jazsKIAlhdG9taWNfaW5jKCZhbXA7Y29uZmlnLSZndDtsaXZlX2Nvbm5lY3Rpb25zKTsKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiAKIHB1dF9zb2NrZXQ6Ci0JYmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsIG1lbWZsYWdzKTsKIAlzb2NrZmRfcHV0KHNvY2spOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNDAyLDExICYjNDM7MTQwMCwxMiBAQCBzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCiAJCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwogCQl3YWtlX3VwKCZhbXA7Y29uZmlnLSZndDtjb25uX3dhaXQpOwomIzQzOwkJZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCAmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxuJiMzNDspOwogCQlyZXR1cm4gMDsKIAl9CiAJc29ja2ZkX3B1dChzb2NrKTsKIAlrZnJlZShhcmdzKTsKLQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCkBAIC0xNDcxLDggJiM0MzsxNDcwLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfbXV0ZXhfbG9jaygmYW1wO25iZC0mZ3Q7Y29uZmlnX3JlZnMsCiAJCQkJCSZhbXA7bmJkLSZndDtjb25maWdfbG9jaykpIHsKIAkJc3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC0mZ3Q7Y29uZmlnOwomIzQzOwkJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJCW5iZF9kZXZfZGJnX2Nsb3NlKG5iZCk7CiAJCWludmFsaWRhdGVfZGlzayhuYmQtJmd0O2Rpc2spOwomIzQzOwkJLyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi8KJiM0MzsJCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSk7CiYjNDM7CQluYmRfYXBwbHlfbGltaXRzKCZhbXA7bGltLCAwKTsKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKIAkJaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtieXRlc2l6ZSkKIAkJCWtvYmplY3RfdWV2ZW50KCZhbXA7bmJkX3RvX2RldihuYmQpLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSwKQEAgLTE5NDEsNyAmIzQzOzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHsKIAkudGltZW91dAk9IG5iZF94bWl0X3RpbWVvdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpCiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLAomIzQzOwkJCQkgICAgICAgaW50IG5yX2h3X3F1ZXVlcykKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHsKIAkJLm1heF9od19zZWN0b3JzCQk9IDY1NTM2LApAQCAtMTk1OCw3ICYjNDM7MTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcykKIAkJZ290byBvdXQ7CiAKIAluYmQtJmd0O3RhZ19zZXQub3BzID0gJmFtcDtuYmRfbXFfb3BzOwotCW5iZC0mZ3Q7dGFnX3NldC5ucl9od19xdWV1ZXMgPSAxOwomIzQzOwluYmQtJmd0O3RhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzOwogCW5iZC0mZ3Q7dGFnX3NldC5xdWV1ZV9kZXB0aCA9IDEyODsKIAluYmQtJmd0O3RhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFOwogCW5iZC0mZ3Q7dGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7CkBAIC0yMTA3LDYgJiM0MzsyMTEyLDU4IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogV2FsayB0aGUgTkJEX0FUVFJfU09DS0VUUyBuZXN0ZWQgbGlzdCBjYW4gY2FsbCBAY2IgZm9yIGVhY2ggc29ja2V0IGZkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZmRzIHdhbGtlZCwgb3IgYSBuZWdhdGl2ZSBlcnJuby4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAomIzQzOwkJaW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksCiYjNDM7CQlzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqYXR0cjsKJiM0MzsJaW50IHJlbSwgY291bnQgPSAwOwomIzQzOwomIzQzOwlpZiAoIWluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkgewomIzQzOwkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICYjNDM7IDFdOwomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCWlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCiYjNDM7CQkJCQkJYXR0ciwKJiM0MzsJCQkJCQluYmRfc29ja19wb2xpY3ksCiYjNDM7CQkJCQkJaW5mby0mZ3Q7ZXh0YWNrKSkgewomIzQzOwkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWNvdW50JiM0MzsmIzQzOzsKJiM0MzsJCWlmIChjYikgewomIzQzOwkJCXJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTsKJiM0MzsJCQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQkJcmV0dXJuIGNvdW50OwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7CkBAIC0yMTU5LDcgJiM0MzsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCW11dGV4X3VubG9jaygmYW1wO25iZF9pbmRleF9tdXRleCk7CiAKIAlpZiAoIW5iZCkgewotCQluYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7CiYjNDM7CQlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJbmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCAmZ3Q7IDAgPyByZXQgOiAxKTsKIAkJaWYgKElTX0VSUihuYmQpKSB7CiAJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcbiYjMzQ7KTsKIAkJCXJldHVybiBQVFJfRVJSKG5iZCk7CkBAIC0yMjI2LDM2ICYjNDM7MjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAJfQogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7Ci0JCXN0cnVjdCBubGF0dHIgKmF0dHI7Ci0JCWludCByZW0sIGZkOwotCi0JCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sCi0JCQkJICAgIHJlbSkgewotCQkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTsKLQotCQkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKLQkJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCi0JCQkJCQkJICBhdHRyLAotCQkJCQkJCSAgbmJkX3NvY2tfcG9saWN5LAotCQkJCQkJCSAgaW5mby0mZ3Q7ZXh0YWNrKTsKLQkJCWlmIChyZXQgIT0gMCkgewotCQkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQotCQkJCWNvbnRpbnVlOwotCQkJZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7Ci0JCQlyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQl9CiYjNDM7CXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiAKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkgewogCQluYmQtJmd0O2JhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sCkBAIC0yMzQ0LDYgJiM0MzsyMzc4LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMOwpAQCAtMjQ0MCw0MCAmIzQzOzI0NzksMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAJfQogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7Ci0JCXN0cnVjdCBubGF0dHIgKmF0dHI7Ci0JCWludCByZW0sIGZkOwotCi0JCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sCi0JCQkJICAgIHJlbSkgewotCQkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTsKLQotCQkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKLQkJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCi0JCQkJCQkJICBhdHRyLAotCQkJCQkJCSAgbmJkX3NvY2tfcG9saWN5LAotCQkJCQkJCSAgaW5mby0mZ3Q7ZXh0YWNrKTsKLQkJCWlmIChyZXQgIT0gMCkgewotCQkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQotCQkJCWNvbnRpbnVlOwotCQkJZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7Ci0JCQlyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlpZiAocmV0ID09IC1FTk9TUEMpCi0JCQkJCXJldCA9IDA7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksICYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XG4mIzM0Oyk7Ci0JCX0KLQl9CiYjNDM7CXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTsKJiM0MzsJLyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi8KJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJcmV0ID0gMDsKIG91dDoKIAltdXRleF91bmxvY2soJmFtcDtuYmQtJmd0O2NvbmZpZ19sb2NrKTsKIAluYmRfY29uZmlnX3B1dChuYmQpOwpAQCAtMjcyNSw4ICYjNDM7MjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKQogCX0KIAluYmRfZGJnX2luaXQoKTsKIAomIzQzOwlpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgJmx0OyAxKQomIzQzOwkJcHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxOwomIzQzOwkvKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwCiYjNDM7CSAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBuYmRzX21heDsgaSYjNDM7JiM0MzspCi0JCW5iZF9kZXZfYWRkKGksIDEpOwomIzQzOwkJbmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzg3LDMgJiM0MzsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KSYjMzQ7KTsKIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsICYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpJiMzNDspOwomIzQzO21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLAomIzQzOyYjMzQ7bnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKSYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQkQgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgTkJEIGRyaXZlciBwYXRjaC4gRnJvbSB3aGF0IEkgc2VlLCB3ZSYjMzk7dmUgZ290IGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBUaGlzIGlzIGZvY3VzZWQgb24gZW5oYW5jaW5nIGhvdyB0aGUgTkJEIGRyaXZlciBtYW5hZ2VzIGl0cyBzb2NrZXRzLCBxdWV1ZSBsaW1pdHMsIGFuZCBjb25uZWN0aW9ucy4gVGhlIGtleSBjaGFuZ2VzIGFyZSByZWFsbHkgYXJvdW5kIGltcHJvdmluZyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBvZiB0aGUgTkJEIGRldmljZXMuCgpGaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgbmJkX2FwcGx5X2xpbWl0c2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGdhaW5pbmcgbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgdGhlIGJsb2NrIHF1ZXVlIGxpbWl0cy4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGBuYmRfc2V0X3NpemVgIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhpcyBuZXcgZnVuY3Rpb24sIHN1Z2dlc3RpbmcgdGhhdCB3ZSYjMzk7cmUgdGlnaHRlbmluZyBob3cgc2l6ZSBjaGFuZ2VzIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBpbnRlcnR3aW5lZC4gVGhlIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBgZmluZF9mYWxsYmFja2AgbG9naWMgaXMgYWx3YXlzIHdlbGNvbWUg4oCTIGNsZWFuZXIgY29kZSBpcyBsZXNzIHByb25lIHRvIGJ1Z3MuCgpOb3csIEkgZmluZCB0aGUgY2hhbmdlcyBpbiBgbmJkX2FkZF9zb2NrZXRgIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGNoZWNrIGZvciBgbmJkLSZndDtwaWRgIHRvIHByZXZlbnQgYWRkaW5nIHNvY2tldHMgdG8gYSBydW5uaW5nIGRldmljZSBpcyBjcnVjaWFsIGZvciByb2J1c3RuZXNzLiBUaGUgcmVtb3ZhbCBvZiBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgYW5kIGBibGtfbXFfdW5mcmVlemVfcXVldWVgIHN1Z2dlc3RzIHdlJiMzOTtyZSBzdHJlYW1saW5pbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAsIG1heWJlIGF2b2lkaW5nIHNvbWUgYmxvY2tpbmcgb3BlcmF0aW9ucy4gYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCByZXR1cm5pbmcgMSBvbiBzdWNjZXNzIChpbnN0ZWFkIG9mIGAtRU5PU1BDYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSBhbmQgZ29vZCB0byBzZWUuIFRoZSBkZWZhdWx0IHF1ZXVlIGxpbWl0cyByZXNldCBpbiBgbmJkX2NvbmZpZ19wdXRgIGlzIGFsc28gc3RhbmRhcmQsIGVuc3VyaW5nIGEgcHJlZGljdGFibGUgc3RhdGUuIFRoZSBhcmd1bWVudCBjaGFuZ2UgdG8gYG5iZF9kZXZfYWRkYCAodGFraW5nIGBucl9od19xdWV1ZXNgKSBpcyBmaW5lLCBhbmQgZ29vZCB0byBzZWUgbW9yZSBtb2Rlcm4gaGFyZHdhcmUgc3VwcG9ydGVkLgoKV2UgYWxzbyBoYXZlIHRoZXNlIG5ldyBOZXRsaW5rLXJlbGF0ZWQgZnVuY3Rpb25zLCBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gVGhpcyBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBzaGlmdCB0b3dhcmRzIGNvbmZpZ3VyaW5nIE5CRCBkZXZpY2VzIHZpYSBOZXRsaW5rLCB3aGljaCBpcyBleGNlbGxlbnQgZm9yIGF1dG9tYXRpb24gYW5kIGR5bmFtaWMgY29uZmlndXJhdGlvbi4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgcHJlX2RlZmluZWRfY29ubmVjdGlvbnNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgYWxzbyBhIGdvb2QgYWRkaXRpb24uCgpGcm9tIGEgdmlydHVhbGl6ZWQgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYWxsIHRvdGFsbHkgdGVzdGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyByZWFzc3VyaW5nLiBQbHVzLCBnaXZlbiB0aGUgY2hhbmdlcywgaXQgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZXNlIGNvbm5lY3Rpb25zLgoKU28sIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfQkxLX0RFVl9OQkRgLiBHb29kLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhhdC4gQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2ggdGhhdCBlbmhhbmNlcyB0aGUgTkJEIGRyaXZlciYjMzk7cyBjb25maWd1cmFiaWxpdHksIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBvdmVyYWxsIHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSBmb3IgQkxLX0RFVl9OQkQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX05CRGAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHdoYXQgbWFrZXMgdGhpcyBibG9jayBkZXZpY2UgdGljay4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdXBzdHJlYW0gaW1wbGljYXRpb25zLCB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGltcGFjdC4gV2UmIzM5O3JlIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzaW1wbGUgYnVpbGQgZmxhZzsgd2UmIzM5O3JlIGludmVzdGlnYXRpbmcgYSBwaWVjZSBvZiB0aGUga2VybmVsIHRoYXQgaW50ZXJhY3RzIHdpdGggc3RvcmFnZSwgbmV0d29ya2luZywgYW5kIHBvdGVudGlhbGx5IHVzZXItc3BhY2UgdG9vbHMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IG5ldHdvcmsgcHJvdG9jb2xzLCBlbmNyeXB0aW9uIG1vZHVsZXMgKGlmIGFwcGxpY2FibGUpLCB1bmRlcmx5aW5nIGJsb2NrIGxheWVyIGNvbXBvbmVudHMsIGFuZCBhbnkgdXNlci1zcGFjZSBoZWxwZXJzIG9yIGxpYnJhcmllcy4gVGhlIGdvYWwgaXNuJiMzOTt0IGp1c3QgdG8gc2VlICp3aGF0KiBkZXBlbmRzIG9uIGl0LCBidXQgYWxzbyB0byB1bmRlcnN0YW5kIHRoZSAqc3RyZW5ndGgqIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjaXJjdWxhciByZWZlcmVuY2VzLiBBcmUgd2UgbG9va2luZyBhdCBkaXJlY3QsIGhhcmQgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhlcmUgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGF0IHBsYXk/IEEgZ29vZCB1bmRlcnN0YW5kaW5nIGhlcmUgaGVscHMgdG8gcGxhbiBmb3IgcG90ZW50aWFsIHN5c3RlbS1sZXZlbCBjaGFuZ2VzLCBpbmNsdWRpbmcgdGhlIGltcGFjdCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1vZHVsZSBsb2FkaW5nLCBhbmQgdGhlIGJvb3QgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2VzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz02PW1lbnVjb25maWcgQkxLX0RFVlxuZHJpdmVycy9ibG9jay9LY29uZmlnLTctXHRib29sIFwmIzM0O0Jsb2NrIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBCTE9DS1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjI9Y29uZmlnIEJMS19ERVZfRkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O05vcm1hbCBmbG9wcHkgZGlzayBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIEFSQ0hfTUFZX0hBVkVfUENfRkRDXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTM3PWNvbmZpZyBCTEtfREVWX0ZEX1JBV0NNRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciByYXcgZmxvcHB5IGRpc2sgY29tbWFuZHMgKERFUFJFQ0FURUQpXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Mzk6XHRkZXBlbmRzIG9uIEJMS19ERVZfRkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9NTM9Y29uZmlnIEFNSUdBX0ZMT1BQWVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgZmxvcHB5IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gQU1JR0FcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy01Ni1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZz01Nz1jb25maWcgQVRBUklfRkxPUFBZXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtBdGFyaSBmbG9wcHkgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjU5Olx0ZGVwZW5kcyBvbiBBVEFSSVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTYwLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTYxPWNvbmZpZyBNQUNfRkxPUFBZXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBQb3dlck1hYyBmbG9wcHlcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2MzpcdGRlcGVuZHMgb24gUFBDX1BNQUMgXHUwMDI2XHUwMDI2ICFQUENfUE1BQzY0XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjQtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTY4PWNvbmZpZyBCTEtfREVWX1NXSU1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02OS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFNXSU0gTWFjaW50b3NoIGZsb3BweVwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBNNjhLIFx1MDAyNlx1MDAyNiBNQUMgXHUwMDI2XHUwMDI2ICFISUdITUVNXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNzEtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTc1PWNvbmZpZyBBTUlHQV9aMlJBTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTc2LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Nzc6XHRkZXBlbmRzIG9uIFpPUlJPXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNzgtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTg2PWNvbmZpZyBONjRDQVJUXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctODctXHRib29sIFwmIzM0O042NCBjYXJ0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo4ODpcdGRlcGVuZHMgb24gTUFDSF9OSU5URU5ETzY0XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctODktXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTk1PWNvbmZpZyBHRFJPTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk2LVx0dHJpc3RhdGUgXCYjMzQ7U0VHQSBEcmVhbWNhc3QgR0QtUk9NIGRyaXZlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk4LVx0c2VsZWN0IENEUk9NXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTExMT1jb25maWcgQkxLX0RFVl9VQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xMTItXHRib29sIFwmIzM0O1ZpcnR1YWwgYmxvY2sgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTEzOlx0ZGVwZW5kcyBvbiBVTUxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xMTQtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTEyMD1jb25maWcgQkxLX0RFVl9VQkRfU1lOQ1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTEyMS1cdGJvb2wgXCYjMzQ7QWx3YXlzIGRvIHN5bmNocm9ub3VzIGRpc2sgSU8gZm9yIFVCRFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjEyMjpcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTE3OT1jb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXHRkZWZhdWx0IDhcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk2PWNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTg6XHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5OS1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjQzPWNvbmZpZyBCTEtfREVWX1JBTV9DT1VOVFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNDUtXHRkZWZhdWx0IFwmIzM0OzE2XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjQ2Olx0ZGVwZW5kcyBvbiBCTEtfREVWX1JBTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI0Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjUyPWNvbmZpZyBCTEtfREVWX1JBTV9TSVpFXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjUzLVx0aW50IFwmIzM0O0RlZmF1bHQgUkFNIGRpc2sgc2l6ZSAoa2J5dGVzKVwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI1NDpcdGRlcGVuZHMgb24gQkxLX0RFVl9SQU1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNTUtXHRkZWZhdWx0IFwmIzM0OzQwOTZcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjYwPWNvbmZpZyBBVEFfT1ZFUl9FVEhcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNjEtXHR0cmlzdGF0ZSBcJiMzNDtBVEEgb3ZlciBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjYyOlx0ZGVwZW5kcyBvbiBORVRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNjMtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI2Nz1jb25maWcgU1VOVkRDXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjY4LVx0dHJpc3RhdGUgXCYjMzQ7U3VuIFZpcnR1YWwgRGlzayBDbGllbnQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI2OTpcdGRlcGVuZHMgb24gU1VOX0xET01TXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjcwLVx0aGVscFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0yNzY9Y29uZmlnIFhFTl9CTEtERVZfRlJPTlRFTkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzctXHR0cmlzdGF0ZSBcJiMzNDtYZW4gdmlydHVhbCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI3ODpcdGRlcGVuZHMgb24gWEVOXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjc5LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI4Nj1jb25maWcgWEVOX0JMS0RFVl9CQUNLRU5EXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjg3LVx0dHJpc3RhdGUgXCYjMzQ7WGVuIGJsb2NrLWRldmljZSBiYWNrZW5kIGRyaXZlclwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI4ODpcdGRlcGVuZHMgb24gWEVOX0JBQ0tFTkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yODktXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTMwNz1jb25maWcgVklSVElPX0JMS1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTMwOC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnRpbyBibG9jayBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMDk6XHRkZXBlbmRzIG9uIFZJUlRJT1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTMxMC1cdHNlbGVjdCBTR19QT09MXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtSYWRvcyBibG9jayBkZXZpY2UgKFJCRClcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMTc6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IEJMT0NLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzE4LVx0c2VsZWN0IENFUEhfTElCXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTMzNz1jb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzM5Olx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNDAtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1ODpcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1OS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyIChgQkxLX0RFVl9OQkRgKS4gSXQgcmVsaWVzIG9uIGBORVRgIGFuZCBgQkxPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3QgYXJlYXMgZm9yIGZ1enppbmcsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIG5hcnJvd2VkIGl0IGRvd24uIFRoaXMgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgdGhlIE5CRCBjb2RlOiBgbmJkX2FwcGx5X2xpbWl0c2AsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfcmVjb25uZWN0X3NvY2tldGAsIGBuYmRfY29uZmlnX3B1dGAsIGBuYmRfZGV2X2FkZGAsIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLgoKQmFzZWQgb24gdGhvc2UgZnVuY3Rpb25zLCBteSBpbml0aWFsIHRhcmdldCBmb2N1cyBpcyBnb2luZyB0byBiZSBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfcmVjb25uZWN0X3NvY2tldGAsIGFuZCBgbmJkX3NldF9zaXplYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb25maWd1cmF0aW9uIHBvaW50cywgdGhlcmVmb3JlIGdvb2QgcGxhY2VzIGZvciBmaW5kaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpXYWl0IGEgc2Vjb25k4oCmIGFyZW4mIzM5O3QgYG5iZF9hZGRfc29ja2V0YCBhbmQgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBzdGF0aWMgZnVuY3Rpb25zPyBUaGF0IGNvdWxkIGFmZmVjdCB0aGUgZnV6emluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xMjc0PXN0YXRpYyBpbmxpbmUgdm9pZCBuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaykge31cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNzYtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNzc6c3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3OC1cdFx0XHQgIGJvb2wgbmV0bGluaylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2MzQ9c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0Ni1cdGNhc2UgTkJEX1NFVF9TT0NLOlxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjQ3Olx0XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBhcmcsIGZhbHNlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjE2Mj1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xuZHJpdmVycy9ibG9jay9uYmQuYzoyMTY0Olx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBOQkQgS2VybmVsIE1vZHVsZSBFbnRyeSBQb2ludHMqKgoKQWxyaWdodCwgdGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBOQkQga2VybmVsIGVudHJ5IHBvaW50cyBhcmUgc3RhdGljLCBhbmQgdGhlIGFuc3dlciBpcyB5ZXMsIHRoZXkgc2VlbSB0byBiZS4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgaWRlbnRpZnkgdGhvc2Uga2V5IGVudHJ5IHBvaW50cy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAgKG9yIHBvc3NpYmx5IGBfX25iZF9pb2N0bGAsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQpIGFyZSB0aGUgcHJpbWFyeSBzdXNwZWN0cy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBjbG9zZWx5LCBmaWd1cmUgb3V0IHRoZWlyIHJvbGVzIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vZHVsZSYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0yMTIwPXN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2My17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTY3OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyOTA6XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjkxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5OC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk5Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9jb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTAwLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgSXRzIFBvdGVudGlhbCBVc2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuYmRfZ2VubF9jb25uZWN0YCBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3Mgc3RhdGljIHRvby4gQnV0IGhvbGQgb24sIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBuZXRsaW5rIGNhbGxiYWNrLCBpc24mIzM5O3QgaXQ/IFRoYXQgY2hhbmdlcyB0aGluZ3MuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIGxldmVyYWdlIGBuYmRfZ2VubF9jb25uZWN0YCB3aXRoaW4gYEZvY3VzU3ltYm9sc2AuCgpXYWl0IGEgbWludXRlLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyBldmVuIGJlIHVzZWQgaW4gYEZvY3VzU3ltYm9sc2A/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGd1aWRhbmNlLiBBaCwgcmlnaHQsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogdGhleSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGUgcnVsZSBpcyB0byBhdm9pZCBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBsZWFkaW5nIHRvIGEgbG9zcyBvZiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQuLi4gbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4uLiBib3RoIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgcmVnaXN0ZXJlZCBhcyBjYWxsYmFja3Mgd2l0aGluIGBuYmRfY29ubmVjdF9nZW5sX29wc2AuIFNpbmNlIHRoZXkgYXJlIGNhbGxiYWNrcywgdGhleSBhcmUgKm5vdCogaW5saW5lZCBhbmQgZG8gaW5kZWVkIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCBtYWtlcyBhbGwgdGhlIGRpZmZlcmVuY2UhCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMgdG8gY29uc2lkZXIgYmVmb3JlIHdlIGZpbmFsaXplIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjM4MT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzODY6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzg3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwOC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA5Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxMC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzA0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhbmQgYSBib2xkZWQgaGVhZGVyOgoKKipEaXZpbmcgaW50byB0aGUgYG5iZF9pb2N0bGAgUmFiYml0IEhvbGUqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhpcyBhZ2FpbiwgYW5kIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogV2hhdCBhYm91dCBgbmJkX2lvY3RsYD8gSXQmIzM5O3MgdGhlIGx5bmNocGluLCBpc24mIzM5O3QgaXQ/IFRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGFueSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIE5CRCBzdGFjay4gSXTigJlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJZiB3ZSBhcmUgdHJ5aW5nIHRvIHJlc29sdmUgc29tZSBpc3N1ZSwgb3Igb3B0aW1pemUgdGhpbmdzLCB0aGVuIHRoZSBgaW9jdGxgIGNhbGxzIGFyZSB0aGUgZmlyc3QgdGhpbmcgdGhhdCByZXF1aXJlIGluc3BlY3Rpb24uIEl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHZhcmlvdXMgYWNjZXNzIGlzc3Vlcy4gQW5kIGFzIGFueSBOQkQgZXhwZXJ0IGtub3dzLCBpdCBjYW4gYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uIGFuZCBzdWJ0bGUgYnVncyBpZiBub3QgaW1wbGVtZW50ZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBJdOKAmXMgdGhlIGdhdGV3YXksIHRoZSBjb21tYW5kIGNlbnRlciwgdGhl4oCmIHdlbGwsIHlvdSBnZXQgdGhlIGlkZWEuIFdpdGhvdXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMsIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbnRlcmZhY2UsIHdlJiMzOTtyZSBmbHlpbmcgYmxpbmQsIHRydWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTYyND1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzNDpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgyLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMy1cdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDQ6XHRcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDUtXHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMi1cdC5yZWxlYXNlID1cdG5iZF9yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOlx0LmlvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNDpcdC5jb21wYXRfaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVx0LmZyZWVfZGlzayA9XHRuYmRfZnJlZV9kaXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBUEkgRW50cnlwb2ludCBGdW5jdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgbmJkX2lvY3RsYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIEkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2YgaXQgYWxvbmcgd2l0aCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgX19uYmRfaW9jdGxgIGJlY2F1c2UgdGhleSBhcmUgYWxsIHN0YXRpYyB0b28uIE5vdywgdGhlIGluc3RydWN0aW9ucyBoZXJlIHNwZWNpZnkgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFNpbmNlIHRoZXkgYXJlIGFsbCBzdGF0aWMsIEkgd2lsbCBoYXZlIHRvIGRlZmF1bHQgdG8gdGhlc2UgY2FsbGJhY2tzLiBOb3cgbGV0JiMzOTtzIGNoZWNrIGBuYmRfYXBwbHlfbGltaXRzYC4gQWgsIGl0JiMzOTtzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGlubGluZWQgdG9vLiBIbW0sIGBuYmRfc2V0X3NpemVgIGlzIGFsc28gc3RhdGljLiBBbmQgc28gaXMgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYEJMS19ERVZfTkJEYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCB0aGFua2Z1bGx5IGl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBCTE9DS2AuIEFscmlnaHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBTbywgSSB3aWxsIGFkZCBgQkxLX0RFVl9OQkRgIHRvIGBFbmFibGVDb25maWdzYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgZHJpdmVyczoKCioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyJiMzOTtzIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgb2YgdGhlIE5CRCBkcml2ZXIuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGVyZSwgc3BlY2lmaWNhbGx5IGAjaWZkZWZgcy4gVGhvc2UgdGhpbmdzIGFsd2F5cyB3YXJyYW50IGEgY2xvc2VyIGxvb2suIFRoZXkgdXN1YWxseSBpbmRpY2F0ZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCBmZWF0dXJlIGZsYWdzLCBvciwgd29yc3QtY2FzZSBzY2VuYXJpbywgY3J1ZnQgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgaW50cm9kdWNpbmcgY29tcGxleGl0eSBvciBwb3RlbnRpYWwgYnVncyB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBjb2RlYmFzZS4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgc2NhbiB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbmFsIGJyYW5jaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTIxMz1zdGF0aWMgc3RydWN0IHNvY2tldCAqbmJkX2dldF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDE6I2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDItc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuYmRfa2V5WzNdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBOQkQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBmb3IgTkJELiBJdCBsb29rcyBsaWtlIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGlzIGBCTEtfREVWX05CRGAsIG5vdGhpbmcgbW9yZSBzcGVjaWZpYyB0aGFuIHRoYXQuIE15IGZvY3VzLCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGFzaywgbmVlZHMgdG8gYmUgYXMgY29uY2lzZSBhcyBwb3NzaWJsZSwgc28gdGhhdCBpcyBrZXkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsLiBJJiMzOTt2ZSBpbml0aWFsbHkgZmxhZ2dlZCB0aGVzZSBhcyBwcmltYXJ5IHRhcmdldHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9pb2N0bGAsIGBfX25iZF9pb2N0bGAsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfcmVjb25uZWN0X3NvY2tldGAsIGFuZCBgbmJkX3NldF9zaXplYC4KClRoaW5raW5nIGFib3V0IHRoZSBjYWxsIGZsb3csIGBuYmRfYWRkX3NvY2tldGAgYW5kIGBuYmRfcmVjb25uZWN0X3NvY2tldGAgYXJlIGNhbGxlZCB0aHJvdWdoIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCB2aWEgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AuIGBuYmRfc2V0X3NpemVgIGlzIGNhbGxlZCB2aWEgYG5iZF9pb2N0bGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YC9gbmJkX2dlbmxfcmVjb25maWd1cmVgLiBTbywgdGhlc2Ugd291bGQgc2VlbSB0byBiZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuCgpIb3dldmVyLCBhIHF1aWNrIHNlY29uZCB0aG91Z2h0LCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGxvb2sgbGlrZSBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW5saW5pbmcuIFRoZXkgYXJlIHBhc3NlZCBhcyBjYWxsYmFja3MgdG8gYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgdXNpbmcgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgYW5kIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAsIHNvIEkgbWlnaHQgbmVlZCB0byBkaWcgaW50byB0aGUgYWN0dWFsIHN0cnVjdHVyZSBvZiB0aGVzZSBjYWxsYmFja3MuIEluZGVlZCwgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgY2FsbHMgYG5iZF9hZGRfc29ja2V0YC4gVGhlIHNhbWUgbXVzdCBiZSB0cnVlIG9mIHRoZSByZWNvbm5lY3QuCgpUbyBtYWtlIHRoaW5ncyBjbGVhbiwgbGV0IG1lIHJlZHVjZSB0aGUgbGlzdCwgdG8gY29uc2lkZXIgb25seSB0aGUgY29yZSBlbnRyeSBwb2ludHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9pb2N0bGAsIGBuYmRfYWRkX3NvY2tldGAsIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLgoKSSYjMzk7bGwgYWxzbyB0YWtlIGEgbG9vayBhdCBgbmJkX2Rldl9hZGRgIGFzIHBhcnQgb2YgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2Rldl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NDg6c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTQ5LVx0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMTY3PXN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjIyMi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjIyMzpcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjI0LVx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2ODk9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDM6XHRcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc0NC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHRha2Ugb24gdGhpcy4KCioqSW50ZXJuYWwgQ2hlY2tsaXN0IGZvciBOQkQgTW9kdWxlIFJldmlldyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgbmJkX2Rldl9hZGRgIGlzIGFsc28gc3RhdGljLiBNYWtlcyBzZW5zZSBmb3IgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIG1vZHVsZSwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgaG93IGl0JiMzOTtzIGNhbGxlZC4KClRoZW4sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgcGllY2VzIGludm9sdmVkIGluIGNvbm5lY3Rpb24sIHJlY29uZmlndXJhdGlvbiwgSU8gY29udHJvbCwgYW5kIHNpemUgbWFuYWdlbWVudC4gSSBrbm93IHRob3NlIGFyZWFzIGFyZSBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgYml0cyBhbmQgcGllY2VzIG9mIGFueSBOQkQgaW1wbGVtZW50YXRpb24gbGl2ZS4KCkJlZm9yZSBJIGdldCB0b28gZGVlcCwgdGhvdWdoLCBhIGJyaWVmIHNjYW4gb2YgYG5iZF9hcHBseV9saW1pdHNgIGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhLiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyB3aXRoIHRob3NlIGxpbWl0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2FwcGx5X2xpbWl0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0zMDY9c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM0LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMzU6c3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTM1NT1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc1LVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM3NjpcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCBuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc3LVx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDY4PXN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDc3LVx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ3ODpcdFx0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIDApO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNDc5LVx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MzYKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgbW9zdCBzaWduaWZpY2FudCBwb2ludHMgc2VlbSB0byByZXZvbHZlIGFyb3VuZCBzb2NrZXQgbWFuYWdlbWVudCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBzeXN0ZW0uIEl0IHNlZW1zIHdlJiMzOTtyZSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggYWRqdXN0bWVudHMgdG8gaG93IHRoZSBzb2NrZXRzIGFyZSBhZGRlZCBhbmQgcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBvcmNoZXN0cmF0ZWQsIGJvdGggdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGNhbGxzLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBkcml2ZXIgbG9naWMgYnV0IGNsZWFybHkgY3JpdGljYWwgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgYXMgdGhlIHRlY2hub2xvZ3kgc2VlcyBjb250aW51ZWQgZGVwbG95bWVudC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgbmJkX2FwcGx5X2xpbWl0c2AgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYXMgaXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gYm90aCBgbmJkX3NldF9zaXplYCBhbmQgYG5iZF9jb25maWdfcHV0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0byB0cmFjZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGJlY2F1c2UgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCByaXBwbGVzIG91dHdhcmRzLgoKRnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBkcml2ZXIgbG9naWMgYXJlIGEgaHVnZSB3aW4uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHZhbGlkYXRlIHRoZXNlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdoaWNoIHNob3VsZCBhY2NlbGVyYXRlIHRoZSBvdmVyYWxsIHF1YWxpdHkgYXNzZXNzbWVudCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIGBCTEtfREVWX05CRGAgY29uZmlnIG9wdGlvbiDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZGVwZW5kZW5jeS4KCk5vdywgYXMgSSBkaWcgZGVlcGVyLCBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlc2Ugc3ltYm9sczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBUaGV5IGFyZSBlc3NlbnRpYWxseSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJJiMzOTtsbCBjYWxsIHRoaXMgc2V0IG9mIHN0ZXBzLCB0aGUgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfcmVjb25uZWN0X3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfc2V0X3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZC9yZWNvbm5lY3RlZCwgaG93IHF1ZXVlIGxpbWl0cyBhcmUgYXBwbGllZCwgYW5kIGhvdyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZCB2aWEgTmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2FkZF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3JlY29ubmVjdF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3NldF9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6MTguODYzNTQ1NjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxNTQ3MjgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX3JlY29ubmVjdF9zb2NrZXRcIixcbiAgICBcIm5iZF9zZXRfc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjoxOC44NjM1NTM5ODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDc4MjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzNGQzZGEzZGIyMzQ4Yzc1NTYzZWQ5NWQ5YmI5ZWI0OTg0NjgzNDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAwNzozNjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmY4ZjUxZGYzMWFkYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjtcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjtcXG4gc3RhdGljIGludCBtYXhfcGFydCA9IDE2O1xcbitzdGF0aWMgaW50IHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zID0gMTtcXG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xcbiBcXG4gc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbkBAIC0zMzEsNiArMzMyLDI2IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcXG4gXFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBuYmRfYXBwbHlfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdTMyIGZsYWdzKVxcbit7XFxuK1xcdGxpbS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xcbitcXHRsaW0tXFx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xcbitcXHRsaW0tXFx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXFxuK1xcdFxcdGxpbS1cXHUwMDNlbWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkge1xcbitcXHRcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX0ZVQSlcXG4rXFx0XFx0XFx0bGltLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXFxuK1xcdFxcdGxpbS1cXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9XUklURV9aRVJPRVMpXFxuK1xcdFxcdGxpbS1cXHUwMDNlbWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbkBAIC0zNTIsMjYgKzM3MywxNCBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuLVxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXFxuLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4tXFx0aWYgKCEobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcXG4tXFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEpO1xcbi1cXHR9IGVsc2UgaWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XFxuLVxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbi1cXHRcXHRsaW0uZmVhdHVyZXMgXFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcXG4tXFx0fVxcbi1cXHRpZiAobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfUk9UQVRJT05BTClcXG4tXFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7XFxuLVxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcXG4tXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4tXFxuK1xcdG5iZF9hcHBseV9saW1pdHMoXFx1MDAyNmxpbSwgbmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzKTtcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcXG4tXFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdC8qIE5vIG5lZWQgZnJlZXplIHdpdGggMCBjYXBhY2l0eSBhbmQgd3JpdGUgY2FjaGUgZGlzYWJsZWQgKi9cXG4rXFx0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVxcdTAwM2VkaXNrKSBcXHUwMDI2XFx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpKVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuQEAgLTEwNjEsNDAgKzEwNzAsMzEgQEAgc3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcXG4gXFx0aW50IG5ld19pbmRleCA9IC0xO1xcbiBcXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLVxcdTAwM2Vzb2Nrc1tpbmRleF07XFxuIFxcdGludCBmYWxsYmFjayA9IG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleDtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAodGVzdF9iaXQoTkJEX1JUX0RJU0NPTk5FQ1RFRCwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlcnVudGltZV9mbGFncykpXFxuIFxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuIFxcbi1cXHRpZiAoY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgXFx1MDAzYz0gMSkge1xcbi1cXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuLVxcdFxcdFxcdFxcdCAgICBcXFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4tXFx0fVxcbitcXHRpZiAoY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgXFx1MDAzYz0gMSlcXG4rXFx0XFx0Z290byBub19mYWxsYmFjaztcXG4gXFxuIFxcdGlmIChmYWxsYmFjayBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGZhbGxiYWNrIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFjb25maWctXFx1MDAzZXNvY2tzW2ZhbGxiYWNrXS1cXHUwMDNlZGVhZClcXG4gXFx0XFx0cmV0dXJuIGZhbGxiYWNrO1xcbiBcXG4tXFx0aWYgKG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCBcXHUwMDNjIDAgfHxcXG4tXFx0ICAgIG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCBcXHUwMDNlPSBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyB8fFxcbi1cXHQgICAgY29uZmlnLVxcdTAwM2Vzb2Nrc1tuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXhdLVxcdTAwM2VkZWFkKSB7XFxuLVxcdFxcdGludCBpO1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAoaSA9PSBpbmRleClcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGlmICghY29uZmlnLVxcdTAwM2Vzb2Nrc1tpXS1cXHUwMDNlZGVhZCkge1xcbi1cXHRcXHRcXHRcXHRuZXdfaW5kZXggPSBpO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdFxcdG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcXG4tXFx0XFx0aWYgKG5ld19pbmRleCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XFxuK1xcdFxcdGlmIChpICE9IGluZGV4IFxcdTAwMjZcXHUwMDI2ICFjb25maWctXFx1MDAzZXNvY2tzW2ldLVxcdTAwM2VkZWFkKSB7XFxuK1xcdFxcdFxcdG5ld19pbmRleCA9IGk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0bmV3X2luZGV4ID0gbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4O1xcbitcXHRuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XFxuK1xcdGlmIChuZXdfaW5kZXggXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4rXFxuK25vX2ZhbGxiYWNrOlxcbitcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuK1xcdFxcdFxcdCAgICBcXFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuIG5ld19pbmRleDtcXG4gfVxcbiBcXG5AQCAtMTI4MSwyMyArMTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbiBcXHRzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrcztcXG4gXFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcXG4tXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovXFxuIFxcdGlmIChhcmcgXFx1MDAzZSBJTlRfTUFYKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChuYmQtXFx1MDAzZXBpZCkge1xcbitcXHRcXHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuK1xcdFxcdFxcdFxcXCJDYW5ub3QgYWRkIHNvY2tldCB0byBhIHJ1bm5pbmcgZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbitcXG4gXFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcXHUwMDI2ZXJyKTtcXG4gXFx0aWYgKCFzb2NrKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSdyZVxcbi1cXHQgKiByZWFsbG9jYXRpbmcgdGhlIC1cXHUwMDNlc29ja3MgYXJyYXkuXFxuLVxcdCAqL1xcbi1cXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuLVxcbiBcXHRpZiAoIW5ldGxpbmsgXFx1MDAyNlxcdTAwMjYgIW5iZC1cXHUwMDNldGFza19zZXR1cCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlcnVudGltZV9mbGFncykpXFxuIFxcdFxcdG5iZC1cXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XFxuQEAgLTEzMzcsMTIgKzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZuc29jay1cXHUwMDNld29yaywgbmJkX3BlbmRpbmdfY21kX3dvcmspO1xcbiBcXHRzb2Nrc1tjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucysrXSA9IG5zb2NrO1xcbiBcXHRhdG9taWNfaW5jKFxcdTAwMjZjb25maWctXFx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xcbi1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBwdXRfc29ja2V0Olxcbi1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xcbiBcXHRzb2NrZmRfcHV0KHNvY2spO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFxuIFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbmZpZy1cXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XFxuIFxcdFxcdHdha2VfdXAoXFx1MDAyNmNvbmZpZy1cXHUwMDNlY29ubl93YWl0KTtcXG4rXFx0XFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcXFwicmVjb25uZWN0ZWQgc29ja2V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0a2ZyZWUoYXJncyk7XFxuLVxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5AQCAtMTQ3MSw4ICsxNDcwLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX3JlZnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuYmQtXFx1MDAzZWNvbmZpZ19sb2NrKSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuK1xcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRcXHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xcbiBcXHRcXHRpbnZhbGlkYXRlX2Rpc2sobmJkLVxcdTAwM2VkaXNrKTtcXG4rXFx0XFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCAwKTtcXG4rXFx0XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuIFxcdFxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlYnl0ZXNpemUpXFxuIFxcdFxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZuYmRfdG9fZGV2KG5iZCktXFx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcXG4gXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX1BJRF9GSUxFLFxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG4gXFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuK3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuIFxcdFxcdC5tYXhfaHdfc2VjdG9yc1xcdFxcdD0gNjU1MzYsXFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuLVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbitcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XFxuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKSxcXG4rXFx0XFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4re1xcbitcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbitcXHRpbnQgcmVtLCBjb3VudCA9IDA7XFxuK1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xcbitcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggKyAxXTtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YXR0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bmJkX3NvY2tfcG9saWN5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VleHRhY2spKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0XFx0aWYgKGNiKSB7XFxuK1xcdFxcdFxcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG4re1xcbitcXHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XFxuQEAgLTIxNTksNyArMjIxNiwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xcbiBcXG4gXFx0aWYgKCFuYmQpIHtcXG4tXFx0XFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xcbitcXHRcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcXHUwMDNlIDAgPyByZXQgOiAxKTtcXG4gXFx0XFx0aWYgKElTX0VSUihuYmQpKSB7XFxuIFxcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcXG5AQCAtMjIyNiwzNiArMjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xcbi1cXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbi1cXHRcXHRpbnQgcmVtLCBmZDtcXG4tXFxuLVxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXFxuLVxcdFxcdFxcdFxcdCAgICByZW0pIHtcXG4tXFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xcbi1cXG4tXFx0XFx0XFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBhdHRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG5iZF9zb2NrX3BvbGljeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbi1cXHRcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XFxuLVxcdFxcdFxcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbi1cXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdKSB7XFxuIFxcdFxcdG5iZC1cXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcXG5AQCAtMjM0NCw2ICsyMzc4LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuK3tcXG4rXFx0cmV0dXJuIG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XFxuQEAgLTI0NDAsNDAgKzI0NzksMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xcbi1cXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbi1cXHRcXHRpbnQgcmVtLCBmZDtcXG4tXFxuLVxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXFxuLVxcdFxcdFxcdFxcdCAgICByZW0pIHtcXG4tXFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xcbi1cXG4tXFx0XFx0XFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBhdHRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG5iZF9zb2NrX3BvbGljeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbi1cXHRcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XFxuLVxcdFxcdFxcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xcbi1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChyZXQgPT0gLUVOT1NQQylcXG4tXFx0XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcXFwicmVjb25uZWN0ZWQgc29ja2V0XFxcXG5cXFwiKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG4rXFx0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmJkLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuQEAgLTI3MjUsOCArMjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxcbiBcXHR9XFxuIFxcdG5iZF9kYmdfaW5pdCgpO1xcbiBcXG4rXFx0aWYgKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIFxcdTAwM2MgMSlcXG4rXFx0XFx0cHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxO1xcbitcXHQvKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwXFxuK1xcdCAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuXFxuK1xcdCAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmJkc19tYXg7IGkrKylcXG4tXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSk7XFxuK1xcdFxcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI3ODcsMyArMjgwMSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXFxcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcbittb2R1bGVfcGFyYW0ocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsIGludCwgMDQ0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0MocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsXFxuK1xcXCJudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjE5LjI4OTA5NjA1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYxNzI5MTYxOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9yZWNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkL3JlY29ubmVjdGVkLCBob3cgcXVldWUgbGltaXRzIGFyZSBhcHBsaWVkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkIHZpYSBOZXRsaW5rIGFuZCBpb2N0bCBpbnRlcmZhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTM0ZDNkYTNkYjIzNDhjNzU1NjNlZDk1ZDliYjllYjQ5ODQ2ODM0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDc6MzY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggOGYxMDc2MmU5MGVmNy4uZjhmNTFkZjMxYWRhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbkBAIC0xNjYsNiArMTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyO1xuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjtcbiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7XG4rc3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNiArMzMyLDI2IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbiBcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuYmRfYXBwbHlfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdTMyIGZsYWdzKVxuK3tcbitcdGxpbS1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcbitcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcbitcdGxpbS1cdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4rXHRcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbitcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkge1xuK1x0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXG4rXHRcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX0ZVQTtcbitcdH1cbitcbitcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfUk9UQVRJT05BTClcbitcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuK1x0XHRsaW0tXHUwMDNlbWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbkBAIC0zNTIsMjYgKzM3MywxNCBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSBVSU5UX01BWCBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUO1xuLVx0ZWxzZVxuLVx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4tXHRpZiAoIShuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX0ZMVVNIKSkge1xuLVx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTtcbi1cdH0gZWxzZSBpZiAobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpIHtcbi1cdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBO1xuLVx0fSBlbHNlIHtcbi1cdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuLVx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfRlVBO1xuLVx0fVxuLVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuLVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuLVx0XHRsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cbitcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCBuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xuLVx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4rXHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXG4rXHRpZiAoIWdldF9jYXBhY2l0eShuYmQtXHUwMDNlZGlzaykgXHUwMDI2XHUwMDI2ICFibGtfcXVldWVfd3JpdGVfY2FjaGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpKVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTEwNjEsNDAgKzEwNzAsMzEgQEAgc3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcbiBcdGludCBuZXdfaW5kZXggPSAtMTtcbiBcdHN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctXHUwMDNlc29ja3NbaW5kZXhdO1xuIFx0aW50IGZhbGxiYWNrID0gbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXg7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4tXHRcdHJldHVybiBuZXdfaW5kZXg7XG4tXHR9XG4rXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4rXHRcdGdvdG8gbm9fZmFsbGJhY2s7XG4gXG4gXHRpZiAoZmFsbGJhY2sgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBmYWxsYmFjayBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwMjZcdTAwMjZcbiBcdCAgICAhY29uZmlnLVx1MDAzZXNvY2tzW2ZhbGxiYWNrXS1cdTAwM2VkZWFkKVxuIFx0XHRyZXR1cm4gZmFsbGJhY2s7XG4gXG4tXHRpZiAobnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNjIDAgfHxcbi1cdCAgICBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2U9IGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcbi1cdCAgICBjb25maWctXHUwMDNlc29ja3NbbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXhdLVx1MDAzZWRlYWQpIHtcbi1cdFx0aW50IGk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4tXHRcdFx0cmV0dXJuIG5ld19pbmRleDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xuK1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4rXHRcdFx0bmV3X2luZGV4ID0gaTtcbitcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0bmV3X2luZGV4ID0gbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXg7XG4rXHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbitcdGlmIChuZXdfaW5kZXggXHUwMDNlPSAwKVxuK1x0XHRyZXR1cm4gbmV3X2luZGV4O1xuK1xuK25vX2ZhbGxiYWNrOlxuK1x0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4rXHRcdFx0ICAgIFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCIpO1xuIFx0cmV0dXJuIG5ld19pbmRleDtcbiB9XG4gXG5AQCAtMTI4MSwyMyArMTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKG5iZC1cdTAwM2VwaWQpIHtcbitcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4rXHRcdFx0XCJDYW5ub3QgYWRkIHNvY2tldCB0byBhIHJ1bm5pbmcgZGV2aWNlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJ3JlXG4tXHQgKiByZWFsbG9jYXRpbmcgdGhlIC1cdTAwM2Vzb2NrcyBhcnJheS5cbi1cdCAqL1xuLVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cbiBcdGlmICghbmV0bGluayBcdTAwMjZcdTAwMjYgIW5iZC1cdTAwM2V0YXNrX3NldHVwIFx1MDAyNlx1MDAyNlxuIFx0ICAgICF0ZXN0X2JpdChOQkRfUlRfQk9VTkQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0bmJkLVx1MDAzZXRhc2tfc2V0dXAgPSBjdXJyZW50O1xuQEAgLTEzMzcsMTIgKzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zKytdID0gbnNvY2s7XG4gXHRhdG9taWNfaW5jKFx1MDAyNmNvbmZpZy1cdTAwM2VsaXZlX2Nvbm5lY3Rpb25zKTtcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4gcHV0X3NvY2tldDpcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4rXHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCJyZWNvbm5lY3RlZCBzb2NrZXRcXG5cIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbkBAIC0xNDcxLDggKzE0NzAsMTMgQEAgc3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19yZWZzLFxuIFx0XHRcdFx0XHRcdTAwMjZuYmQtXHUwMDNlY29uZmlnX2xvY2spKSB7XG4gXHRcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuK1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbitcdFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4rXHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRcdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplKVxuIFx0XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbiBcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4rc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuK1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuYmQtXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZuYmRfbXFfb3BzO1xuLVx0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcbitcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4rICpcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxuK1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4rXHRpbnQgcmVtLCBjb3VudCA9IDA7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbitcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICsgMV07XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4rXHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbitcdFx0XHRcdFx0XHRhdHRyLFxuK1x0XHRcdFx0XHRcdG5iZF9zb2NrX3BvbGljeSxcbitcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbitcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y291bnQrKztcbitcdFx0aWYgKGNiKSB7XG4rXHRcdFx0cmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0XHRyZXR1cm4gY291bnQ7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4rc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuK3tcbitcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcbkBAIC0yMTU5LDcgKzIyMTYsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkX2luZGV4X211dGV4KTtcbiBcbiBcdGlmICghbmJkKSB7XG4tXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcbitcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXHUwMDNlIDAgPyByZXQgOiAxKTtcbiBcdFx0aWYgKElTX0VSUihuYmQpKSB7XG4gXHRcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxuXCIpO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiArMjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbitcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgKzIzNzgsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4re1xuK1x0cmV0dXJuIG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCArMjQ3OSwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuLVx0XHR9XG4tXHR9XG4rXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHQvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqL1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCArMjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4rXHRpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgXHUwMDNjIDEpXG4rXHRcdHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zID0gMTtcbitcdC8qIFNldCB0byB0aGUgaW50ZW5kZWQgY29ubmVjdGlvbiBjb3VudCBzbyBuYmRfc3RhcnRfZGV2aWNlKCkgY2FuIHNraXBcbitcdCAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuXG4rXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5iZHNfbWF4OyBpKyspXG4tXHRcdG5iZF9kZXZfYWRkKGksIDEpO1xuK1x0XHRuYmRfZGV2X2FkZChpLCAxLCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCIpO1xuK21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTtcbitNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLFxuK1wibnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKVwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjE5LjI4OTA5ODUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTk0NzIyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBOQkQgZHJpdmVyIHBhdGNoLiBGcm9tIHdoYXQgSSBzZWUsIHdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gVGhpcyBpcyBmb2N1c2VkIG9uIGVuaGFuY2luZyBob3cgdGhlIE5CRCBkcml2ZXIgbWFuYWdlcyBpdHMgc29ja2V0cywgcXVldWUgbGltaXRzLCBhbmQgY29ubmVjdGlvbnMuIFRoZSBrZXkgY2hhbmdlcyBhcmUgcmVhbGx5IGFyb3VuZCBpbXByb3ZpbmcgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgb2YgdGhlIE5CRCBkZXZpY2VzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgbmJkX2FwcGx5X2xpbWl0c2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZ2FpbmluZyBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgYmxvY2sgcXVldWUgbGltaXRzLiBXZSdyZSBhbHNvIHNlZWluZyBgbmJkX3NldF9zaXplYCB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMgbmV3IGZ1bmN0aW9uLCBzdWdnZXN0aW5nIHRoYXQgd2UncmUgdGlnaHRlbmluZyBob3cgc2l6ZSBjaGFuZ2VzIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBpbnRlcnR3aW5lZC4gVGhlIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBgZmluZF9mYWxsYmFja2AgbG9naWMgaXMgYWx3YXlzIHdlbGNvbWUg4oCTIGNsZWFuZXIgY29kZSBpcyBsZXNzIHByb25lIHRvIGJ1Z3MuXG5cbk5vdywgSSBmaW5kIHRoZSBjaGFuZ2VzIGluIGBuYmRfYWRkX3NvY2tldGAgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgY2hlY2sgZm9yIGBuYmQtXHUwMDNlcGlkYCB0byBwcmV2ZW50IGFkZGluZyBzb2NrZXRzIHRvIGEgcnVubmluZyBkZXZpY2UgaXMgY3J1Y2lhbCBmb3Igcm9idXN0bmVzcy4gVGhlIHJlbW92YWwgb2YgYGJsa19tcV9mcmVlemVfcXVldWVgIGFuZCBgYmxrX21xX3VuZnJlZXplX3F1ZXVlYCBzdWdnZXN0cyB3ZSdyZSBzdHJlYW1saW5pbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAsIG1heWJlIGF2b2lkaW5nIHNvbWUgYmxvY2tpbmcgb3BlcmF0aW9ucy4gYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCByZXR1cm5pbmcgMSBvbiBzdWNjZXNzIChpbnN0ZWFkIG9mIGAtRU5PU1BDYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSBhbmQgZ29vZCB0byBzZWUuIFRoZSBkZWZhdWx0IHF1ZXVlIGxpbWl0cyByZXNldCBpbiBgbmJkX2NvbmZpZ19wdXRgIGlzIGFsc28gc3RhbmRhcmQsIGVuc3VyaW5nIGEgcHJlZGljdGFibGUgc3RhdGUuIFRoZSBhcmd1bWVudCBjaGFuZ2UgdG8gYG5iZF9kZXZfYWRkYCAodGFraW5nIGBucl9od19xdWV1ZXNgKSBpcyBmaW5lLCBhbmQgZ29vZCB0byBzZWUgbW9yZSBtb2Rlcm4gaGFyZHdhcmUgc3VwcG9ydGVkLlxuXG5XZSBhbHNvIGhhdmUgdGhlc2UgbmV3IE5ldGxpbmstcmVsYXRlZCBmdW5jdGlvbnMsIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiBUaGlzIGluZGljYXRlcyBhIHNpZ25pZmljYW50IHNoaWZ0IHRvd2FyZHMgY29uZmlndXJpbmcgTkJEIGRldmljZXMgdmlhIE5ldGxpbmssIHdoaWNoIGlzIGV4Y2VsbGVudCBmb3IgYXV0b21hdGlvbiBhbmQgZHluYW1pYyBjb25maWd1cmF0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGBwcmVfZGVmaW5lZF9jb25uZWN0aW9uc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBhbHNvIGEgZ29vZCBhZGRpdGlvbi5cblxuRnJvbSBhIHZpcnR1YWxpemVkIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGFsbCB0b3RhbGx5IHRlc3RhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgcmVhc3N1cmluZy4gUGx1cywgZ2l2ZW4gdGhlIGNoYW5nZXMsIGl0IGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZyB0byB2YWxpZGF0ZSB0aGVzZSBjb25uZWN0aW9ucy5cblxuU28sIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfQkxLX0RFVl9OQkRgLiBHb29kLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0LiBBbGwgaW4gYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaCB0aGF0IGVuaGFuY2VzIHRoZSBOQkQgZHJpdmVyJ3MgY29uZmlndXJhYmlsaXR5LCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgb3ZlcmFsbCByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6MjcuNDA4NTczNDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjU0OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjoyNy40NTEyMzUyNTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0ODAxMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIEJMS19ERVZfTkJEKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX05CRGAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgd2hhdCBtYWtlcyB0aGlzIGJsb2NrIGRldmljZSB0aWNrLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHVwc3RyZWFtIGltcGxpY2F0aW9ucywgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBhY3QuIFdlJ3JlIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzaW1wbGUgYnVpbGQgZmxhZzsgd2UncmUgaW52ZXN0aWdhdGluZyBhIHBpZWNlIG9mIHRoZSBrZXJuZWwgdGhhdCBpbnRlcmFjdHMgd2l0aCBzdG9yYWdlLCBuZXR3b3JraW5nLCBhbmQgcG90ZW50aWFsbHkgdXNlci1zcGFjZSB0b29scy4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGxpa2VseSBjYW5kaWRhdGVzOiBuZXR3b3JrIHByb3RvY29scywgZW5jcnlwdGlvbiBtb2R1bGVzIChpZiBhcHBsaWNhYmxlKSwgdW5kZXJseWluZyBibG9jayBsYXllciBjb21wb25lbnRzLCBhbmQgYW55IHVzZXItc3BhY2UgaGVscGVycyBvciBsaWJyYXJpZXMuIFRoZSBnb2FsIGlzbid0IGp1c3QgdG8gc2VlICp3aGF0KiBkZXBlbmRzIG9uIGl0LCBidXQgYWxzbyB0byB1bmRlcnN0YW5kIHRoZSAqc3RyZW5ndGgqIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjaXJjdWxhciByZWZlcmVuY2VzLiBBcmUgd2UgbG9va2luZyBhdCBkaXJlY3QsIGhhcmQgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhlcmUgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGF0IHBsYXk/IEEgZ29vZCB1bmRlcnN0YW5kaW5nIGhlcmUgaGVscHMgdG8gcGxhbiBmb3IgcG90ZW50aWFsIHN5c3RlbS1sZXZlbCBjaGFuZ2VzLCBpbmNsdWRpbmcgdGhlIGltcGFjdCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1vZHVsZSBsb2FkaW5nLCBhbmQgdGhlIGJvb3QgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6MzAuOTE2MDM4ODc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDU3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz02PW1lbnVjb25maWcgQkxLX0RFVlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy03LVxcdGJvb2wgXFxcIkJsb2NrIGRldmljZXNcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy05LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTIyPWNvbmZpZyBCTEtfREVWX0ZEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJOb3JtYWwgZmxvcHB5IGRpc2sgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBBUkNIX01BWV9IQVZFX1BDX0ZEQ1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9Mzc9Y29uZmlnIEJMS19ERVZfRkRfUkFXQ01EXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHJhdyBmbG9wcHkgZGlzayBjb21tYW5kcyAoREVQUkVDQVRFRClcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM5OlxcdGRlcGVuZHMgb24gQkxLX0RFVl9GRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9NTM9Y29uZmlnIEFNSUdBX0ZMT1BQWVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgZmxvcHB5IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjU1OlxcdGRlcGVuZHMgb24gQU1JR0FcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNTYtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTU3PWNvbmZpZyBBVEFSSV9GTE9QUFlcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIkF0YXJpIGZsb3BweSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo1OTpcXHRkZXBlbmRzIG9uIEFUQVJJXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTYwLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz02MT1jb25maWcgTUFDX0ZMT1BQWVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUG93ZXJNYWMgZmxvcHB5XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIFBQQ19QTUFDIFxcdTAwMjZcXHUwMDI2ICFQUENfUE1BQzY0XFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz02OD1jb25maWcgQkxLX0RFVl9TV0lNXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gTTY4SyBcXHUwMDI2XFx1MDAyNiBNQUMgXFx1MDAyNlxcdTAwMjYgIUhJR0hNRU1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNzEtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTc1PWNvbmZpZyBBTUlHQV9aMlJBTVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy03Ni1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo3NzpcXHRkZXBlbmRzIG9uIFpPUlJPXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTc4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz04Nj1jb25maWcgTjY0Q0FSVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy04Ny1cXHRib29sIFxcXCJONjQgY2FydCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo4ODpcXHRkZXBlbmRzIG9uIE1BQ0hfTklOVEVORE82NFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy04OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9OTU9Y29uZmlnIEdEUk9NXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJTRUdBIERyZWFtY2FzdCBHRC1ST00gZHJpdmVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjk3OlxcdGRlcGVuZHMgb24gU0hfRFJFQU1DQVNUXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk4LVxcdHNlbGVjdCBDRFJPTVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTExMT1jb25maWcgQkxLX0RFVl9VQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTEyLVxcdGJvb2wgXFxcIlZpcnR1YWwgYmxvY2sgZGV2aWNlXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxMTM6XFx0ZGVwZW5kcyBvbiBVTUxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTE0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0xMjA9Y29uZmlnIEJMS19ERVZfVUJEX1NZTkNcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTIxLVxcdGJvb2wgXFxcIkFsd2F5cyBkbyBzeW5jaHJvbm91cyBkaXNrIElPIGZvciBVQkRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjEyMjpcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTEyMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTc5PWNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXFx0ZGVmYXVsdCA4XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk2PWNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5ODpcXHRkZXBlbmRzIG9uIE5FVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI0Mz1jb25maWcgQkxLX0RFVl9SQU1fQ09VTlRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNDUtXFx0ZGVmYXVsdCBcXFwiMTZcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIEJMS19ERVZfUkFNXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI0Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjUyPWNvbmZpZyBCTEtfREVWX1JBTV9TSVpFXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI1My1cXHRpbnQgXFxcIkRlZmF1bHQgUkFNIGRpc2sgc2l6ZSAoa2J5dGVzKVxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjU0OlxcdGRlcGVuZHMgb24gQkxLX0RFVl9SQU1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjU1LVxcdGRlZmF1bHQgXFxcIjQwOTZcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjYwPWNvbmZpZyBBVEFfT1ZFUl9FVEhcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjYxLVxcdHRyaXN0YXRlIFxcXCJBVEEgb3ZlciBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0yNjc9Y29uZmlnIFNVTlZEQ1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNjgtXFx0dHJpc3RhdGUgXFxcIlN1biBWaXJ0dWFsIERpc2sgQ2xpZW50IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjI2OTpcXHRkZXBlbmRzIG9uIFNVTl9MRE9NU1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI3Nj1jb25maWcgWEVOX0JMS0RFVl9GUk9OVEVORFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzctXFx0dHJpc3RhdGUgXFxcIlhlbiB2aXJ0dWFsIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyNzg6XFx0ZGVwZW5kcyBvbiBYRU5cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjc5LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI4Nj1jb25maWcgWEVOX0JMS0RFVl9CQUNLRU5EXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI4Ny1cXHR0cmlzdGF0ZSBcXFwiWGVuIGJsb2NrLWRldmljZSBiYWNrZW5kIGRyaXZlclxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Mjg4OlxcdGRlcGVuZHMgb24gWEVOX0JBQ0tFTkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjg5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0zMDc9Y29uZmlnIFZJUlRJT19CTEtcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzA4LVxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gYmxvY2sgZHJpdmVyXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMDk6XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzEwLVxcdHNlbGVjdCBTR19QT09MXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXFx0dHJpc3RhdGUgXFxcIlJhZG9zIGJsb2NrIGRldmljZSAoUkJEKVxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzE3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTgtXFx0c2VsZWN0IENFUEhfTElCXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzM3PWNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMzgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMzOTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNDAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU4OlxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTktXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjozMC45NjE1MDEzODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA5MjI2NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyIChgQkxLX0RFVl9OQkRgKS4gSXQgcmVsaWVzIG9uIGBORVRgIGFuZCBgQkxPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3QgYXJlYXMgZm9yIGZ1enppbmcsIGFuZCBJIHRoaW5rIEkndmUgbmFycm93ZWQgaXQgZG93bi4gVGhpcyBwYXRjaCB0b3VjaGVzIGEgZ29vZCBjaHVuayBvZiB0aGUgTkJEIGNvZGU6IGBuYmRfYXBwbHlfbGltaXRzYCwgYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYG5iZF9jb25maWdfcHV0YCwgYG5iZF9kZXZfYWRkYCwgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AsIGBuYmRfZ2VubF9jb25uZWN0YCwgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAuXG5cbkJhc2VkIG9uIHRob3NlIGZ1bmN0aW9ucywgbXkgaW5pdGlhbCB0YXJnZXQgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLCBhbmQgYG5iZF9zZXRfc2l6ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgY29uZmlndXJhdGlvbiBwb2ludHMsIHRoZXJlZm9yZSBnb29kIHBsYWNlcyBmb3IgZmluZGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGFyZW4ndCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIHN0YXRpYyBmdW5jdGlvbnM/IFRoYXQgY291bGQgYWZmZWN0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjozNS42NzA3MzMyNzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5ODg4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2FkZF9zb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzQ9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTI3NzpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3OC1cXHRcXHRcXHQgIGJvb2wgbmV0bGluaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYzND1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NDYtXFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjQ3OlxcdFxcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cXHRjYXNlIE5CRF9TRVRfQkxLU0laRTpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjE2Mj1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYzLXtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjQ6XFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjM1LjczNzcyNzAxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ1OTAzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBOQkQgS2VybmVsIE1vZHVsZSBFbnRyeSBQb2ludHMqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIE5CRCBrZXJuZWwgZW50cnkgcG9pbnRzIGFyZSBzdGF0aWMsIGFuZCB0aGUgYW5zd2VyIGlzIHllcywgdGhleSBzZWVtIHRvIGJlLiBOb3csIGxldCdzIGRyaWxsIGRvd24gYW5kIGlkZW50aWZ5IHRob3NlIGtleSBlbnRyeSBwb2ludHMuIEJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZywgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAgKG9yIHBvc3NpYmx5IGBfX25iZF9pb2N0bGAsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQpIGFyZSB0aGUgcHJpbWFyeSBzdXNwZWN0cy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBjbG9zZWx5LCBmaWd1cmUgb3V0IHRoZWlyIHJvbGVzIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vZHVsZSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjM5LjUwMjMyMTI2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NTAyODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTIxMjA9c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2MS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjI6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjYtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTY3OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjkwOlxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjkxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5OC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk5OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9jb25uZWN0LFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjozOS44Mzk4MzI5NDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2NDgzNTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBJdHMgUG90ZW50aWFsIFVzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuYmRfZ2VubF9jb25uZWN0YCBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBzdGF0aWMgdG9vLiBCdXQgaG9sZCBvbiwgaXQncyByZWdpc3RlcmVkIGFzIGEgbmV0bGluayBjYWxsYmFjaywgaXNuJ3QgaXQ/IFRoYXQgY2hhbmdlcyB0aGluZ3MuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB3ZSBjYW4gbGV2ZXJhZ2UgYG5iZF9nZW5sX2Nvbm5lY3RgIHdpdGhpbiBgRm9jdXNTeW1ib2xzYC5cblxuV2FpdCBhIG1pbnV0ZSwgY2FuIHN0YXRpYyBmdW5jdGlvbnMgZXZlbiBiZSB1c2VkIGluIGBGb2N1c1N5bWJvbHNgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBndWlkYW5jZS4gQWgsIHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHRoZXkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gYXZvaWQgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgbGVhZGluZyB0byBhIGxvc3Mgb2YgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0Li4uIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQuLi4gYm90aCBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlIHJlZ2lzdGVyZWQgYXMgY2FsbGJhY2tzIHdpdGhpbiBgbmJkX2Nvbm5lY3RfZ2VubF9vcHNgLiBTaW5jZSB0aGV5IGFyZSBjYWxsYmFja3MsIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGRvIGluZGVlZCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFBlcmZlY3QhIFRoYXQgbWFrZXMgYWxsIHRoZSBkaWZmZXJlbmNlIVxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIHRvIGNvbnNpZGVyIGJlZm9yZSB3ZSBmaW5hbGl6ZSB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjQ1LjAwNDY3NDIwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5NjQ5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTIzODE9c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzg2OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwOC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA5OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6NDUuMDY3NjQ0MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTU3ODAzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFuZCBhIGJvbGRlZCBoZWFkZXI6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuYmRfaW9jdGxgIFJhYmJpdCBIb2xlKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGlzIGFnYWluLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBXaGF0IGFib3V0IGBuYmRfaW9jdGxgPyBJdCdzIHRoZSBseW5jaHBpbiwgaXNuJ3QgaXQ/IFRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGFueSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIE5CRCBzdGFjay4gSXTigJlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJZiB3ZSBhcmUgdHJ5aW5nIHRvIHJlc29sdmUgc29tZSBpc3N1ZSwgb3Igb3B0aW1pemUgdGhpbmdzLCB0aGVuIHRoZSBgaW9jdGxgIGNhbGxzIGFyZSB0aGUgZmlyc3QgdGhpbmcgdGhhdCByZXF1aXJlIGluc3BlY3Rpb24uIEl0J3Mgb2Z0ZW4gdGhlIHJvb3Qgb2YgdmFyaW91cyBhY2Nlc3MgaXNzdWVzLiBBbmQgYXMgYW55IE5CRCBleHBlcnQga25vd3MsIGl0IGNhbiBiZSBhIHNvdXJjZSBvZiBjb25mdXNpb24gYW5kIHN1YnRsZSBidWdzIGlmIG5vdCBpbXBsZW1lbnRlZCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkuIEl04oCZcyB0aGUgZ2F0ZXdheSwgdGhlIGNvbW1hbmQgY2VudGVyLCB0aGXigKYgd2VsbCwgeW91IGdldCB0aGUgaWRlYS4gV2l0aG91dCBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcywgYW5kIGhvdyBpdCdzIGhhbmRsZWQgb24gYm90aCBzaWRlcyBvZiB0aGUgaW50ZXJmYWNlLCB3ZSdyZSBmbHlpbmcgYmxpbmQsIHRydWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6NDkuMzYzNDI3Mzg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI3NzQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE2MjQ9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MzQ6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzNS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjgxOnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODItXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMy1cXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcwNDpcXHRcXHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTItXFx0LnJlbGVhc2UgPVxcdG5iZF9yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxMzpcXHQuaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MTQ6XFx0LmNvbXBhdF9pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxNS1cXHQuZnJlZV9kaXNrID1cXHRuYmRfZnJlZV9kaXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjo0OS40NDI3MDk2MDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1MTMxMjc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBUEkgRW50cnlwb2ludCBGdW5jdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYG5iZF9pb2N0bGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU2luY2UgaXQncyBzdGF0aWMsIEknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSBvZiBpdCBhbG9uZyB3aXRoIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBfX25iZF9pb2N0bGAgYmVjYXVzZSB0aGV5IGFyZSBhbGwgc3RhdGljIHRvby4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmUgc3BlY2lmeSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gU2luY2UgdGhleSBhcmUgYWxsIHN0YXRpYywgSSB3aWxsIGhhdmUgdG8gZGVmYXVsdCB0byB0aGVzZSBjYWxsYmFja3MuIE5vdyBsZXQncyBjaGVjayBgbmJkX2FwcGx5X2xpbWl0c2AuIEFoLCBpdCdzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgYW5kIGl0J3MgcHJvYmFibHkgaW5saW5lZCB0b28uIEhtbSwgYG5iZF9zZXRfc2l6ZWAgaXMgYWxzbyBzdGF0aWMuIEFuZCBzbyBpcyBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLCBhbmQgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gTGV0J3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYEJMS19ERVZfTkJEYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCB0aGFua2Z1bGx5IGl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBCTE9DS2AuIEFscmlnaHQsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIFNvLCBJIHdpbGwgYWRkIGBCTEtfREVWX05CRGAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjo1NC45OTQwMjUzNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTg4ODk3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjU3LjUxMjkyMDg1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMyNzA2MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGRyaXZlcnM6XG5cbioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyJ3MgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgb2YgdGhlIE5CRCBkcml2ZXIuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGVyZSwgc3BlY2lmaWNhbGx5IGAjaWZkZWZgcy4gVGhvc2UgdGhpbmdzIGFsd2F5cyB3YXJyYW50IGEgY2xvc2VyIGxvb2suIFRoZXkgdXN1YWxseSBpbmRpY2F0ZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCBmZWF0dXJlIGZsYWdzLCBvciwgd29yc3QtY2FzZSBzY2VuYXJpbywgY3J1ZnQgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgaW50cm9kdWNpbmcgY29tcGxleGl0eSBvciBwb3RlbnRpYWwgYnVncyB3aXRoaW4gdGhlIGRyaXZlcidzIGNvZGViYXNlLiBJdCdzIGEgcXVpY2sgYW5kIGRpcnR5IHNjYW4gdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBicmFuY2hlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNzowMC40NDU2MzAyOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTI5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTIxMz1zdGF0aWMgc3RydWN0IHNvY2tldCAqbmJkX2dldF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI0MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDE6I2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjQyLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmJkX2tleVszXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6Mzc6MDAuNTI2MTY4NDI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTkwNzIzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTkJEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBhc3BlY3RzIGZvciBOQkQuIEl0IGxvb2tzIGxpa2UgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXIgaXMgYEJMS19ERVZfTkJEYCwgbm90aGluZyBtb3JlIHNwZWNpZmljIHRoYW4gdGhhdC4gTXkgZm9jdXMsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0YXNrLCBuZWVkcyB0byBiZSBhcyBjb25jaXNlIGFzIHBvc3NpYmxlLCBzbyB0aGF0IGlzIGtleS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsLiBJJ3ZlIGluaXRpYWxseSBmbGFnZ2VkIHRoZXNlIGFzIHByaW1hcnkgdGFyZ2V0czogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYF9fbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLlxuXG5UaGlua2luZyBhYm91dCB0aGUgY2FsbCBmbG93LCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGFyZSBjYWxsZWQgdGhyb3VnaCBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgdmlhIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLiBgbmJkX3NldF9zaXplYCBpcyBjYWxsZWQgdmlhIGBuYmRfaW9jdGxgIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAvYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gU28sIHRoZXNlIHdvdWxkIHNlZW0gdG8gYmUgY3JpdGljYWwgZW50cnkgcG9pbnRzLlxuXG5Ib3dldmVyLCBhIHF1aWNrIHNlY29uZCB0aG91Z2h0LCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGxvb2sgbGlrZSBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW5saW5pbmcuIFRoZXkgYXJlIHBhc3NlZCBhcyBjYWxsYmFja3MgdG8gYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgdXNpbmcgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgYW5kIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAsIHNvIEkgbWlnaHQgbmVlZCB0byBkaWcgaW50byB0aGUgYWN0dWFsIHN0cnVjdHVyZSBvZiB0aGVzZSBjYWxsYmFja3MuIEluZGVlZCwgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgY2FsbHMgYG5iZF9hZGRfc29ja2V0YC4gVGhlIHNhbWUgbXVzdCBiZSB0cnVlIG9mIHRoZSByZWNvbm5lY3QuXG5cblRvIG1ha2UgdGhpbmdzIGNsZWFuLCBsZXQgbWUgcmVkdWNlIHRoZSBsaXN0LCB0byBjb25zaWRlciBvbmx5IHRoZSBjb3JlIGVudHJ5IHBvaW50czogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYW5kIGBuYmRfcmVjb25uZWN0X3NvY2tldGAuXG5cbkknbGwgYWxzbyB0YWtlIGEgbG9vayBhdCBgbmJkX2Rldl9hZGRgIGFzIHBhcnQgb2YgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6Mzc6MDcuODI1MjQzNjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYzOTk0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2Rldl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTQ4OnN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDktXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIxNjc9c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyMjItXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjIzOlxcdFxcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXFx1MDAzZSAwID8gcmV0IDogMSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjI0LVxcdFxcdGlmIChJU19FUlIobmJkKSkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjg5PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5iZHNfbWF4OyBpKyspXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzQzOlxcdFxcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDQtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjA4LjA0MTY0NzI3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjMzMTk4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgdGFrZSBvbiB0aGlzLlxuXG4qKkludGVybmFsIENoZWNrbGlzdCBmb3IgTkJEIE1vZHVsZSBSZXZpZXcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGBuYmRfZGV2X2FkZGAgaXMgYWxzbyBzdGF0aWMuIE1ha2VzIHNlbnNlIGZvciBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgbW9kdWxlLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEknbSBhc3Nlc3NpbmcgaG93IGl0J3MgY2FsbGVkLlxuXG5UaGVuLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgcGllY2VzIGludm9sdmVkIGluIGNvbm5lY3Rpb24sIHJlY29uZmlndXJhdGlvbiwgSU8gY29udHJvbCwgYW5kIHNpemUgbWFuYWdlbWVudC4gSSBrbm93IHRob3NlIGFyZWFzIGFyZSBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgYml0cyBhbmQgcGllY2VzIG9mIGFueSBOQkQgaW1wbGVtZW50YXRpb24gbGl2ZS5cblxuQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCB0aG91Z2gsIGEgYnJpZWYgc2NhbiBvZiBgbmJkX2FwcGx5X2xpbWl0c2AgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEuIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdpdGggdGhvc2UgbGltaXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjE0LjI3NDg0ODc0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxNDA3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2FwcGx5X2xpbWl0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MzA2PXN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzM1OnN0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zNTU9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc1LVxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzozNzY6XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCBuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc3LVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDY4PXN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NzctXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0Nzg6XFx0XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCAwKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NzktXFx0XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjE0LjM0Mjk5MzcxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTMyMjM3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgcG9pbnRzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgc29ja2V0IG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgc3lzdGVtLiBJdCBzZWVtcyB3ZSdyZSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggYWRqdXN0bWVudHMgdG8gaG93IHRoZSBzb2NrZXRzIGFyZSBhZGRlZCBhbmQgcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBvcmNoZXN0cmF0ZWQsIGJvdGggdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGNhbGxzLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBkcml2ZXIgbG9naWMgYnV0IGNsZWFybHkgY3JpdGljYWwgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgYXMgdGhlIHRlY2hub2xvZ3kgc2VlcyBjb250aW51ZWQgZGVwbG95bWVudC5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYG5iZF9hcHBseV9saW1pdHNgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGFzIGl0J3MgdHJpZ2dlcmVkIGZyb20gYm90aCBgbmJkX3NldF9zaXplYCBhbmQgYG5iZF9jb25maWdfcHV0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0byB0cmFjZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGJlY2F1c2UgdGhlIHBhdGNoJ3MgaW1wYWN0IHJpcHBsZXMgb3V0d2FyZHMuXG5cbkZyb20gYSB0ZXN0aW5nIHBlcnNwZWN0aXZlLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgZHJpdmVyIGxvZ2ljIGFyZSBhIGh1Z2Ugd2luLiBXZSBzaG91bGQgYmUgYWJsZSB0byB2YWxpZGF0ZSB0aGVzZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aGljaCBzaG91bGQgYWNjZWxlcmF0ZSB0aGUgb3ZlcmFsbCBxdWFsaXR5IGFzc2Vzc21lbnQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIGBCTEtfREVWX05CRGAgY29uZmlnIG9wdGlvbiDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZGVwZW5kZW5jeS5cblxuTm93LCBhcyBJIGRpZyBkZWVwZXIsIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCB0aGVzZSBzeW1ib2xzOiBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfaW9jdGxgLCBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLCBhbmQgYG5iZF9zZXRfc2l6ZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIFRoZXkgYXJlIGVzc2VudGlhbGx5IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEknbGwgY2FsbCB0aGlzIHNldCBvZiBzdGVwcywgdGhlIFwic2V0LXJlc3VsdHNcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzYsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjIwLjg3NTIzNDA3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzAyMDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX3JlY29ubmVjdF9zb2NrZXRcIixcbiAgICBcIm5iZF9zZXRfc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9yZWNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkL3JlY29ubmVjdGVkLCBob3cgcXVldWUgbGltaXRzIGFyZSBhcHBsaWVkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkIHZpYSBOZXRsaW5rIGFuZCBpb2N0bCBpbnRlcmZhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 07:12:48 +0000 UTC FinishedAt: 2026-08-05 07:37:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "5f0282df-eabc-45bb-8b1a-503a4eaa8bf1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_ioctl", "nbd_add_socket", "nbd_reconnect_socket", "nbd_set_size" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2FkZF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3JlY29ubmVjdF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3NldF9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTM0ZDNkYTNkYjIzNDhjNzU1NjNlZDk1ZDliYjllYjQ5ODQ2ODM0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDc6MzY6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmY4ZjUxZGYzMWFkYTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTY2LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbiYjNDM7c3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNiAmIzQzOzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4mIzQzO1x0bGltLVx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuJiM0MztcdGxpbS1cdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbiYjNDM7XHRcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcbiYjNDM7XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXG4mIzQzO1x0XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4mIzQzO1x0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuJiM0MztcdFx0bGltLVx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbkBAIC0zNTIsMjYgJiM0MzszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0aWYgKCEobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4tXHR9IGVsc2UgaWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcbi1cdH0gZWxzZSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcbi1cdH1cbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxuLVx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXG4mIzQzO1x0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXG4mIzQzO1x0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVx1MDAzZWRpc2spIFx1MDAyNlx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKSlcbiYjNDM7XHRcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICYjNDM7MTA3MCwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4mIzQzO1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4mIzQzO1x0XHRcdG5ld19pbmRleCA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbiYjNDM7XHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1xuJiM0Mztub19mYWxsYmFjazpcbiYjNDM7XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwmIzM0Oyk7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICYjNDM7MTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmJkLVx1MDAzZXBpZCkge1xuJiM0MztcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4mIzQzO1x0XHRcdFwmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSYjMzk7cmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxMiAmIzQzOzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTQwMiwxMSAmIzQzOzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4mIzQzO1x0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0cmV0dXJuIDE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTQ3MSw4ICYjNDM7MTQ3MCwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfbXV0ZXhfbG9jayhcdTAwMjZuYmQtXHUwMDNlY29uZmlnX3JlZnMsXG4gXHRcdFx0XHRcdFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jaykpIHtcbiBcdFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cdTAwM2Vjb25maWc7XG4mIzQzO1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbiYjNDM7XHRcdC8qIHJlc2V0IHF1ZXVlIGxpbWl0cyB0byBkZWZhdWx0ICovXG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiYjNDM7XHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbiYjNDM7XHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0XHRpZiAobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VieXRlc2l6ZSlcbiBcdFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsXG5AQCAtMTk0MSw3ICYjNDM7MTk0NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuIFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSA2NTUzNixcbkBAIC0xOTU4LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuJiM0MztcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiAmIzQzOzIxMTIsNTggQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksXG4mIzQzO1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiYjNDM7XHRpbnQgcmVtLCBjb3VudCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xuJiM0MztcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICYjNDM7IDFdO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuJiM0MztcdFx0XHRcdFx0XHRhdHRyLFxuJiM0MztcdFx0XHRcdFx0XHRuYmRfc29ja19wb2xpY3ksXG4mIzQzO1x0XHRcdFx0XHRcdGluZm8tXHUwMDNlZXh0YWNrKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGNiKSB7XG4mIzQzO1x0XHRcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcbkBAIC0yMTU5LDcgJiM0MzsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZF9pbmRleF9tdXRleCk7XG4gXG4gXHRpZiAoIW5iZCkge1xuLVx0XHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7XG4mIzQzO1x0XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXHUwMDNlIDAgPyByZXQgOiAxKTtcbiBcdFx0aWYgKElTX0VSUihuYmQpKSB7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhZGQgbmV3IGRldmljZVxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcbkBAIC0yMjI2LDM2ICYjNDM7MjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07XG4tXG4tXHRcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xuIFx0XHRuYmQtXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxuQEAgLTIzNDQsNiAmIzQzOzIzNzgsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkID0gTlVMTDtcbkBAIC0yNDQwLDQwICYjNDM7MjQ3OSwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XG4tXHRcdFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0aWYgKHJldCA9PSAtRU5PU1BDKVxuLVx0XHRcdFx0XHRyZXQgPSAwO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XFxuXCYjMzQ7KTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTtcbiYjNDM7XHQvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0ID0gMDtcbiBvdXQ6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG5AQCAtMjcyNSw4ICYjNDM7MjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4mIzQzO1x0aWYgKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIFx1MDAzYyAxKVxuJiM0MztcdFx0cHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxO1xuJiM0MztcdC8qIFNldCB0byB0aGUgaW50ZW5kZWQgY29ubmVjdGlvbiBjb3VudCBzbyBuYmRfc3RhcnRfZGV2aWNlKCkgY2FuIHNraXBcbiYjNDM7XHQgKiB0aGUgcXVldWUtZnJlZXppbmcgYmxrX21xX3VwZGF0ZV9ucl9od19xdWV1ZXMoKSBjYWxsLlxuJiM0MztcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJkc19tYXg7IGkmIzQzOyYjNDM7KVxuLVx0XHRuYmRfZGV2X2FkZChpLCAxKTtcbiYjNDM7XHRcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNzg3LDMgJiM0MzsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwmIzM0O251bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiBtb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXCYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCYjMzQ7KTtcbiYjNDM7bW9kdWxlX3BhcmFtKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLCBpbnQsIDA0NDQpO1xuJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLFxuJiM0MztcJiMzNDtudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfcmVjb25uZWN0X3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfc2V0X3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZC9yZWNvbm5lY3RlZCwgaG93IHF1ZXVlIGxpbWl0cyBhcmUgYXBwbGllZCwgYW5kIGhvdyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZCB2aWEgTmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMzRkM2RhM2RiMjM0OGM3NTU2M2VkOTVkOWJiOWViNDk4NDY4MzQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwNzozNjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IDhmMTA3NjJlOTBlZjcuLmY4ZjUxZGYzMWFkYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtMTY2LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjsKIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjsKJiM0MztzdGF0aWMgaW50IHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zID0gMTsKIHN0YXRpYyBpbnQgcGFydF9zaGlmdDsKIAogc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpOwpAQCAtMzMxLDYgJiM0MzszMzIsMjYgQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLAogCW5zb2NrLSZndDtzZW50ID0gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlsaW0tJmd0O2ZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7CiYjNDM7CWxpbS0mZ3Q7bWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7CiYjNDM7CWxpbS0mZ3Q7bWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfVFJJTSkKJiM0MzsJCWxpbS0mZ3Q7bWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHsKJiM0MzsJCWxpbS0mZ3Q7ZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9GVUEpCiYjNDM7CQkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1JPVEFUSU9OQUwpCiYjNDM7CQlsaW0tJmd0O2ZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUykKJiM0MzsJCWxpbS0mZ3Q7bWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CkBAIC0zNTIsMjYgJiM0MzszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSkKIAkJcmV0dXJuIDA7CiAKIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwotCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9UUklNKQotCQlsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKLQllbHNlCi0JCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKLQlpZiAoIShuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHsKLQkJbGltLmZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTsKLQl9IGVsc2UgaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX0ZVQSkgewotCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUE7Ci0JfSBlbHNlIHsKLQkJbGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFOwotCQlsaW0uZmVhdHVyZXMgJmFtcDs9IH5CTEtfRkVBVF9GVUE7Ci0JfQotCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfUk9UQVRJT05BTCkKLQkJbGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7Ci0JaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUykKLQkJbGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKLQomIzQzOwluYmRfYXBwbHlfbGltaXRzKCZhbXA7bGltLCBuYmQtJmd0O2NvbmZpZy0mZ3Q7ZmxhZ3MpOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTsKLQllcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7CS8qIE5vIG5lZWQgZnJlZXplIHdpdGggMCBjYXBhY2l0eSBhbmQgd3JpdGUgY2FjaGUgZGlzYWJsZWQgKi8KJiM0MzsJaWYgKCFnZXRfY2FwYWNpdHkobmJkLSZndDtkaXNrKSAmYW1wOyZhbXA7ICFibGtfcXVldWVfd3JpdGVfY2FjaGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSkpCiYjNDM7CQllcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0xMDYxLDQwICYjNDM7MTA3MCwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KQogCWludCBuZXdfaW5kZXggPSAtMTsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLSZndDtzb2Nrc1tpbmRleF07CiAJaW50IGZhbGxiYWNrID0gbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4OwomIzQzOwlpbnQgaTsKIAogCWlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCXJldHVybiBuZXdfaW5kZXg7CiAKLQlpZiAoY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMgJmx0Oz0gMSkgewotCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC0mZ3Q7ZGlzayksCi0JCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCXJldHVybiBuZXdfaW5kZXg7Ci0JfQomIzQzOwlpZiAoY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMgJmx0Oz0gMSkKJiM0MzsJCWdvdG8gbm9fZmFsbGJhY2s7CiAKIAlpZiAoZmFsbGJhY2sgJmd0Oz0gMCAmYW1wOyZhbXA7IGZhbGxiYWNrICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMgJmFtcDsmYW1wOwogCSAgICAhY29uZmlnLSZndDtzb2Nrc1tmYWxsYmFja10tJmd0O2RlYWQpCiAJCXJldHVybiBmYWxsYmFjazsKIAotCWlmIChuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXggJmx0OyAwIHx8Ci0JICAgIG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmZ3Q7PSBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyB8fAotCSAgICBjb25maWctJmd0O3NvY2tzW25zb2NrLSZndDtmYWxsYmFja19pbmRleF0tJmd0O2RlYWQpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9uczsgaSYjNDM7JiM0MzspIHsKLQkJCWlmIChpID09IGluZGV4KQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7Ci0JCQkJbmV3X2luZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQluc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7Ci0JCWlmIChuZXdfaW5kZXggJmx0OyAwKSB7Ci0JCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC0mZ3Q7ZGlzayksCi0JCQkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwotCQkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGkgIT0gaW5kZXggJmFtcDsmYW1wOyAhY29uZmlnLSZndDtzb2Nrc1tpXS0mZ3Q7ZGVhZCkgewomIzQzOwkJCW5ld19pbmRleCA9IGk7CiYjNDM7CQkJYnJlYWs7CiAJCX0KIAl9Ci0JbmV3X2luZGV4ID0gbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4OwomIzQzOwluc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7CiYjNDM7CWlmIChuZXdfaW5kZXggJmd0Oz0gMCkKJiM0MzsJCXJldHVybiBuZXdfaW5kZXg7CiYjNDM7CiYjNDM7bm9fZmFsbGJhY2s6CiYjNDM7CWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKIAlyZXR1cm4gbmV3X2luZGV4OwogfQogCkBAIC0xMjgxLDIzICYjNDM7MTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJc3RydWN0IG5iZF9zb2NrICoqc29ja3M7CiAJc3RydWN0IG5iZF9zb2NrICpuc29jazsKLQl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiAJaW50IGVycjsKIAogCS8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqLwogCWlmIChhcmcgJmd0OyBJTlRfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKG5iZC0mZ3Q7cGlkKSB7CiYjNDM7CQlkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC0mZ3Q7ZGlzayksCiYjNDM7CQkJJiMzNDtDYW5ub3QgYWRkIHNvY2tldCB0byBhIHJ1bm5pbmcgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiAJc29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCAmYW1wO2Vycik7CiAJaWYgKCFzb2NrKQogCQlyZXR1cm4gZXJyOwogCW5iZF9yZWNsYXNzaWZ5X3NvY2tldChzb2NrKTsKIAotCS8qCi0JICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJiMzOTtyZQotCSAqIHJlYWxsb2NhdGluZyB0aGUgLSZndDtzb2NrcyBhcnJheS4KLQkgKi8KLQltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSk7Ci0KIAlpZiAoIW5ldGxpbmsgJmFtcDsmYW1wOyAhbmJkLSZndDt0YXNrX3NldHVwICZhbXA7JmFtcDsKIAkgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgJmFtcDtjb25maWctJmd0O3J1bnRpbWVfZmxhZ3MpKQogCQluYmQtJmd0O3Rhc2tfc2V0dXAgPSBjdXJyZW50OwpAQCAtMTMzNywxMiAmIzQzOzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZywKIAlJTklUX1dPUksoJmFtcDtuc29jay0mZ3Q7d29yaywgbmJkX3BlbmRpbmdfY21kX3dvcmspOwogCXNvY2tzW2NvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jazsKIAlhdG9taWNfaW5jKCZhbXA7Y29uZmlnLSZndDtsaXZlX2Nvbm5lY3Rpb25zKTsKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiAKIHB1dF9zb2NrZXQ6Ci0JYmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsIG1lbWZsYWdzKTsKIAlzb2NrZmRfcHV0KHNvY2spOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNDAyLDExICYjNDM7MTQwMCwxMiBAQCBzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCiAJCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwogCQl3YWtlX3VwKCZhbXA7Y29uZmlnLSZndDtjb25uX3dhaXQpOwomIzQzOwkJZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCAmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxuJiMzNDspOwogCQlyZXR1cm4gMDsKIAl9CiAJc29ja2ZkX3B1dChzb2NrKTsKIAlrZnJlZShhcmdzKTsKLQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCkBAIC0xNDcxLDggJiM0MzsxNDcwLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfbXV0ZXhfbG9jaygmYW1wO25iZC0mZ3Q7Y29uZmlnX3JlZnMsCiAJCQkJCSZhbXA7bmJkLSZndDtjb25maWdfbG9jaykpIHsKIAkJc3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC0mZ3Q7Y29uZmlnOwomIzQzOwkJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJCW5iZF9kZXZfZGJnX2Nsb3NlKG5iZCk7CiAJCWludmFsaWRhdGVfZGlzayhuYmQtJmd0O2Rpc2spOwomIzQzOwkJLyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi8KJiM0MzsJCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSk7CiYjNDM7CQluYmRfYXBwbHlfbGltaXRzKCZhbXA7bGltLCAwKTsKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKIAkJaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtieXRlc2l6ZSkKIAkJCWtvYmplY3RfdWV2ZW50KCZhbXA7bmJkX3RvX2RldihuYmQpLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSwKQEAgLTE5NDEsNyAmIzQzOzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHsKIAkudGltZW91dAk9IG5iZF94bWl0X3RpbWVvdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpCiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLAomIzQzOwkJCQkgICAgICAgaW50IG5yX2h3X3F1ZXVlcykKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHsKIAkJLm1heF9od19zZWN0b3JzCQk9IDY1NTM2LApAQCAtMTk1OCw3ICYjNDM7MTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcykKIAkJZ290byBvdXQ7CiAKIAluYmQtJmd0O3RhZ19zZXQub3BzID0gJmFtcDtuYmRfbXFfb3BzOwotCW5iZC0mZ3Q7dGFnX3NldC5ucl9od19xdWV1ZXMgPSAxOwomIzQzOwluYmQtJmd0O3RhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzOwogCW5iZC0mZ3Q7dGFnX3NldC5xdWV1ZV9kZXB0aCA9IDEyODsKIAluYmQtJmd0O3RhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFOwogCW5iZC0mZ3Q7dGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7CkBAIC0yMTA3LDYgJiM0MzsyMTEyLDU4IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogV2FsayB0aGUgTkJEX0FUVFJfU09DS0VUUyBuZXN0ZWQgbGlzdCBjYW4gY2FsbCBAY2IgZm9yIGVhY2ggc29ja2V0IGZkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZmRzIHdhbGtlZCwgb3IgYSBuZWdhdGl2ZSBlcnJuby4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAomIzQzOwkJaW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZCksCiYjNDM7CQlzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqYXR0cjsKJiM0MzsJaW50IHJlbSwgY291bnQgPSAwOwomIzQzOwomIzQzOwlpZiAoIWluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkgewomIzQzOwkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICYjNDM7IDFdOwomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCWlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7c29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCiYjNDM7CQkJCQkJYXR0ciwKJiM0MzsJCQkJCQluYmRfc29ja19wb2xpY3ksCiYjNDM7CQkJCQkJaW5mby0mZ3Q7ZXh0YWNrKSkgewomIzQzOwkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWNvdW50JiM0MzsmIzQzOzsKJiM0MzsJCWlmIChjYikgewomIzQzOwkJCXJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTsKJiM0MzsJCQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQkJcmV0dXJuIGNvdW50OwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7CkBAIC0yMTU5LDcgJiM0MzsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCW11dGV4X3VubG9jaygmYW1wO25iZF9pbmRleF9tdXRleCk7CiAKIAlpZiAoIW5iZCkgewotCQluYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7CiYjNDM7CQlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJbmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCAmZ3Q7IDAgPyByZXQgOiAxKTsKIAkJaWYgKElTX0VSUihuYmQpKSB7CiAJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcbiYjMzQ7KTsKIAkJCXJldHVybiBQVFJfRVJSKG5iZCk7CkBAIC0yMjI2LDM2ICYjNDM7MjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAJfQogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7Ci0JCXN0cnVjdCBubGF0dHIgKmF0dHI7Ci0JCWludCByZW0sIGZkOwotCi0JCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sCi0JCQkJICAgIHJlbSkgewotCQkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTsKLQotCQkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKLQkJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCi0JCQkJCQkJICBhdHRyLAotCQkJCQkJCSAgbmJkX3NvY2tfcG9saWN5LAotCQkJCQkJCSAgaW5mby0mZ3Q7ZXh0YWNrKTsKLQkJCWlmIChyZXQgIT0gMCkgewotCQkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQotCQkJCWNvbnRpbnVlOwotCQkJZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7Ci0JCQlyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQl9CiYjNDM7CXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiAKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkgewogCQluYmQtJmd0O2JhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sCkBAIC0yMzQ0LDYgJiM0MzsyMzc4LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQgPSBOVUxMOwpAQCAtMjQ0MCw0MCAmIzQzOzI0NzksMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAJfQogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7Ci0JCXN0cnVjdCBubGF0dHIgKmF0dHI7Ci0JCWludCByZW0sIGZkOwotCi0JCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sCi0JCQkJICAgIHJlbSkgewotCQkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTsKLQotCQkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKLQkJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCi0JCQkJCQkJICBhdHRyLAotCQkJCQkJCSAgbmJkX3NvY2tfcG9saWN5LAotCQkJCQkJCSAgaW5mby0mZ3Q7ZXh0YWNrKTsKLQkJCWlmIChyZXQgIT0gMCkgewotCQkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQotCQkJCWNvbnRpbnVlOwotCQkJZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7Ci0JCQlyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlpZiAocmV0ID09IC1FTk9TUEMpCi0JCQkJCXJldCA9IDA7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksICYjMzQ7cmVjb25uZWN0ZWQgc29ja2V0XG4mIzM0Oyk7Ci0JCX0KLQl9CiYjNDM7CXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTsKJiM0MzsJLyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi8KJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJcmV0ID0gMDsKIG91dDoKIAltdXRleF91bmxvY2soJmFtcDtuYmQtJmd0O2NvbmZpZ19sb2NrKTsKIAluYmRfY29uZmlnX3B1dChuYmQpOwpAQCAtMjcyNSw4ICYjNDM7MjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKQogCX0KIAluYmRfZGJnX2luaXQoKTsKIAomIzQzOwlpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgJmx0OyAxKQomIzQzOwkJcHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxOwomIzQzOwkvKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwCiYjNDM7CSAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBuYmRzX21heDsgaSYjNDM7JiM0MzspCi0JCW5iZF9kZXZfYWRkKGksIDEpOwomIzQzOwkJbmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzg3LDMgJiM0MzsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KSYjMzQ7KTsKIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsICYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpJiMzNDspOwomIzQzO21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLAomIzQzOyYjMzQ7bnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKSYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQkQgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgTkJEIGRyaXZlciBwYXRjaC4gRnJvbSB3aGF0IEkgc2VlLCB3ZSYjMzk7dmUgZ290IGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBUaGlzIGlzIGZvY3VzZWQgb24gZW5oYW5jaW5nIGhvdyB0aGUgTkJEIGRyaXZlciBtYW5hZ2VzIGl0cyBzb2NrZXRzLCBxdWV1ZSBsaW1pdHMsIGFuZCBjb25uZWN0aW9ucy4gVGhlIGtleSBjaGFuZ2VzIGFyZSByZWFsbHkgYXJvdW5kIGltcHJvdmluZyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBvZiB0aGUgTkJEIGRldmljZXMuCgpGaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgbmJkX2FwcGx5X2xpbWl0c2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGdhaW5pbmcgbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgdGhlIGJsb2NrIHF1ZXVlIGxpbWl0cy4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGBuYmRfc2V0X3NpemVgIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhpcyBuZXcgZnVuY3Rpb24sIHN1Z2dlc3RpbmcgdGhhdCB3ZSYjMzk7cmUgdGlnaHRlbmluZyBob3cgc2l6ZSBjaGFuZ2VzIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBpbnRlcnR3aW5lZC4gVGhlIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBgZmluZF9mYWxsYmFja2AgbG9naWMgaXMgYWx3YXlzIHdlbGNvbWUg4oCTIGNsZWFuZXIgY29kZSBpcyBsZXNzIHByb25lIHRvIGJ1Z3MuCgpOb3csIEkgZmluZCB0aGUgY2hhbmdlcyBpbiBgbmJkX2FkZF9zb2NrZXRgIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGNoZWNrIGZvciBgbmJkLSZndDtwaWRgIHRvIHByZXZlbnQgYWRkaW5nIHNvY2tldHMgdG8gYSBydW5uaW5nIGRldmljZSBpcyBjcnVjaWFsIGZvciByb2J1c3RuZXNzLiBUaGUgcmVtb3ZhbCBvZiBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgYW5kIGBibGtfbXFfdW5mcmVlemVfcXVldWVgIHN1Z2dlc3RzIHdlJiMzOTtyZSBzdHJlYW1saW5pbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAsIG1heWJlIGF2b2lkaW5nIHNvbWUgYmxvY2tpbmcgb3BlcmF0aW9ucy4gYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCByZXR1cm5pbmcgMSBvbiBzdWNjZXNzIChpbnN0ZWFkIG9mIGAtRU5PU1BDYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSBhbmQgZ29vZCB0byBzZWUuIFRoZSBkZWZhdWx0IHF1ZXVlIGxpbWl0cyByZXNldCBpbiBgbmJkX2NvbmZpZ19wdXRgIGlzIGFsc28gc3RhbmRhcmQsIGVuc3VyaW5nIGEgcHJlZGljdGFibGUgc3RhdGUuIFRoZSBhcmd1bWVudCBjaGFuZ2UgdG8gYG5iZF9kZXZfYWRkYCAodGFraW5nIGBucl9od19xdWV1ZXNgKSBpcyBmaW5lLCBhbmQgZ29vZCB0byBzZWUgbW9yZSBtb2Rlcm4gaGFyZHdhcmUgc3VwcG9ydGVkLgoKV2UgYWxzbyBoYXZlIHRoZXNlIG5ldyBOZXRsaW5rLXJlbGF0ZWQgZnVuY3Rpb25zLCBgbmJkX2dlbmxfZm9yZWFjaF9zb2NrYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gVGhpcyBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBzaGlmdCB0b3dhcmRzIGNvbmZpZ3VyaW5nIE5CRCBkZXZpY2VzIHZpYSBOZXRsaW5rLCB3aGljaCBpcyBleGNlbGxlbnQgZm9yIGF1dG9tYXRpb24gYW5kIGR5bmFtaWMgY29uZmlndXJhdGlvbi4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgcHJlX2RlZmluZWRfY29ubmVjdGlvbnNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgYWxzbyBhIGdvb2QgYWRkaXRpb24uCgpGcm9tIGEgdmlydHVhbGl6ZWQgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYWxsIHRvdGFsbHkgdGVzdGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyByZWFzc3VyaW5nLiBQbHVzLCBnaXZlbiB0aGUgY2hhbmdlcywgaXQgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZXNlIGNvbm5lY3Rpb25zLgoKU28sIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfQkxLX0RFVl9OQkRgLiBHb29kLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhhdC4gQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2ggdGhhdCBlbmhhbmNlcyB0aGUgTkJEIGRyaXZlciYjMzk7cyBjb25maWd1cmFiaWxpdHksIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBvdmVyYWxsIHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSBmb3IgQkxLX0RFVl9OQkQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX05CRGAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHdoYXQgbWFrZXMgdGhpcyBibG9jayBkZXZpY2UgdGljay4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdXBzdHJlYW0gaW1wbGljYXRpb25zLCB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGltcGFjdC4gV2UmIzM5O3JlIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzaW1wbGUgYnVpbGQgZmxhZzsgd2UmIzM5O3JlIGludmVzdGlnYXRpbmcgYSBwaWVjZSBvZiB0aGUga2VybmVsIHRoYXQgaW50ZXJhY3RzIHdpdGggc3RvcmFnZSwgbmV0d29ya2luZywgYW5kIHBvdGVudGlhbGx5IHVzZXItc3BhY2UgdG9vbHMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IG5ldHdvcmsgcHJvdG9jb2xzLCBlbmNyeXB0aW9uIG1vZHVsZXMgKGlmIGFwcGxpY2FibGUpLCB1bmRlcmx5aW5nIGJsb2NrIGxheWVyIGNvbXBvbmVudHMsIGFuZCBhbnkgdXNlci1zcGFjZSBoZWxwZXJzIG9yIGxpYnJhcmllcy4gVGhlIGdvYWwgaXNuJiMzOTt0IGp1c3QgdG8gc2VlICp3aGF0KiBkZXBlbmRzIG9uIGl0LCBidXQgYWxzbyB0byB1bmRlcnN0YW5kIHRoZSAqc3RyZW5ndGgqIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjaXJjdWxhciByZWZlcmVuY2VzLiBBcmUgd2UgbG9va2luZyBhdCBkaXJlY3QsIGhhcmQgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhlcmUgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGF0IHBsYXk/IEEgZ29vZCB1bmRlcnN0YW5kaW5nIGhlcmUgaGVscHMgdG8gcGxhbiBmb3IgcG90ZW50aWFsIHN5c3RlbS1sZXZlbCBjaGFuZ2VzLCBpbmNsdWRpbmcgdGhlIGltcGFjdCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1vZHVsZSBsb2FkaW5nLCBhbmQgdGhlIGJvb3QgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2VzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz02PW1lbnVjb25maWcgQkxLX0RFVlxuZHJpdmVycy9ibG9jay9LY29uZmlnLTctXHRib29sIFwmIzM0O0Jsb2NrIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBCTE9DS1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjI9Y29uZmlnIEJMS19ERVZfRkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O05vcm1hbCBmbG9wcHkgZGlzayBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIEFSQ0hfTUFZX0hBVkVfUENfRkRDXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTM3PWNvbmZpZyBCTEtfREVWX0ZEX1JBV0NNRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciByYXcgZmxvcHB5IGRpc2sgY29tbWFuZHMgKERFUFJFQ0FURUQpXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Mzk6XHRkZXBlbmRzIG9uIEJMS19ERVZfRkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9NTM9Y29uZmlnIEFNSUdBX0ZMT1BQWVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgZmxvcHB5IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gQU1JR0FcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy01Ni1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZz01Nz1jb25maWcgQVRBUklfRkxPUFBZXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtBdGFyaSBmbG9wcHkgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjU5Olx0ZGVwZW5kcyBvbiBBVEFSSVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTYwLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTYxPWNvbmZpZyBNQUNfRkxPUFBZXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBQb3dlck1hYyBmbG9wcHlcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2MzpcdGRlcGVuZHMgb24gUFBDX1BNQUMgXHUwMDI2XHUwMDI2ICFQUENfUE1BQzY0XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjQtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTY4PWNvbmZpZyBCTEtfREVWX1NXSU1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02OS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFNXSU0gTWFjaW50b3NoIGZsb3BweVwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBNNjhLIFx1MDAyNlx1MDAyNiBNQUMgXHUwMDI2XHUwMDI2ICFISUdITUVNXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNzEtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTc1PWNvbmZpZyBBTUlHQV9aMlJBTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTc2LVx0dHJpc3RhdGUgXCYjMzQ7QW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Nzc6XHRkZXBlbmRzIG9uIFpPUlJPXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNzgtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTg2PWNvbmZpZyBONjRDQVJUXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctODctXHRib29sIFwmIzM0O042NCBjYXJ0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo4ODpcdGRlcGVuZHMgb24gTUFDSF9OSU5URU5ETzY0XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctODktXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTk1PWNvbmZpZyBHRFJPTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk2LVx0dHJpc3RhdGUgXCYjMzQ7U0VHQSBEcmVhbWNhc3QgR0QtUk9NIGRyaXZlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk4LVx0c2VsZWN0IENEUk9NXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTExMT1jb25maWcgQkxLX0RFVl9VQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xMTItXHRib29sIFwmIzM0O1ZpcnR1YWwgYmxvY2sgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTEzOlx0ZGVwZW5kcyBvbiBVTUxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xMTQtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTEyMD1jb25maWcgQkxLX0RFVl9VQkRfU1lOQ1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTEyMS1cdGJvb2wgXCYjMzQ7QWx3YXlzIGRvIHN5bmNocm9ub3VzIGRpc2sgSU8gZm9yIFVCRFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjEyMjpcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTE3OT1jb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXHRkZWZhdWx0IDhcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk2PWNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTg6XHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5OS1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjQzPWNvbmZpZyBCTEtfREVWX1JBTV9DT1VOVFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNDUtXHRkZWZhdWx0IFwmIzM0OzE2XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjQ2Olx0ZGVwZW5kcyBvbiBCTEtfREVWX1JBTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI0Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjUyPWNvbmZpZyBCTEtfREVWX1JBTV9TSVpFXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjUzLVx0aW50IFwmIzM0O0RlZmF1bHQgUkFNIGRpc2sgc2l6ZSAoa2J5dGVzKVwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI1NDpcdGRlcGVuZHMgb24gQkxLX0RFVl9SQU1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNTUtXHRkZWZhdWx0IFwmIzM0OzQwOTZcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjYwPWNvbmZpZyBBVEFfT1ZFUl9FVEhcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNjEtXHR0cmlzdGF0ZSBcJiMzNDtBVEEgb3ZlciBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjYyOlx0ZGVwZW5kcyBvbiBORVRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNjMtXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI2Nz1jb25maWcgU1VOVkRDXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjY4LVx0dHJpc3RhdGUgXCYjMzQ7U3VuIFZpcnR1YWwgRGlzayBDbGllbnQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI2OTpcdGRlcGVuZHMgb24gU1VOX0xET01TXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjcwLVx0aGVscFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0yNzY9Y29uZmlnIFhFTl9CTEtERVZfRlJPTlRFTkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzctXHR0cmlzdGF0ZSBcJiMzNDtYZW4gdmlydHVhbCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI3ODpcdGRlcGVuZHMgb24gWEVOXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjc5LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI4Nj1jb25maWcgWEVOX0JMS0RFVl9CQUNLRU5EXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjg3LVx0dHJpc3RhdGUgXCYjMzQ7WGVuIGJsb2NrLWRldmljZSBiYWNrZW5kIGRyaXZlclwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjI4ODpcdGRlcGVuZHMgb24gWEVOX0JBQ0tFTkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yODktXHRoZWxwXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTMwNz1jb25maWcgVklSVElPX0JMS1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTMwOC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnRpbyBibG9jayBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMDk6XHRkZXBlbmRzIG9uIFZJUlRJT1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTMxMC1cdHNlbGVjdCBTR19QT09MXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtSYWRvcyBibG9jayBkZXZpY2UgKFJCRClcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMTc6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IEJMT0NLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzE4LVx0c2VsZWN0IENFUEhfTElCXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnPTMzNz1jb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzM5Olx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNDAtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1ODpcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1OS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyIChgQkxLX0RFVl9OQkRgKS4gSXQgcmVsaWVzIG9uIGBORVRgIGFuZCBgQkxPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3QgYXJlYXMgZm9yIGZ1enppbmcsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIG5hcnJvd2VkIGl0IGRvd24uIFRoaXMgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgdGhlIE5CRCBjb2RlOiBgbmJkX2FwcGx5X2xpbWl0c2AsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfcmVjb25uZWN0X3NvY2tldGAsIGBuYmRfY29uZmlnX3B1dGAsIGBuYmRfZGV2X2FkZGAsIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLgoKQmFzZWQgb24gdGhvc2UgZnVuY3Rpb25zLCBteSBpbml0aWFsIHRhcmdldCBmb2N1cyBpcyBnb2luZyB0byBiZSBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfcmVjb25uZWN0X3NvY2tldGAsIGFuZCBgbmJkX3NldF9zaXplYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb25maWd1cmF0aW9uIHBvaW50cywgdGhlcmVmb3JlIGdvb2QgcGxhY2VzIGZvciBmaW5kaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpXYWl0IGEgc2Vjb25k4oCmIGFyZW4mIzM5O3QgYG5iZF9hZGRfc29ja2V0YCBhbmQgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBzdGF0aWMgZnVuY3Rpb25zPyBUaGF0IGNvdWxkIGFmZmVjdCB0aGUgZnV6emluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xMjc0PXN0YXRpYyBpbmxpbmUgdm9pZCBuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaykge31cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNzYtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNzc6c3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3OC1cdFx0XHQgIGJvb2wgbmV0bGluaylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2MzQ9c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0Ni1cdGNhc2UgTkJEX1NFVF9TT0NLOlxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjQ3Olx0XHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBhcmcsIGZhbHNlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjE2Mj1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xuZHJpdmVycy9ibG9jay9uYmQuYzoyMTY0Olx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBOQkQgS2VybmVsIE1vZHVsZSBFbnRyeSBQb2ludHMqKgoKQWxyaWdodCwgdGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBOQkQga2VybmVsIGVudHJ5IHBvaW50cyBhcmUgc3RhdGljLCBhbmQgdGhlIGFuc3dlciBpcyB5ZXMsIHRoZXkgc2VlbSB0byBiZS4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgaWRlbnRpZnkgdGhvc2Uga2V5IGVudHJ5IHBvaW50cy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAgKG9yIHBvc3NpYmx5IGBfX25iZF9pb2N0bGAsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQpIGFyZSB0aGUgcHJpbWFyeSBzdXNwZWN0cy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBjbG9zZWx5LCBmaWd1cmUgb3V0IHRoZWlyIHJvbGVzIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vZHVsZSYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0yMTIwPXN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2My17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTY3OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyOTA6XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjkxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5OC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk5Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9jb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTAwLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgSXRzIFBvdGVudGlhbCBVc2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuYmRfZ2VubF9jb25uZWN0YCBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3Mgc3RhdGljIHRvby4gQnV0IGhvbGQgb24sIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBuZXRsaW5rIGNhbGxiYWNrLCBpc24mIzM5O3QgaXQ/IFRoYXQgY2hhbmdlcyB0aGluZ3MuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIGxldmVyYWdlIGBuYmRfZ2VubF9jb25uZWN0YCB3aXRoaW4gYEZvY3VzU3ltYm9sc2AuCgpXYWl0IGEgbWludXRlLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyBldmVuIGJlIHVzZWQgaW4gYEZvY3VzU3ltYm9sc2A/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGd1aWRhbmNlLiBBaCwgcmlnaHQsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogdGhleSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGUgcnVsZSBpcyB0byBhdm9pZCBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBsZWFkaW5nIHRvIGEgbG9zcyBvZiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQuLi4gbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4uLiBib3RoIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgcmVnaXN0ZXJlZCBhcyBjYWxsYmFja3Mgd2l0aGluIGBuYmRfY29ubmVjdF9nZW5sX29wc2AuIFNpbmNlIHRoZXkgYXJlIGNhbGxiYWNrcywgdGhleSBhcmUgKm5vdCogaW5saW5lZCBhbmQgZG8gaW5kZWVkIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCBtYWtlcyBhbGwgdGhlIGRpZmZlcmVuY2UhCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMgdG8gY29uc2lkZXIgYmVmb3JlIHdlIGZpbmFsaXplIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjM4MT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzODY6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzg3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwOC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA5Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxMC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzA0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhbmQgYSBib2xkZWQgaGVhZGVyOgoKKipEaXZpbmcgaW50byB0aGUgYG5iZF9pb2N0bGAgUmFiYml0IEhvbGUqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhpcyBhZ2FpbiwgYW5kIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogV2hhdCBhYm91dCBgbmJkX2lvY3RsYD8gSXQmIzM5O3MgdGhlIGx5bmNocGluLCBpc24mIzM5O3QgaXQ/IFRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGFueSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIE5CRCBzdGFjay4gSXTigJlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJZiB3ZSBhcmUgdHJ5aW5nIHRvIHJlc29sdmUgc29tZSBpc3N1ZSwgb3Igb3B0aW1pemUgdGhpbmdzLCB0aGVuIHRoZSBgaW9jdGxgIGNhbGxzIGFyZSB0aGUgZmlyc3QgdGhpbmcgdGhhdCByZXF1aXJlIGluc3BlY3Rpb24uIEl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHZhcmlvdXMgYWNjZXNzIGlzc3Vlcy4gQW5kIGFzIGFueSBOQkQgZXhwZXJ0IGtub3dzLCBpdCBjYW4gYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uIGFuZCBzdWJ0bGUgYnVncyBpZiBub3QgaW1wbGVtZW50ZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBJdOKAmXMgdGhlIGdhdGV3YXksIHRoZSBjb21tYW5kIGNlbnRlciwgdGhl4oCmIHdlbGwsIHlvdSBnZXQgdGhlIGlkZWEuIFdpdGhvdXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMsIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbnRlcmZhY2UsIHdlJiMzOTtyZSBmbHlpbmcgYmxpbmQsIHRydWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTYyND1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzNDpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgyLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMy1cdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDQ6XHRcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDUtXHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMi1cdC5yZWxlYXNlID1cdG5iZF9yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOlx0LmlvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNDpcdC5jb21wYXRfaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVx0LmZyZWVfZGlzayA9XHRuYmRfZnJlZV9kaXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBUEkgRW50cnlwb2ludCBGdW5jdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgbmJkX2lvY3RsYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIEkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2YgaXQgYWxvbmcgd2l0aCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgX19uYmRfaW9jdGxgIGJlY2F1c2UgdGhleSBhcmUgYWxsIHN0YXRpYyB0b28uIE5vdywgdGhlIGluc3RydWN0aW9ucyBoZXJlIHNwZWNpZnkgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFNpbmNlIHRoZXkgYXJlIGFsbCBzdGF0aWMsIEkgd2lsbCBoYXZlIHRvIGRlZmF1bHQgdG8gdGhlc2UgY2FsbGJhY2tzLiBOb3cgbGV0JiMzOTtzIGNoZWNrIGBuYmRfYXBwbHlfbGltaXRzYC4gQWgsIGl0JiMzOTtzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGlubGluZWQgdG9vLiBIbW0sIGBuYmRfc2V0X3NpemVgIGlzIGFsc28gc3RhdGljLiBBbmQgc28gaXMgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYEJMS19ERVZfTkJEYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCB0aGFua2Z1bGx5IGl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBCTE9DS2AuIEFscmlnaHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBTbywgSSB3aWxsIGFkZCBgQkxLX0RFVl9OQkRgIHRvIGBFbmFibGVDb25maWdzYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgZHJpdmVyczoKCioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyJiMzOTtzIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgb2YgdGhlIE5CRCBkcml2ZXIuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGVyZSwgc3BlY2lmaWNhbGx5IGAjaWZkZWZgcy4gVGhvc2UgdGhpbmdzIGFsd2F5cyB3YXJyYW50IGEgY2xvc2VyIGxvb2suIFRoZXkgdXN1YWxseSBpbmRpY2F0ZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCBmZWF0dXJlIGZsYWdzLCBvciwgd29yc3QtY2FzZSBzY2VuYXJpbywgY3J1ZnQgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgaW50cm9kdWNpbmcgY29tcGxleGl0eSBvciBwb3RlbnRpYWwgYnVncyB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBjb2RlYmFzZS4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgc2NhbiB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbmFsIGJyYW5jaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTIxMz1zdGF0aWMgc3RydWN0IHNvY2tldCAqbmJkX2dldF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDE6I2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyNDItc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuYmRfa2V5WzNdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBOQkQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBmb3IgTkJELiBJdCBsb29rcyBsaWtlIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGlzIGBCTEtfREVWX05CRGAsIG5vdGhpbmcgbW9yZSBzcGVjaWZpYyB0aGFuIHRoYXQuIE15IGZvY3VzLCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGFzaywgbmVlZHMgdG8gYmUgYXMgY29uY2lzZSBhcyBwb3NzaWJsZSwgc28gdGhhdCBpcyBrZXkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsLiBJJiMzOTt2ZSBpbml0aWFsbHkgZmxhZ2dlZCB0aGVzZSBhcyBwcmltYXJ5IHRhcmdldHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9pb2N0bGAsIGBfX25iZF9pb2N0bGAsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfcmVjb25uZWN0X3NvY2tldGAsIGFuZCBgbmJkX3NldF9zaXplYC4KClRoaW5raW5nIGFib3V0IHRoZSBjYWxsIGZsb3csIGBuYmRfYWRkX3NvY2tldGAgYW5kIGBuYmRfcmVjb25uZWN0X3NvY2tldGAgYXJlIGNhbGxlZCB0aHJvdWdoIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCB2aWEgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AuIGBuYmRfc2V0X3NpemVgIGlzIGNhbGxlZCB2aWEgYG5iZF9pb2N0bGAgYW5kIGBuYmRfZ2VubF9jb25uZWN0YC9gbmJkX2dlbmxfcmVjb25maWd1cmVgLiBTbywgdGhlc2Ugd291bGQgc2VlbSB0byBiZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuCgpIb3dldmVyLCBhIHF1aWNrIHNlY29uZCB0aG91Z2h0LCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGxvb2sgbGlrZSBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW5saW5pbmcuIFRoZXkgYXJlIHBhc3NlZCBhcyBjYWxsYmFja3MgdG8gYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgdXNpbmcgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgYW5kIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAsIHNvIEkgbWlnaHQgbmVlZCB0byBkaWcgaW50byB0aGUgYWN0dWFsIHN0cnVjdHVyZSBvZiB0aGVzZSBjYWxsYmFja3MuIEluZGVlZCwgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgY2FsbHMgYG5iZF9hZGRfc29ja2V0YC4gVGhlIHNhbWUgbXVzdCBiZSB0cnVlIG9mIHRoZSByZWNvbm5lY3QuCgpUbyBtYWtlIHRoaW5ncyBjbGVhbiwgbGV0IG1lIHJlZHVjZSB0aGUgbGlzdCwgdG8gY29uc2lkZXIgb25seSB0aGUgY29yZSBlbnRyeSBwb2ludHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9pb2N0bGAsIGBuYmRfYWRkX3NvY2tldGAsIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLgoKSSYjMzk7bGwgYWxzbyB0YWtlIGEgbG9vayBhdCBgbmJkX2Rldl9hZGRgIGFzIHBhcnQgb2YgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2Rldl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NDg6c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTQ5LVx0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMTY3PXN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjIyMi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjIyMzpcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjI0LVx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2ODk9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDM6XHRcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc0NC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHRha2Ugb24gdGhpcy4KCioqSW50ZXJuYWwgQ2hlY2tsaXN0IGZvciBOQkQgTW9kdWxlIFJldmlldyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgbmJkX2Rldl9hZGRgIGlzIGFsc28gc3RhdGljLiBNYWtlcyBzZW5zZSBmb3IgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIG1vZHVsZSwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgaG93IGl0JiMzOTtzIGNhbGxlZC4KClRoZW4sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgcGllY2VzIGludm9sdmVkIGluIGNvbm5lY3Rpb24sIHJlY29uZmlndXJhdGlvbiwgSU8gY29udHJvbCwgYW5kIHNpemUgbWFuYWdlbWVudC4gSSBrbm93IHRob3NlIGFyZWFzIGFyZSBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgYml0cyBhbmQgcGllY2VzIG9mIGFueSBOQkQgaW1wbGVtZW50YXRpb24gbGl2ZS4KCkJlZm9yZSBJIGdldCB0b28gZGVlcCwgdGhvdWdoLCBhIGJyaWVmIHNjYW4gb2YgYG5iZF9hcHBseV9saW1pdHNgIGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhLiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyB3aXRoIHRob3NlIGxpbWl0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2FwcGx5X2xpbWl0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0zMDY9c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM0LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMzU6c3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTM1NT1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc1LVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM3NjpcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCBuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc3LVx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDY4PXN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDc3LVx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ3ODpcdFx0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIDApO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNDc5LVx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MzYKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgbW9zdCBzaWduaWZpY2FudCBwb2ludHMgc2VlbSB0byByZXZvbHZlIGFyb3VuZCBzb2NrZXQgbWFuYWdlbWVudCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBzeXN0ZW0uIEl0IHNlZW1zIHdlJiMzOTtyZSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggYWRqdXN0bWVudHMgdG8gaG93IHRoZSBzb2NrZXRzIGFyZSBhZGRlZCBhbmQgcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBvcmNoZXN0cmF0ZWQsIGJvdGggdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGNhbGxzLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBkcml2ZXIgbG9naWMgYnV0IGNsZWFybHkgY3JpdGljYWwgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgYXMgdGhlIHRlY2hub2xvZ3kgc2VlcyBjb250aW51ZWQgZGVwbG95bWVudC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgbmJkX2FwcGx5X2xpbWl0c2AgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYXMgaXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gYm90aCBgbmJkX3NldF9zaXplYCBhbmQgYG5iZF9jb25maWdfcHV0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0byB0cmFjZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGJlY2F1c2UgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCByaXBwbGVzIG91dHdhcmRzLgoKRnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBkcml2ZXIgbG9naWMgYXJlIGEgaHVnZSB3aW4uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHZhbGlkYXRlIHRoZXNlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdoaWNoIHNob3VsZCBhY2NlbGVyYXRlIHRoZSBvdmVyYWxsIHF1YWxpdHkgYXNzZXNzbWVudCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIGBCTEtfREVWX05CRGAgY29uZmlnIG9wdGlvbiDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZGVwZW5kZW5jeS4KCk5vdywgYXMgSSBkaWcgZGVlcGVyLCBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlc2Ugc3ltYm9sczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBUaGV5IGFyZSBlc3NlbnRpYWxseSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJJiMzOTtsbCBjYWxsIHRoaXMgc2V0IG9mIHN0ZXBzLCB0aGUgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfYWRkX3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfcmVjb25uZWN0X3NvY2tldCYjMzQ7LAogICAgJiMzNDtuYmRfc2V0X3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBzb2NrZXRzIGFyZSBhZGRlZC9yZWNvbm5lY3RlZCwgaG93IHF1ZXVlIGxpbWl0cyBhcmUgYXBwbGllZCwgYW5kIGhvdyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZCB2aWEgTmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2FkZF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3JlY29ubmVjdF9zb2NrZXQmIzM0OywKICAgICYjMzQ7bmJkX3NldF9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6MTguODYzNTQ1NjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxNTQ3MjgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX3JlY29ubmVjdF9zb2NrZXRcIixcbiAgICBcIm5iZF9zZXRfc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjoxOC44NjM1NTM5ODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDc4MjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzNGQzZGEzZGIyMzQ4Yzc1NTYzZWQ5NWQ5YmI5ZWI0OTg0NjgzNDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAwNzozNjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmY4ZjUxZGYzMWFkYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjtcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjtcXG4gc3RhdGljIGludCBtYXhfcGFydCA9IDE2O1xcbitzdGF0aWMgaW50IHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zID0gMTtcXG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xcbiBcXG4gc3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbkBAIC0zMzEsNiArMzMyLDI2IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcXG4gXFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBuYmRfYXBwbHlfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdTMyIGZsYWdzKVxcbit7XFxuK1xcdGxpbS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xcbitcXHRsaW0tXFx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xcbitcXHRsaW0tXFx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXFxuK1xcdFxcdGxpbS1cXHUwMDNlbWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkge1xcbitcXHRcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX0ZVQSlcXG4rXFx0XFx0XFx0bGltLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXFxuK1xcdFxcdGxpbS1cXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9XUklURV9aRVJPRVMpXFxuK1xcdFxcdGxpbS1cXHUwMDNlbWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbkBAIC0zNTIsMjYgKzM3MywxNCBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuLVxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXFxuLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4tXFx0aWYgKCEobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcXG4tXFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEpO1xcbi1cXHR9IGVsc2UgaWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XFxuLVxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbi1cXHRcXHRsaW0uZmVhdHVyZXMgXFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcXG4tXFx0fVxcbi1cXHRpZiAobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfUk9UQVRJT05BTClcXG4tXFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7XFxuLVxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcXG4tXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4tXFxuK1xcdG5iZF9hcHBseV9saW1pdHMoXFx1MDAyNmxpbSwgbmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzKTtcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcXG4tXFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdC8qIE5vIG5lZWQgZnJlZXplIHdpdGggMCBjYXBhY2l0eSBhbmQgd3JpdGUgY2FjaGUgZGlzYWJsZWQgKi9cXG4rXFx0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVxcdTAwM2VkaXNrKSBcXHUwMDI2XFx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpKVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuQEAgLTEwNjEsNDAgKzEwNzAsMzEgQEAgc3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcXG4gXFx0aW50IG5ld19pbmRleCA9IC0xO1xcbiBcXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLVxcdTAwM2Vzb2Nrc1tpbmRleF07XFxuIFxcdGludCBmYWxsYmFjayA9IG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleDtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAodGVzdF9iaXQoTkJEX1JUX0RJU0NPTk5FQ1RFRCwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlcnVudGltZV9mbGFncykpXFxuIFxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuIFxcbi1cXHRpZiAoY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgXFx1MDAzYz0gMSkge1xcbi1cXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuLVxcdFxcdFxcdFxcdCAgICBcXFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4tXFx0fVxcbitcXHRpZiAoY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgXFx1MDAzYz0gMSlcXG4rXFx0XFx0Z290byBub19mYWxsYmFjaztcXG4gXFxuIFxcdGlmIChmYWxsYmFjayBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGZhbGxiYWNrIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFjb25maWctXFx1MDAzZXNvY2tzW2ZhbGxiYWNrXS1cXHUwMDNlZGVhZClcXG4gXFx0XFx0cmV0dXJuIGZhbGxiYWNrO1xcbiBcXG4tXFx0aWYgKG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCBcXHUwMDNjIDAgfHxcXG4tXFx0ICAgIG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCBcXHUwMDNlPSBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucyB8fFxcbi1cXHQgICAgY29uZmlnLVxcdTAwM2Vzb2Nrc1tuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXhdLVxcdTAwM2VkZWFkKSB7XFxuLVxcdFxcdGludCBpO1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAoaSA9PSBpbmRleClcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGlmICghY29uZmlnLVxcdTAwM2Vzb2Nrc1tpXS1cXHUwMDNlZGVhZCkge1xcbi1cXHRcXHRcXHRcXHRuZXdfaW5kZXggPSBpO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdFxcdG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcXG4tXFx0XFx0aWYgKG5ld19pbmRleCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9uczsgaSsrKSB7XFxuK1xcdFxcdGlmIChpICE9IGluZGV4IFxcdTAwMjZcXHUwMDI2ICFjb25maWctXFx1MDAzZXNvY2tzW2ldLVxcdTAwM2VkZWFkKSB7XFxuK1xcdFxcdFxcdG5ld19pbmRleCA9IGk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0bmV3X2luZGV4ID0gbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4O1xcbitcXHRuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XFxuK1xcdGlmIChuZXdfaW5kZXggXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0dXJuIG5ld19pbmRleDtcXG4rXFxuK25vX2ZhbGxiYWNrOlxcbitcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuK1xcdFxcdFxcdCAgICBcXFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuIG5ld19pbmRleDtcXG4gfVxcbiBcXG5AQCAtMTI4MSwyMyArMTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xcbiBcXHRzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrcztcXG4gXFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcXG4tXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovXFxuIFxcdGlmIChhcmcgXFx1MDAzZSBJTlRfTUFYKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChuYmQtXFx1MDAzZXBpZCkge1xcbitcXHRcXHRkZXZfZXJyKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuK1xcdFxcdFxcdFxcXCJDYW5ub3QgYWRkIHNvY2tldCB0byBhIHJ1bm5pbmcgZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbitcXG4gXFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcXHUwMDI2ZXJyKTtcXG4gXFx0aWYgKCFzb2NrKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRuYmRfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSdyZVxcbi1cXHQgKiByZWFsbG9jYXRpbmcgdGhlIC1cXHUwMDNlc29ja3MgYXJyYXkuXFxuLVxcdCAqL1xcbi1cXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuLVxcbiBcXHRpZiAoIW5ldGxpbmsgXFx1MDAyNlxcdTAwMjYgIW5iZC1cXHUwMDNldGFza19zZXR1cCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlcnVudGltZV9mbGFncykpXFxuIFxcdFxcdG5iZC1cXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XFxuQEAgLTEzMzcsMTIgKzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZuc29jay1cXHUwMDNld29yaywgbmJkX3BlbmRpbmdfY21kX3dvcmspO1xcbiBcXHRzb2Nrc1tjb25maWctXFx1MDAzZW51bV9jb25uZWN0aW9ucysrXSA9IG5zb2NrO1xcbiBcXHRhdG9taWNfaW5jKFxcdTAwMjZjb25maWctXFx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xcbi1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBwdXRfc29ja2V0Olxcbi1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xcbiBcXHRzb2NrZmRfcHV0KHNvY2spO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFxuIFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbmZpZy1cXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XFxuIFxcdFxcdHdha2VfdXAoXFx1MDAyNmNvbmZpZy1cXHUwMDNlY29ubl93YWl0KTtcXG4rXFx0XFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcXFwicmVjb25uZWN0ZWQgc29ja2V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0a2ZyZWUoYXJncyk7XFxuLVxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5AQCAtMTQ3MSw4ICsxNDcwLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX3JlZnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuYmQtXFx1MDAzZWNvbmZpZ19sb2NrKSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuK1xcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRcXHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xcbiBcXHRcXHRpbnZhbGlkYXRlX2Rpc2sobmJkLVxcdTAwM2VkaXNrKTtcXG4rXFx0XFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCAwKTtcXG4rXFx0XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuIFxcdFxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlYnl0ZXNpemUpXFxuIFxcdFxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZuYmRfdG9fZGV2KG5iZCktXFx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcXG4gXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX1BJRF9GSUxFLFxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG4gXFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuK3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuIFxcdFxcdC5tYXhfaHdfc2VjdG9yc1xcdFxcdD0gNjU1MzYsXFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuLVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbitcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XFxuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKSxcXG4rXFx0XFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4re1xcbitcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbitcXHRpbnQgcmVtLCBjb3VudCA9IDA7XFxuK1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sIHJlbSkge1xcbitcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggKyAxXTtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0YXR0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bmJkX3NvY2tfcG9saWN5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VleHRhY2spKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0XFx0aWYgKGNiKSB7XFxuK1xcdFxcdFxcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBmZClcXG4re1xcbitcXHRyZXR1cm4gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XFxuQEAgLTIxNTksNyArMjIxNiwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xcbiBcXG4gXFx0aWYgKCFuYmQpIHtcXG4tXFx0XFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xcbitcXHRcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcXHUwMDNlIDAgPyByZXQgOiAxKTtcXG4gXFx0XFx0aWYgKElTX0VSUihuYmQpKSB7XFxuIFxcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcXG5AQCAtMjIyNiwzNiArMjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xcbi1cXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbi1cXHRcXHRpbnQgcmVtLCBmZDtcXG4tXFxuLVxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXFxuLVxcdFxcdFxcdFxcdCAgICByZW0pIHtcXG4tXFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xcbi1cXG4tXFx0XFx0XFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBhdHRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG5iZF9zb2NrX3BvbGljeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbi1cXHRcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XFxuLVxcdFxcdFxcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbi1cXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdKSB7XFxuIFxcdFxcdG5iZC1cXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcXG5AQCAtMjM0NCw2ICsyMzc4LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuK3tcXG4rXFx0cmV0dXJuIG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XFxuQEAgLTI0NDAsNDAgKzI0NzksMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xcbi1cXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbi1cXHRcXHRpbnQgcmVtLCBmZDtcXG4tXFxuLVxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXFxuLVxcdFxcdFxcdFxcdCAgICByZW0pIHtcXG4tXFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xcbi1cXG4tXFx0XFx0XFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBhdHRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG5iZF9zb2NrX3BvbGljeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbi1cXHRcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4tXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XFxuLVxcdFxcdFxcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xcbi1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChyZXQgPT0gLUVOT1NQQylcXG4tXFx0XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcXFwicmVjb25uZWN0ZWQgc29ja2V0XFxcXG5cXFwiKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG4rXFx0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmJkLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuQEAgLTI3MjUsOCArMjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxcbiBcXHR9XFxuIFxcdG5iZF9kYmdfaW5pdCgpO1xcbiBcXG4rXFx0aWYgKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIFxcdTAwM2MgMSlcXG4rXFx0XFx0cHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxO1xcbitcXHQvKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwXFxuK1xcdCAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuXFxuK1xcdCAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmJkc19tYXg7IGkrKylcXG4tXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSk7XFxuK1xcdFxcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI3ODcsMyArMjgwMSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXFxcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcbittb2R1bGVfcGFyYW0ocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsIGludCwgMDQ0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0MocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsXFxuK1xcXCJudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yIGRldmljZXMgcHJlLWNyZWF0ZWQgYXQgbW9kdWxlIGxvYWQgKGRlZmF1bHQ6IDEpXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjE5LjI4OTA5NjA1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYxNzI5MTYxOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9yZWNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkL3JlY29ubmVjdGVkLCBob3cgcXVldWUgbGltaXRzIGFyZSBhcHBsaWVkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkIHZpYSBOZXRsaW5rIGFuZCBpb2N0bCBpbnRlcmZhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTM0ZDNkYTNkYjIzNDhjNzU1NjNlZDk1ZDliYjllYjQ5ODQ2ODM0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDc6MzY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggOGYxMDc2MmU5MGVmNy4uZjhmNTFkZjMxYWRhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbkBAIC0xNjYsNiArMTY2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm5iZF9kYmdfZGlyO1xuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjtcbiBzdGF0aWMgaW50IG1heF9wYXJ0ID0gMTY7XG4rc3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNiArMzMyLDI2IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbiBcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuYmRfYXBwbHlfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdTMyIGZsYWdzKVxuK3tcbitcdGxpbS1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcbitcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcbitcdGxpbS1cdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4rXHRcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbitcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkge1xuK1x0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXG4rXHRcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX0ZVQTtcbitcdH1cbitcbitcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfUk9UQVRJT05BTClcbitcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuK1x0XHRsaW0tXHUwMDNlbWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbkBAIC0zNTIsMjYgKzM3MywxNCBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSBVSU5UX01BWCBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUO1xuLVx0ZWxzZVxuLVx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4tXHRpZiAoIShuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX0ZMVVNIKSkge1xuLVx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTtcbi1cdH0gZWxzZSBpZiAobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpIHtcbi1cdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBO1xuLVx0fSBlbHNlIHtcbi1cdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuLVx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfRlVBO1xuLVx0fVxuLVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuLVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuLVx0XHRsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cbitcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCBuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzKTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xuLVx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4rXHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXG4rXHRpZiAoIWdldF9jYXBhY2l0eShuYmQtXHUwMDNlZGlzaykgXHUwMDI2XHUwMDI2ICFibGtfcXVldWVfd3JpdGVfY2FjaGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpKVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTEwNjEsNDAgKzEwNzAsMzEgQEAgc3RhdGljIGludCBmaW5kX2ZhbGxiYWNrKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGludCBpbmRleClcbiBcdGludCBuZXdfaW5kZXggPSAtMTtcbiBcdHN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctXHUwMDNlc29ja3NbaW5kZXhdO1xuIFx0aW50IGZhbGxiYWNrID0gbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXg7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4tXHRcdHJldHVybiBuZXdfaW5kZXg7XG4tXHR9XG4rXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4rXHRcdGdvdG8gbm9fZmFsbGJhY2s7XG4gXG4gXHRpZiAoZmFsbGJhY2sgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBmYWxsYmFjayBcdTAwM2MgY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwMjZcdTAwMjZcbiBcdCAgICAhY29uZmlnLVx1MDAzZXNvY2tzW2ZhbGxiYWNrXS1cdTAwM2VkZWFkKVxuIFx0XHRyZXR1cm4gZmFsbGJhY2s7XG4gXG4tXHRpZiAobnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNjIDAgfHxcbi1cdCAgICBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCBcdTAwM2U9IGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcbi1cdCAgICBjb25maWctXHUwMDNlc29ja3NbbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXhdLVx1MDAzZWRlYWQpIHtcbi1cdFx0aW50IGk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXG5cIik7XG4tXHRcdFx0cmV0dXJuIG5ld19pbmRleDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xuK1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4rXHRcdFx0bmV3X2luZGV4ID0gaTtcbitcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0bmV3X2luZGV4ID0gbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXg7XG4rXHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbitcdGlmIChuZXdfaW5kZXggXHUwMDNlPSAwKVxuK1x0XHRyZXR1cm4gbmV3X2luZGV4O1xuK1xuK25vX2ZhbGxiYWNrOlxuK1x0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4rXHRcdFx0ICAgIFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCIpO1xuIFx0cmV0dXJuIG5ld19pbmRleDtcbiB9XG4gXG5AQCAtMTI4MSwyMyArMTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKG5iZC1cdTAwM2VwaWQpIHtcbitcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4rXHRcdFx0XCJDYW5ub3QgYWRkIHNvY2tldCB0byBhIHJ1bm5pbmcgZGV2aWNlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhbnkgZXJyYW50IHJlcXVlc3RzIHdoaWxlIHdlJ3JlXG4tXHQgKiByZWFsbG9jYXRpbmcgdGhlIC1cdTAwM2Vzb2NrcyBhcnJheS5cbi1cdCAqL1xuLVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cbiBcdGlmICghbmV0bGluayBcdTAwMjZcdTAwMjYgIW5iZC1cdTAwM2V0YXNrX3NldHVwIFx1MDAyNlx1MDAyNlxuIFx0ICAgICF0ZXN0X2JpdChOQkRfUlRfQk9VTkQsIFx1MDAyNmNvbmZpZy1cdTAwM2VydW50aW1lX2ZsYWdzKSlcbiBcdFx0bmJkLVx1MDAzZXRhc2tfc2V0dXAgPSBjdXJyZW50O1xuQEAgLTEzMzcsMTIgKzEzMzcsMTAgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zKytdID0gbnNvY2s7XG4gXHRhdG9taWNfaW5jKFx1MDAyNmNvbmZpZy1cdTAwM2VsaXZlX2Nvbm5lY3Rpb25zKTtcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4gcHV0X3NvY2tldDpcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgbWVtZmxhZ3MpO1xuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4rXHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCJyZWNvbm5lY3RlZCBzb2NrZXRcXG5cIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbkBAIC0xNDcxLDggKzE0NzAsMTMgQEAgc3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19yZWZzLFxuIFx0XHRcdFx0XHRcdTAwMjZuYmQtXHUwMDNlY29uZmlnX2xvY2spKSB7XG4gXHRcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuK1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbitcdFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4rXHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRcdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplKVxuIFx0XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbiBcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4rc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuK1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuYmQtXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZuYmRfbXFfb3BzO1xuLVx0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcbitcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4rICpcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpLFxuK1x0XHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4rXHRpbnQgcmVtLCBjb3VudCA9IDA7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbitcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICsgMV07XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4rXHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbitcdFx0XHRcdFx0XHRhdHRyLFxuK1x0XHRcdFx0XHRcdG5iZF9zb2NrX3BvbGljeSxcbitcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbitcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y291bnQrKztcbitcdFx0aWYgKGNiKSB7XG4rXHRcdFx0cmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0XHRyZXR1cm4gY291bnQ7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4rc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxuK3tcbitcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbit9XG4rXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcbkBAIC0yMTU5LDcgKzIyMTYsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkX2luZGV4X211dGV4KTtcbiBcbiBcdGlmICghbmJkKSB7XG4tXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcbitcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXHUwMDNlIDAgPyByZXQgOiAxKTtcbiBcdFx0aWYgKElTX0VSUihuYmQpKSB7XG4gXHRcdFx0cHJfZXJyKFwiZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxuXCIpO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKG5iZCk7XG5AQCAtMjIyNiwzNiArMjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH1cbitcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcbiBcdFx0bmJkLVx1MDAzZWJhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSxcbkBAIC0yMzQ0LDYgKzIzNzgsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXG4re1xuK1x0cmV0dXJuIG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZCA9IE5VTEw7XG5AQCAtMjQ0MCw0MCArMjQ3OSwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwicmVjb25uZWN0ZWQgc29ja2V0XFxuXCIpO1xuLVx0XHR9XG4tXHR9XG4rXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4rXHQvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqL1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MjUsOCArMjczNCwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxuIFx0fVxuIFx0bmJkX2RiZ19pbml0KCk7XG4gXG4rXHRpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgXHUwMDNjIDEpXG4rXHRcdHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zID0gMTtcbitcdC8qIFNldCB0byB0aGUgaW50ZW5kZWQgY29ubmVjdGlvbiBjb3VudCBzbyBuYmRfc3RhcnRfZGV2aWNlKCkgY2FuIHNraXBcbitcdCAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuXG4rXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5iZHNfbWF4OyBpKyspXG4tXHRcdG5iZF9kZXZfYWRkKGksIDEpO1xuK1x0XHRuYmRfZGV2X2FkZChpLCAxLCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc4NywzICsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobmJkc19tYXgsIFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcIik7XG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXCIpO1xuK21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTtcbitNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLFxuK1wibnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKVwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjE5LjI4OTA5ODUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTk0NzIyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBOQkQgZHJpdmVyIHBhdGNoLiBGcm9tIHdoYXQgSSBzZWUsIHdlJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gVGhpcyBpcyBmb2N1c2VkIG9uIGVuaGFuY2luZyBob3cgdGhlIE5CRCBkcml2ZXIgbWFuYWdlcyBpdHMgc29ja2V0cywgcXVldWUgbGltaXRzLCBhbmQgY29ubmVjdGlvbnMuIFRoZSBrZXkgY2hhbmdlcyBhcmUgcmVhbGx5IGFyb3VuZCBpbXByb3ZpbmcgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgb2YgdGhlIE5CRCBkZXZpY2VzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgbmJkX2FwcGx5X2xpbWl0c2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZ2FpbmluZyBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgYmxvY2sgcXVldWUgbGltaXRzLiBXZSdyZSBhbHNvIHNlZWluZyBgbmJkX3NldF9zaXplYCB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMgbmV3IGZ1bmN0aW9uLCBzdWdnZXN0aW5nIHRoYXQgd2UncmUgdGlnaHRlbmluZyBob3cgc2l6ZSBjaGFuZ2VzIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBpbnRlcnR3aW5lZC4gVGhlIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBgZmluZF9mYWxsYmFja2AgbG9naWMgaXMgYWx3YXlzIHdlbGNvbWUg4oCTIGNsZWFuZXIgY29kZSBpcyBsZXNzIHByb25lIHRvIGJ1Z3MuXG5cbk5vdywgSSBmaW5kIHRoZSBjaGFuZ2VzIGluIGBuYmRfYWRkX3NvY2tldGAgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgY2hlY2sgZm9yIGBuYmQtXHUwMDNlcGlkYCB0byBwcmV2ZW50IGFkZGluZyBzb2NrZXRzIHRvIGEgcnVubmluZyBkZXZpY2UgaXMgY3J1Y2lhbCBmb3Igcm9idXN0bmVzcy4gVGhlIHJlbW92YWwgb2YgYGJsa19tcV9mcmVlemVfcXVldWVgIGFuZCBgYmxrX21xX3VuZnJlZXplX3F1ZXVlYCBzdWdnZXN0cyB3ZSdyZSBzdHJlYW1saW5pbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAsIG1heWJlIGF2b2lkaW5nIHNvbWUgYmxvY2tpbmcgb3BlcmF0aW9ucy4gYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCByZXR1cm5pbmcgMSBvbiBzdWNjZXNzIChpbnN0ZWFkIG9mIGAtRU5PU1BDYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSBhbmQgZ29vZCB0byBzZWUuIFRoZSBkZWZhdWx0IHF1ZXVlIGxpbWl0cyByZXNldCBpbiBgbmJkX2NvbmZpZ19wdXRgIGlzIGFsc28gc3RhbmRhcmQsIGVuc3VyaW5nIGEgcHJlZGljdGFibGUgc3RhdGUuIFRoZSBhcmd1bWVudCBjaGFuZ2UgdG8gYG5iZF9kZXZfYWRkYCAodGFraW5nIGBucl9od19xdWV1ZXNgKSBpcyBmaW5lLCBhbmQgZ29vZCB0byBzZWUgbW9yZSBtb2Rlcm4gaGFyZHdhcmUgc3VwcG9ydGVkLlxuXG5XZSBhbHNvIGhhdmUgdGhlc2UgbmV3IE5ldGxpbmstcmVsYXRlZCBmdW5jdGlvbnMsIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiBUaGlzIGluZGljYXRlcyBhIHNpZ25pZmljYW50IHNoaWZ0IHRvd2FyZHMgY29uZmlndXJpbmcgTkJEIGRldmljZXMgdmlhIE5ldGxpbmssIHdoaWNoIGlzIGV4Y2VsbGVudCBmb3IgYXV0b21hdGlvbiBhbmQgZHluYW1pYyBjb25maWd1cmF0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGBwcmVfZGVmaW5lZF9jb25uZWN0aW9uc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBhbHNvIGEgZ29vZCBhZGRpdGlvbi5cblxuRnJvbSBhIHZpcnR1YWxpemVkIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGFsbCB0b3RhbGx5IHRlc3RhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgcmVhc3N1cmluZy4gUGx1cywgZ2l2ZW4gdGhlIGNoYW5nZXMsIGl0IGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZyB0byB2YWxpZGF0ZSB0aGVzZSBjb25uZWN0aW9ucy5cblxuU28sIHRoZSBjb25maWcgb3B0aW9uIGlzIGBDT05GSUdfQkxLX0RFVl9OQkRgLiBHb29kLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0LiBBbGwgaW4gYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaCB0aGF0IGVuaGFuY2VzIHRoZSBOQkQgZHJpdmVyJ3MgY29uZmlndXJhYmlsaXR5LCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgb3ZlcmFsbCByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6MjcuNDA4NTczNDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjU0OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjoyNy40NTEyMzUyNTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0ODAxMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIEJMS19ERVZfTkJEKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX05CRGAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgd2hhdCBtYWtlcyB0aGlzIGJsb2NrIGRldmljZSB0aWNrLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHVwc3RyZWFtIGltcGxpY2F0aW9ucywgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBhY3QuIFdlJ3JlIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzaW1wbGUgYnVpbGQgZmxhZzsgd2UncmUgaW52ZXN0aWdhdGluZyBhIHBpZWNlIG9mIHRoZSBrZXJuZWwgdGhhdCBpbnRlcmFjdHMgd2l0aCBzdG9yYWdlLCBuZXR3b3JraW5nLCBhbmQgcG90ZW50aWFsbHkgdXNlci1zcGFjZSB0b29scy4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGxpa2VseSBjYW5kaWRhdGVzOiBuZXR3b3JrIHByb3RvY29scywgZW5jcnlwdGlvbiBtb2R1bGVzIChpZiBhcHBsaWNhYmxlKSwgdW5kZXJseWluZyBibG9jayBsYXllciBjb21wb25lbnRzLCBhbmQgYW55IHVzZXItc3BhY2UgaGVscGVycyBvciBsaWJyYXJpZXMuIFRoZSBnb2FsIGlzbid0IGp1c3QgdG8gc2VlICp3aGF0KiBkZXBlbmRzIG9uIGl0LCBidXQgYWxzbyB0byB1bmRlcnN0YW5kIHRoZSAqc3RyZW5ndGgqIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjaXJjdWxhciByZWZlcmVuY2VzLiBBcmUgd2UgbG9va2luZyBhdCBkaXJlY3QsIGhhcmQgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhlcmUgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGF0IHBsYXk/IEEgZ29vZCB1bmRlcnN0YW5kaW5nIGhlcmUgaGVscHMgdG8gcGxhbiBmb3IgcG90ZW50aWFsIHN5c3RlbS1sZXZlbCBjaGFuZ2VzLCBpbmNsdWRpbmcgdGhlIGltcGFjdCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1vZHVsZSBsb2FkaW5nLCBhbmQgdGhlIGJvb3QgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6MzAuOTE2MDM4ODc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDU3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz02PW1lbnVjb25maWcgQkxLX0RFVlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy03LVxcdGJvb2wgXFxcIkJsb2NrIGRldmljZXNcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy05LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTIyPWNvbmZpZyBCTEtfREVWX0ZEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJOb3JtYWwgZmxvcHB5IGRpc2sgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBBUkNIX01BWV9IQVZFX1BDX0ZEQ1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9Mzc9Y29uZmlnIEJMS19ERVZfRkRfUkFXQ01EXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHJhdyBmbG9wcHkgZGlzayBjb21tYW5kcyAoREVQUkVDQVRFRClcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM5OlxcdGRlcGVuZHMgb24gQkxLX0RFVl9GRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9NTM9Y29uZmlnIEFNSUdBX0ZMT1BQWVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgZmxvcHB5IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjU1OlxcdGRlcGVuZHMgb24gQU1JR0FcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNTYtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTU3PWNvbmZpZyBBVEFSSV9GTE9QUFlcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIkF0YXJpIGZsb3BweSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo1OTpcXHRkZXBlbmRzIG9uIEFUQVJJXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTYwLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz02MT1jb25maWcgTUFDX0ZMT1BQWVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUG93ZXJNYWMgZmxvcHB5XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIFBQQ19QTUFDIFxcdTAwMjZcXHUwMDI2ICFQUENfUE1BQzY0XFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz02OD1jb25maWcgQkxLX0RFVl9TV0lNXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjcwOlxcdGRlcGVuZHMgb24gTTY4SyBcXHUwMDI2XFx1MDAyNiBNQUMgXFx1MDAyNlxcdTAwMjYgIUhJR0hNRU1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNzEtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTc1PWNvbmZpZyBBTUlHQV9aMlJBTVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy03Ni1cXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo3NzpcXHRkZXBlbmRzIG9uIFpPUlJPXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTc4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz04Nj1jb25maWcgTjY0Q0FSVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy04Ny1cXHRib29sIFxcXCJONjQgY2FydCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo4ODpcXHRkZXBlbmRzIG9uIE1BQ0hfTklOVEVORE82NFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy04OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9OTU9Y29uZmlnIEdEUk9NXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJTRUdBIERyZWFtY2FzdCBHRC1ST00gZHJpdmVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjk3OlxcdGRlcGVuZHMgb24gU0hfRFJFQU1DQVNUXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTk4LVxcdHNlbGVjdCBDRFJPTVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTExMT1jb25maWcgQkxLX0RFVl9VQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTEyLVxcdGJvb2wgXFxcIlZpcnR1YWwgYmxvY2sgZGV2aWNlXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxMTM6XFx0ZGVwZW5kcyBvbiBVTUxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTE0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0xMjA9Y29uZmlnIEJMS19ERVZfVUJEX1NZTkNcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTIxLVxcdGJvb2wgXFxcIkFsd2F5cyBkbyBzeW5jaHJvbm91cyBkaXNrIElPIGZvciBVQkRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjEyMjpcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTEyMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTc5PWNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXFx0ZGVmYXVsdCA4XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk2PWNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5ODpcXHRkZXBlbmRzIG9uIE5FVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI0Mz1jb25maWcgQkxLX0RFVl9SQU1fQ09VTlRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNDUtXFx0ZGVmYXVsdCBcXFwiMTZcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIEJMS19ERVZfUkFNXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI0Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjUyPWNvbmZpZyBCTEtfREVWX1JBTV9TSVpFXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI1My1cXHRpbnQgXFxcIkRlZmF1bHQgUkFNIGRpc2sgc2l6ZSAoa2J5dGVzKVxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjU0OlxcdGRlcGVuZHMgb24gQkxLX0RFVl9SQU1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjU1LVxcdGRlZmF1bHQgXFxcIjQwOTZcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjYwPWNvbmZpZyBBVEFfT1ZFUl9FVEhcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjYxLVxcdHRyaXN0YXRlIFxcXCJBVEEgb3ZlciBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0yNjc9Y29uZmlnIFNVTlZEQ1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNjgtXFx0dHJpc3RhdGUgXFxcIlN1biBWaXJ0dWFsIERpc2sgQ2xpZW50IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjI2OTpcXHRkZXBlbmRzIG9uIFNVTl9MRE9NU1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI3Nj1jb25maWcgWEVOX0JMS0RFVl9GUk9OVEVORFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzctXFx0dHJpc3RhdGUgXFxcIlhlbiB2aXJ0dWFsIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyNzg6XFx0ZGVwZW5kcyBvbiBYRU5cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjc5LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI4Nj1jb25maWcgWEVOX0JMS0RFVl9CQUNLRU5EXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTI4Ny1cXHR0cmlzdGF0ZSBcXFwiWGVuIGJsb2NrLWRldmljZSBiYWNrZW5kIGRyaXZlclxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Mjg4OlxcdGRlcGVuZHMgb24gWEVOX0JBQ0tFTkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjg5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0zMDc9Y29uZmlnIFZJUlRJT19CTEtcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzA4LVxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gYmxvY2sgZHJpdmVyXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMDk6XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzEwLVxcdHNlbGVjdCBTR19QT09MXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXFx0dHJpc3RhdGUgXFxcIlJhZG9zIGJsb2NrIGRldmljZSAoUkJEKVxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzE3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTgtXFx0c2VsZWN0IENFUEhfTElCXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzM3PWNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMzgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMzOTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNDAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU4OlxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTktXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjozMC45NjE1MDEzODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA5MjI2NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyIChgQkxLX0RFVl9OQkRgKS4gSXQgcmVsaWVzIG9uIGBORVRgIGFuZCBgQkxPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3QgYXJlYXMgZm9yIGZ1enppbmcsIGFuZCBJIHRoaW5rIEkndmUgbmFycm93ZWQgaXQgZG93bi4gVGhpcyBwYXRjaCB0b3VjaGVzIGEgZ29vZCBjaHVuayBvZiB0aGUgTkJEIGNvZGU6IGBuYmRfYXBwbHlfbGltaXRzYCwgYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYG5iZF9jb25maWdfcHV0YCwgYG5iZF9kZXZfYWRkYCwgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AsIGBuYmRfZ2VubF9jb25uZWN0YCwgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAuXG5cbkJhc2VkIG9uIHRob3NlIGZ1bmN0aW9ucywgbXkgaW5pdGlhbCB0YXJnZXQgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLCBhbmQgYG5iZF9zZXRfc2l6ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgY29uZmlndXJhdGlvbiBwb2ludHMsIHRoZXJlZm9yZSBnb29kIHBsYWNlcyBmb3IgZmluZGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGFyZW4ndCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIHN0YXRpYyBmdW5jdGlvbnM/IFRoYXQgY291bGQgYWZmZWN0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjozNS42NzA3MzMyNzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5ODg4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2FkZF9zb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzQ9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjc2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTI3NzpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI3OC1cXHRcXHRcXHQgIGJvb2wgbmV0bGluaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYzND1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NDYtXFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjQ3OlxcdFxcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cXHRjYXNlIE5CRF9TRVRfQkxLU0laRTpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjE2Mj1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYzLXtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjQ6XFx0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjM1LjczNzcyNzAxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ1OTAzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBOQkQgS2VybmVsIE1vZHVsZSBFbnRyeSBQb2ludHMqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIE5CRCBrZXJuZWwgZW50cnkgcG9pbnRzIGFyZSBzdGF0aWMsIGFuZCB0aGUgYW5zd2VyIGlzIHllcywgdGhleSBzZWVtIHRvIGJlLiBOb3csIGxldCdzIGRyaWxsIGRvd24gYW5kIGlkZW50aWZ5IHRob3NlIGtleSBlbnRyeSBwb2ludHMuIEJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZywgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAgKG9yIHBvc3NpYmx5IGBfX25iZF9pb2N0bGAsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQpIGFyZSB0aGUgcHJpbWFyeSBzdXNwZWN0cy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBjbG9zZWx5LCBmaWd1cmUgb3V0IHRoZWlyIHJvbGVzIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vZHVsZSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjM5LjUwMjMyMTI2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NTAyODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTIxMjA9c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2MS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjI6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGZkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjYtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTY3OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjkwOlxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjkxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5OC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk5OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9jb25uZWN0LFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjozOS44Mzk4MzI5NDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2NDgzNTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBJdHMgUG90ZW50aWFsIFVzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuYmRfZ2VubF9jb25uZWN0YCBoZXJlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBzdGF0aWMgdG9vLiBCdXQgaG9sZCBvbiwgaXQncyByZWdpc3RlcmVkIGFzIGEgbmV0bGluayBjYWxsYmFjaywgaXNuJ3QgaXQ/IFRoYXQgY2hhbmdlcyB0aGluZ3MuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB3ZSBjYW4gbGV2ZXJhZ2UgYG5iZF9nZW5sX2Nvbm5lY3RgIHdpdGhpbiBgRm9jdXNTeW1ib2xzYC5cblxuV2FpdCBhIG1pbnV0ZSwgY2FuIHN0YXRpYyBmdW5jdGlvbnMgZXZlbiBiZSB1c2VkIGluIGBGb2N1c1N5bWJvbHNgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBndWlkYW5jZS4gQWgsIHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHRoZXkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gYXZvaWQgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgbGVhZGluZyB0byBhIGxvc3Mgb2YgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0Li4uIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQuLi4gYm90aCBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlIHJlZ2lzdGVyZWQgYXMgY2FsbGJhY2tzIHdpdGhpbiBgbmJkX2Nvbm5lY3RfZ2VubF9vcHNgLiBTaW5jZSB0aGV5IGFyZSBjYWxsYmFja3MsIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGRvIGluZGVlZCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFBlcmZlY3QhIFRoYXQgbWFrZXMgYWxsIHRoZSBkaWZmZXJlbmNlIVxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIHRvIGNvbnNpZGVyIGJlZm9yZSB3ZSBmaW5hbGl6ZSB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjQ1LjAwNDY3NDIwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5NjQ5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTIzODE9c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgZmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzg2OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwOC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA5OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6NDUuMDY3NjQ0MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTU3ODAzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFuZCBhIGJvbGRlZCBoZWFkZXI6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuYmRfaW9jdGxgIFJhYmJpdCBIb2xlKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGlzIGFnYWluLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBXaGF0IGFib3V0IGBuYmRfaW9jdGxgPyBJdCdzIHRoZSBseW5jaHBpbiwgaXNuJ3QgaXQ/IFRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGFueSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIE5CRCBzdGFjay4gSXTigJlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJZiB3ZSBhcmUgdHJ5aW5nIHRvIHJlc29sdmUgc29tZSBpc3N1ZSwgb3Igb3B0aW1pemUgdGhpbmdzLCB0aGVuIHRoZSBgaW9jdGxgIGNhbGxzIGFyZSB0aGUgZmlyc3QgdGhpbmcgdGhhdCByZXF1aXJlIGluc3BlY3Rpb24uIEl0J3Mgb2Z0ZW4gdGhlIHJvb3Qgb2YgdmFyaW91cyBhY2Nlc3MgaXNzdWVzLiBBbmQgYXMgYW55IE5CRCBleHBlcnQga25vd3MsIGl0IGNhbiBiZSBhIHNvdXJjZSBvZiBjb25mdXNpb24gYW5kIHN1YnRsZSBidWdzIGlmIG5vdCBpbXBsZW1lbnRlZCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkuIEl04oCZcyB0aGUgZ2F0ZXdheSwgdGhlIGNvbW1hbmQgY2VudGVyLCB0aGXigKYgd2VsbCwgeW91IGdldCB0aGUgaWRlYS4gV2l0aG91dCBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcywgYW5kIGhvdyBpdCdzIGhhbmRsZWQgb24gYm90aCBzaWRlcyBvZiB0aGUgaW50ZXJmYWNlLCB3ZSdyZSBmbHlpbmcgYmxpbmQsIHRydWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6MzY6NDkuMzYzNDI3Mzg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI3NzQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE2MjQ9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MzQ6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzNS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjgxOnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODItXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMy1cXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcwNDpcXHRcXHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTItXFx0LnJlbGVhc2UgPVxcdG5iZF9yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxMzpcXHQuaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MTQ6XFx0LmNvbXBhdF9pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxNS1cXHQuZnJlZV9kaXNrID1cXHRuYmRfZnJlZV9kaXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjo0OS40NDI3MDk2MDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1MTMxMjc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBUEkgRW50cnlwb2ludCBGdW5jdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYG5iZF9pb2N0bGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU2luY2UgaXQncyBzdGF0aWMsIEknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSBvZiBpdCBhbG9uZyB3aXRoIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBfX25iZF9pb2N0bGAgYmVjYXVzZSB0aGV5IGFyZSBhbGwgc3RhdGljIHRvby4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmUgc3BlY2lmeSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gU2luY2UgdGhleSBhcmUgYWxsIHN0YXRpYywgSSB3aWxsIGhhdmUgdG8gZGVmYXVsdCB0byB0aGVzZSBjYWxsYmFja3MuIE5vdyBsZXQncyBjaGVjayBgbmJkX2FwcGx5X2xpbWl0c2AuIEFoLCBpdCdzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgYW5kIGl0J3MgcHJvYmFibHkgaW5saW5lZCB0b28uIEhtbSwgYG5iZF9zZXRfc2l6ZWAgaXMgYWxzbyBzdGF0aWMuIEFuZCBzbyBpcyBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLCBhbmQgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gTGV0J3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYEJMS19ERVZfTkJEYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCB0aGFua2Z1bGx5IGl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBCTE9DS2AuIEFscmlnaHQsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIFNvLCBJIHdpbGwgYWRkIGBCTEtfREVWX05CRGAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNjo1NC45OTQwMjUzNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTg4ODk3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM2OjU3LjUxMjkyMDg1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMyNzA2MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGRyaXZlcnM6XG5cbioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyJ3MgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgb2YgdGhlIE5CRCBkcml2ZXIuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGVyZSwgc3BlY2lmaWNhbGx5IGAjaWZkZWZgcy4gVGhvc2UgdGhpbmdzIGFsd2F5cyB3YXJyYW50IGEgY2xvc2VyIGxvb2suIFRoZXkgdXN1YWxseSBpbmRpY2F0ZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCBmZWF0dXJlIGZsYWdzLCBvciwgd29yc3QtY2FzZSBzY2VuYXJpbywgY3J1ZnQgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgaW50cm9kdWNpbmcgY29tcGxleGl0eSBvciBwb3RlbnRpYWwgYnVncyB3aXRoaW4gdGhlIGRyaXZlcidzIGNvZGViYXNlLiBJdCdzIGEgcXVpY2sgYW5kIGRpcnR5IHNjYW4gdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBicmFuY2hlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNzozNzowMC40NDU2MzAyOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTI5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTIxMz1zdGF0aWMgc3RydWN0IHNvY2tldCAqbmJkX2dldF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTI0MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyNDE6I2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjQyLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmJkX2tleVszXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6Mzc6MDAuNTI2MTY4NDI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTkwNzIzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTkJEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBhc3BlY3RzIGZvciBOQkQuIEl0IGxvb2tzIGxpa2UgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXIgaXMgYEJMS19ERVZfTkJEYCwgbm90aGluZyBtb3JlIHNwZWNpZmljIHRoYW4gdGhhdC4gTXkgZm9jdXMsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0YXNrLCBuZWVkcyB0byBiZSBhcyBjb25jaXNlIGFzIHBvc3NpYmxlLCBzbyB0aGF0IGlzIGtleS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsLiBJJ3ZlIGluaXRpYWxseSBmbGFnZ2VkIHRoZXNlIGFzIHByaW1hcnkgdGFyZ2V0czogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYF9fbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLlxuXG5UaGlua2luZyBhYm91dCB0aGUgY2FsbCBmbG93LCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGFyZSBjYWxsZWQgdGhyb3VnaCBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgdmlhIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLiBgbmJkX3NldF9zaXplYCBpcyBjYWxsZWQgdmlhIGBuYmRfaW9jdGxgIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAvYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gU28sIHRoZXNlIHdvdWxkIHNlZW0gdG8gYmUgY3JpdGljYWwgZW50cnkgcG9pbnRzLlxuXG5Ib3dldmVyLCBhIHF1aWNrIHNlY29uZCB0aG91Z2h0LCBgbmJkX2FkZF9zb2NrZXRgIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGxvb2sgbGlrZSBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW5saW5pbmcuIFRoZXkgYXJlIHBhc3NlZCBhcyBjYWxsYmFja3MgdG8gYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgdXNpbmcgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgYW5kIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAsIHNvIEkgbWlnaHQgbmVlZCB0byBkaWcgaW50byB0aGUgYWN0dWFsIHN0cnVjdHVyZSBvZiB0aGVzZSBjYWxsYmFja3MuIEluZGVlZCwgYG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYmAgY2FsbHMgYG5iZF9hZGRfc29ja2V0YC4gVGhlIHNhbWUgbXVzdCBiZSB0cnVlIG9mIHRoZSByZWNvbm5lY3QuXG5cblRvIG1ha2UgdGhpbmdzIGNsZWFuLCBsZXQgbWUgcmVkdWNlIHRoZSBsaXN0LCB0byBjb25zaWRlciBvbmx5IHRoZSBjb3JlIGVudHJ5IHBvaW50czogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYW5kIGBuYmRfcmVjb25uZWN0X3NvY2tldGAuXG5cbkknbGwgYWxzbyB0YWtlIGEgbG9vayBhdCBgbmJkX2Rldl9hZGRgIGFzIHBhcnQgb2YgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDc6Mzc6MDcuODI1MjQzNjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYzOTk0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2Rldl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTQ4OnN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDktXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIxNjc9c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyMjItXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjIzOlxcdFxcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyLCByZXQgXFx1MDAzZSAwID8gcmV0IDogMSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjI0LVxcdFxcdGlmIChJU19FUlIobmJkKSkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjg5PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5iZHNfbWF4OyBpKyspXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzQzOlxcdFxcdG5iZF9kZXZfYWRkKGksIDEsIHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDQtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjA4LjA0MTY0NzI3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjMzMTk4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgdGFrZSBvbiB0aGlzLlxuXG4qKkludGVybmFsIENoZWNrbGlzdCBmb3IgTkJEIE1vZHVsZSBSZXZpZXcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGBuYmRfZGV2X2FkZGAgaXMgYWxzbyBzdGF0aWMuIE1ha2VzIHNlbnNlIGZvciBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgbW9kdWxlLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEknbSBhc3Nlc3NpbmcgaG93IGl0J3MgY2FsbGVkLlxuXG5UaGVuLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2lvY3RsYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCwgYW5kIGBuYmRfc2V0X3NpemVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgcGllY2VzIGludm9sdmVkIGluIGNvbm5lY3Rpb24sIHJlY29uZmlndXJhdGlvbiwgSU8gY29udHJvbCwgYW5kIHNpemUgbWFuYWdlbWVudC4gSSBrbm93IHRob3NlIGFyZWFzIGFyZSBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgYml0cyBhbmQgcGllY2VzIG9mIGFueSBOQkQgaW1wbGVtZW50YXRpb24gbGl2ZS5cblxuQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCB0aG91Z2gsIGEgYnJpZWYgc2NhbiBvZiBgbmJkX2FwcGx5X2xpbWl0c2AgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEuIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdpdGggdGhvc2UgbGltaXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjE0LjI3NDg0ODc0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxNDA3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2FwcGx5X2xpbWl0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MzA2PXN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzM0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzM1OnN0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zNTU9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc1LVxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzozNzY6XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCBuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc3LVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDY4PXN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NzctXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0Nzg6XFx0XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCAwKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0NzktXFx0XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjE0LjM0Mjk5MzcxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTMyMjM3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgcG9pbnRzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgc29ja2V0IG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgc3lzdGVtLiBJdCBzZWVtcyB3ZSdyZSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggYWRqdXN0bWVudHMgdG8gaG93IHRoZSBzb2NrZXRzIGFyZSBhZGRlZCBhbmQgcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBvcmNoZXN0cmF0ZWQsIGJvdGggdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGNhbGxzLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBkcml2ZXIgbG9naWMgYnV0IGNsZWFybHkgY3JpdGljYWwgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgYXMgdGhlIHRlY2hub2xvZ3kgc2VlcyBjb250aW51ZWQgZGVwbG95bWVudC5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYG5iZF9hcHBseV9saW1pdHNgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGFzIGl0J3MgdHJpZ2dlcmVkIGZyb20gYm90aCBgbmJkX3NldF9zaXplYCBhbmQgYG5iZF9jb25maWdfcHV0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0byB0cmFjZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGJlY2F1c2UgdGhlIHBhdGNoJ3MgaW1wYWN0IHJpcHBsZXMgb3V0d2FyZHMuXG5cbkZyb20gYSB0ZXN0aW5nIHBlcnNwZWN0aXZlLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgZHJpdmVyIGxvZ2ljIGFyZSBhIGh1Z2Ugd2luLiBXZSBzaG91bGQgYmUgYWJsZSB0byB2YWxpZGF0ZSB0aGVzZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aGljaCBzaG91bGQgYWNjZWxlcmF0ZSB0aGUgb3ZlcmFsbCBxdWFsaXR5IGFzc2Vzc21lbnQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIGBCTEtfREVWX05CRGAgY29uZmlnIG9wdGlvbiDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZGVwZW5kZW5jeS5cblxuTm93LCBhcyBJIGRpZyBkZWVwZXIsIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCB0aGVzZSBzeW1ib2xzOiBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfaW9jdGxgLCBgbmJkX2FkZF9zb2NrZXRgLCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLCBhbmQgYG5iZF9zZXRfc2l6ZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIFRoZXkgYXJlIGVzc2VudGlhbGx5IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEknbGwgY2FsbCB0aGlzIHNldCBvZiBzdGVwcywgdGhlIFwic2V0LXJlc3VsdHNcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzYsIk91dHB1dFRva2VucyI6MTU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA3OjM3OjIwLjg3NTIzNDA3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzAyMDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfYWRkX3NvY2tldFwiLFxuICAgIFwibmJkX3JlY29ubmVjdF9zb2NrZXRcIixcbiAgICBcIm5iZF9zZXRfc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgc29ja2V0cyBhcmUgYWRkZWQvcmVjb25uZWN0ZWQsIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIGFwcGxpZWQsIGFuZCBob3cgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIE5ldGxpbmsgYW5kIGlvY3RsIGludGVyZmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2FkZF9zb2NrZXRcIixcbiAgICBcIm5iZF9yZWNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJuYmRfc2V0X3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHNvY2tldHMgYXJlIGFkZGVkL3JlY29ubmVjdGVkLCBob3cgcXVldWUgbGltaXRzIGFyZSBhcHBsaWVkLCBhbmQgaG93IGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkIHZpYSBOZXRsaW5rIGFuZCBpb2N0bCBpbnRlcmZhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[1] Phase: Succeeded StartedAt: 2026-08-05 07:37:32 +0000 UTC FinishedAt: 2026-08-05 07:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 07:37:32 +0000 UTC FinishedAt: 2026-08-05 07:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2] Phase: Succeeded StartedAt: 2026-08-05 07:37:32 +0000 UTC FinishedAt: 2026-08-05 11:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 07:37:32 +0000 UTC FinishedAt: 2026-08-05 11:21:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 07:37:32 +0000 UTC FinishedAt: 2026-08-05 07:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 07:37:32 +0000 UTC FinishedAt: 2026-08-05 07:37:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowjzj9s/series-workflowjzj9s-convert-artifact-3475319796/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 07:37:42 +0000 UTC FinishedAt: 2026-08-05 07:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 07:37:42 +0000 UTC FinishedAt: 2026-08-05 07:55: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:*dd7e2cdf-b04e-451a-9716-399a235e47a0,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-workflowjzj9s/series-workflowjzj9s-convert-artifact-3475319796/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": "2973ef35-e80a-4b41-a570-8b502a069bce", "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-workflowjzj9s/series-workflowjzj9s-build-action-3369013490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 07:37:42 +0000 UTC FinishedAt: 2026-08-05 07:55:49 +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:*dd7e2cdf-b04e-451a-9716-399a235e47a0,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-workflowjzj9s/series-workflowjzj9s-convert-artifact-3475319796/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": "2973ef35-e80a-4b41-a570-8b502a069bce", "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-workflowjzj9s/series-workflowjzj9s-build-action-3369013490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 07:55:59 +0000 UTC FinishedAt: 2026-08-05 07:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 07:55:59 +0000 UTC FinishedAt: 2026-08-05 07:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 07:55:59 +0000 UTC FinishedAt: 2026-08-05 07:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 07:55:59 +0000 UTC FinishedAt: 2026-08-05 07:56:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowjzj9s/series-workflowjzj9s-convert-artifact-3902397363/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 07:56:09 +0000 UTC FinishedAt: 2026-08-05 07:58:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 07:56:09 +0000 UTC FinishedAt: 2026-08-05 07:57:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2973ef35-e80a-4b41-a570-8b502a069bce,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-workflowjzj9s/series-workflowjzj9s-build-action-3369013490/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-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 07:58:04 +0000 UTC FinishedAt: 2026-08-05 07:58:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 07:58:04 +0000 UTC FinishedAt: 2026-08-05 07:58:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 07:58:04 +0000 UTC FinishedAt: 2026-08-05 08:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 07:58:04 +0000 UTC FinishedAt: 2026-08-05 08:14:53 +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:*dd7e2cdf-b04e-451a-9716-399a235e47a0,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-workflowjzj9s/series-workflowjzj9s-convert-artifact-3902397363/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": "43a710a3-1ed4-40ae-9057-f75ae914917d", "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-workflowjzj9s/series-workflowjzj9s-build-action-2558190695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 07:58:04 +0000 UTC FinishedAt: 2026-08-05 08:14:43 +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:*dd7e2cdf-b04e-451a-9716-399a235e47a0,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-workflowjzj9s/series-workflowjzj9s-convert-artifact-3902397363/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": "43a710a3-1ed4-40ae-9057-f75ae914917d", "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-workflowjzj9s/series-workflowjzj9s-build-action-2558190695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 08:14:53 +0000 UTC FinishedAt: 2026-08-05 08:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 08:14:53 +0000 UTC FinishedAt: 2026-08-05 08:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 08:14:53 +0000 UTC FinishedAt: 2026-08-05 08:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 08:14:53 +0000 UTC FinishedAt: 2026-08-05 08:17:08 +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:*43a710a3-1ed4-40ae-9057-f75ae914917d,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-workflowjzj9s/series-workflowjzj9s-build-action-2558190695/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-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 08:17:17 +0000 UTC FinishedAt: 2026-08-05 11:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 08:17:17 +0000 UTC FinishedAt: 2026-08-05 11:21:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"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:*2973ef35-e80a-4b41-a570-8b502a069bce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*43a710a3-1ed4-40ae-9057-f75ae914917d,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-workflowjzj9s/series-workflowjzj9s-build-action-3369013490/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-workflowjzj9s/series-workflowjzj9s-build-action-2558190695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 08:17:17 +0000 UTC FinishedAt: 2026-08-05 08:17:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 08:17:17 +0000 UTC FinishedAt: 2026-08-05 08:17:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"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-workflowjzj9s/series-workflowjzj9s-convert-artifact-154990764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 08:17:17 +0000 UTC FinishedAt: 2026-08-05 08:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 08:17:17 +0000 UTC FinishedAt: 2026-08-05 08:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 08:17:17 +0000 UTC FinishedAt: 2026-08-05 08:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 08:17:27 +0000 UTC FinishedAt: 2026-08-05 11:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzj9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_genl_connect","nbd_genl_reconfigure","nbd_ioctl","nbd_add_socket","nbd_reconnect_socket","nbd_set_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"5f0282df-eabc-45bb-8b1a-503a4eaa8bf1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 08:17:27 +0000 UTC FinishedAt: 2026-08-05 11:21:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2973ef35-e80a-4b41-a570-8b502a069bce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*43a710a3-1ed4-40ae-9057-f75ae914917d,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-workflowjzj9s/series-workflowjzj9s-build-action-3369013490/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-workflowjzj9s/series-workflowjzj9s-build-action-2558190695/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-workflowjzj9s/series-workflowjzj9s-convert-artifact-154990764/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,}