Name: series-workflowl9b62 Phase: Succeeded StartedAt: 2026-07-07 16:16:23 +0000 UTC FinishedAt: 2026-07-07 21:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[0] Phase: Succeeded StartedAt: 2026-07-07 16:16:23 +0000 UTC FinishedAt: 2026-07-07 16:32:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 16:16:23 +0000 UTC FinishedAt: 2026-07-07 16:32:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "e56fe1cd-beb1-4f25-a865-486c9b500fe9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dev_fill_bridge_path", "flow_offload_bridge_init", "nft_dev_fill_bridge_path", "nf_flow_rule_bridge", "br_fill_forward_path", "br_vlan_fill_forward_path_pvid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgmIzM0OywKICAgICYjMzQ7bmZfZmxvd19ydWxlX2JyaWRnZSYjMzQ7LAogICAgJiMzNDticl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDticl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgaW4gZmxvdyBvZmZsb2FkIGFuZCBtb2RpZmllcyBleGlzdGluZyBicmlkZ2UgZm9yd2FyZCBwYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBhbmQgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzIwNWE1MjVhZDBjZDZkNDQxMGRhMGMzOTE1ZDNlM2NhZGIxNWRlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTY6MzA6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5mZGVlNDQ2NWQ2MTI2MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDIwLDYgJiM0MzszNDIwLDggQEAgdm9pZCBkZXZfcmVtb3ZlX29mZmxvYWQoc3RydWN0IHBhY2tldF9vZmZsb2FkICpwbyk7XG4gXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO2ludCBkZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLmExMDllZGE1MjUwYzc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTMwNSw2ICYjNDM7MzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiB2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpO1xuIFxuJiM0MztpbnQgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xuJiM0MztcbiBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbiB2b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBib29sIGZvcmNlKTtcbkBAIC0zNjgsNiAmIzQzOzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTtcbiBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRlbnVtIGZsb3dfYmxvY2tfY29tbWFuZCBjbWQpO1xuJiM0MztpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7XG4gaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbiBcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLjg5ZjQ1MjVhNzI3OWQ2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTM4NSwxNiAmIzQzOzM4NSwyNSBAQCBzdGF0aWMgaW50IGJyX2RlbF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KVxuIHN0YXRpYyBpbnQgYnJfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNyYywgKmRzdDtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjtcbi1cdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKmRzdDtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlICpicjtcbiBcbi1cdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSlcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSkge1xuJiM0MztcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldjtcbiYjNDM7XG4mIzQzO1x0XHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KChzdHJ1Y3QgbmV0X2RldmljZSAqKWN0eC1cdTAwM2VkZXYpO1xuJiM0MztcdFx0aWYgKCFicl9kZXYpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiBcbi1cdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4mIzQzO1x0XHRzcmMgPSBicl9wb3J0X2dldF9yY3UoY3R4LVx1MDAzZWRldik7XG4mIzQzO1x0XHRiciA9IG5ldGRldl9wcml2KGJyX2Rldik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNyYyA9IE5VTEw7XG4mIzQzO1x0XHRiciA9IG5ldGRldl9wcml2KGN0eC1cdTAwM2VkZXYpO1xuJiM0MztcdH1cbiBcbi1cdGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChiciwgY3R4LCBwYXRoKTtcbiYjNDM7XHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIHNyYywgY3R4LCBwYXRoKTtcbiBcbiBcdGYgPSBicl9mZGJfZmluZF9yY3UoYnIsIGN0eC1cdTAwM2VkYWRkciwgcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9pZCk7XG4gXHRpZiAoIWYpXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjAwZjViNzJmZjQyZGVhIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMTYzMCw2ICYjNDM7MTYzMCw3IEBAIGJvb2wgYnJfdmxhbl9jYW5fZW50ZXJfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxuIFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcmFuZ2VfZW5kKTtcbiBcbiB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKTtcbiBpbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbkBAIC0xNzk5LDYgJiM0MzsxODAwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbmJwX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfdmxhbi5jIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbmluZGV4IDU1NjBhZmNhYWNhMzI3Li43MTUzMTQ5OWJjNzM1NiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuQEAgLTE0NTAsNiAmIzQzOzE0NTAsNyBAQCBpbnQgYnJfdmxhbl9nZXRfcHZpZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2ICpwX3B2aWQpXG4gRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9nZXRfcHZpZF9yY3UpO1xuIFxuIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuQEAgLTE0NjIsNyAmIzQzOzE0NjMsMTAgQEAgdm9pZCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiYjNDM7XHRpZiAocClcbiYjNDM7XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xuIFxuIFx0aWYgKGlkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgY3R4LVx1MDAzZXZsYW5baWR4XS5wcm90byA9PSBici1cdTAwM2V2bGFuX3Byb3RvKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNGIzZDVjZmRmNmUwMGYuLmY2Njg1YzFlNDc4NjAxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzUwLDQ0ICYjNDM7NzUwLDg0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gXHRyZXR1cm4gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiB9XG4gXG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4tXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiYjNDM7c3RhdGljIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuLVx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XG4tXHRzdGFjay1cdTAwM2VudW1fcGF0aHMgPSAwO1xuLVx0d2hpbGUgKGN0eC5kZXYgXHUwMDI2XHUwMDI2IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbi1cdFx0bGFzdF9kZXYgPSBjdHguZGV2O1xuJiM0MztcdHdoaWxlIChjdHgtXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4mIzQzO1x0XHRsYXN0X2RldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0XHRpZiAoIXBhdGgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbi1cdFx0cmV0ID0gY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIHBhdGgpO1xuJiM0MztcdFx0cmV0ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0aWYgKCFjdHguZGV2KVxuJiM0MztcdGlmICghY3R4LVx1MDAzZWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0aWYgKCFwYXRoKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbiYjNDM7XHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4mIzQzO2ludCBkZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXYsICpicl9kZXY7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiYjNDM7XG4mIzQzO1x0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdHgtXHUwMDNlZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0YnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIWJyX2RldiB8fCAhYnJfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRsYXN0X2RldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1x0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4mIzQzO1x0aWYgKCFwYXRoKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbiYjNDM7XHRpZiAoYnJfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZWRldiB8fCBXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKGN0eCwgc3RhY2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2JyaWRnZV9wYXRoKTtcbiYjNDM7XG4mIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuJiM0MztcdFx0LmRldlx0PSBkZXYsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oXHUwMDI2Y3R4LCBzdGFjayk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcbmluZGV4IGIwZjE5OTE3MTkzMjQxLi44MGIyMzgxOTZmMjliMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcbkBAIC02NSw2ICYjNDM7NjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfYnJpZGdlID0ge1xuJiM0MztcdC5mYW1pbHlcdFx0PSBORlBST1RPX0JSSURHRSxcbiYjNDM7XHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbiYjNDM7XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG4mIzQzO1x0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9icmlkZ2UsXG4mIzQzO1x0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG4mIzQzO1x0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaW5ldF9ob29rLFxuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xuIFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSU5FVCxcbiBcdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxuQEAgLTk3LDYgJiM0MzsxMDcsNyBAQCBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfaW5ldF9tb2R1bGVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XG4gXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2lwdjQpO1xuIFx0bmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcbiBcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaW5ldCk7XG5AQCAtMTA5LDYgJiM0MzsxMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd19pbmV0X21vZHVsZV9leGl0KHZvaWQpXG4gXHRuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaW5ldCk7XG4gXHRuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaXB2Nik7XG4gXHRuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaXB2NCk7XG4mIzQzO1x0bmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG5mX2Zsb3dfaW5ldF9tb2R1bGVfaW5pdCk7XG5AQCAtMTE4LDUgJiM0MzsxMzAsNiBAQCBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7UGFibG8gTmVpcmEgQXl1c28gXHUwMDNjcGFibG9AbmV0ZmlsdGVyLm9yZ1x1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GX0ZMT1dUQUJMRShBRl9JTkVUKTtcbiBNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKEFGX0lORVQ2KTtcbiYjNDM7TU9EVUxFX0FMSUFTX05GX0ZMT1dUQUJMRShBRl9CUklER0UpO1xuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoMSk7IC8qIE5GUFJPVE9fSU5FVCAqL1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggMDAyZWMxNWQ5ODhiZGIuLjU1NjZlYmRhN2I3ZDMwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuQEAgLTc0MCw2ICYjNDM7NzQwLDE5IEBAIG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbiYjNDM7e1xuJiM0MztcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRmbG93X29mZmxvYWRfcmVkaXJlY3QobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfcnVsZV9icmlkZ2UpO1xuJiM0MztcbiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIFx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi4yZGViOGU0ZDUzMjhiMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG5AQCAtMzUwLDMgJiM0MzszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCxcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnNyY19kZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkc3RfZGV2LFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBjaGFyICpzcmNfaGEsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGNoYXIgKmRzdF9oYSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnRoID0gZmxvdy1cdTAwM2V0dXBsZWhhc2g7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge307XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyBpbmZvID0ge307XG4mIzQzO1x0aW50IGksIGogPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB0aFtkaXJdLnR1cGxlLmVuY2FwX251bSAtIDE7IGkgXHUwMDNlPSAwIDsgaS0tKSB7XG4mIzQzO1x0XHRpZiAoaW5mby5udW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGhbZGlyXS50dXBsZS5pbl92bGFuX2luZ3Jlc3MgXHUwMDI2IEJJVChpKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aW5mby5lbmNhcFtpbmZvLm51bV9lbmNhcHNdLmlkID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5pZDtcbiYjNDM7XHRcdGluZm8uZW5jYXBbaW5mby5udW1fZW5jYXBzXS5wcm90byA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0ucHJvdG87XG4mIzQzO1x0XHRpbmZvLm51bV9lbmNhcHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmICh0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3R4Lm51bV92bGFucyBcdTAwM2U9IE5FVF9ERVZJQ0VfUEFUSF9WTEFOX01BWClcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0Y3R4LnZsYW5bY3R4Lm51bV92bGFuc10uaWQgPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLmlkO1xuJiM0MztcdFx0Y3R4LnZsYW5bY3R4Lm51bV92bGFuc10ucHJvdG8gPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvO1xuJiM0MztcdFx0Y3R4Lm51bV92bGFucyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdGN0eC5kZXYgPSBzcmNfZGV2O1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGRzdF9oYSk7XG4mIzQzO1xuJiM0MztcdGlmIChkZXZfZmlsbF9icmlkZ2VfcGF0aChcdTAwMjZjdHgsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0bmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGRzdF9oYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSk7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby5pbmRldiB8fCBpbmZvLmluZGV2ICE9IGRzdF9kZXYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHRoWyFkaXJdLnR1cGxlLmlpZmlkeCA9IGluZm8uaW5kZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRmb3IgKGkgPSBpbmZvLm51bV9lbmNhcHMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4mIzQzO1x0XHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4mIzQzO1x0XHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5wcm90byA9IGluZm8uZW5jYXBbaV0ucHJvdG87XG4mIzQzO1x0XHRpZiAoaW5mby5pbmdyZXNzX3ZsYW5zIFx1MDAyNiBCSVQoaSkpXG4mIzQzO1x0XHRcdHRoWyFkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyB8PSBCSVQoaik7XG4mIzQzO1x0XHRqJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0dGhbIWRpcl0udHVwbGUuZW5jYXBfbnVtID0gaW5mby5udW1fZW5jYXBzO1xuJiM0MztcbiYjNDM7XHR0aFtkaXJdLnR1cGxlLm10dSA9IGRzdF9kZXYtXHUwMDNlbXR1O1xuJiM0MztcdGV0aGVyX2FkZHJfY29weSh0aFtkaXJdLnR1cGxlLm91dC5oX3NvdXJjZSwgc3JjX2hhKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkodGhbZGlyXS50dXBsZS5vdXQuaF9kZXN0LCBkc3RfaGEpO1xuJiM0MztcdHRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHR0aFtkaXJdLnR1cGxlLnhtaXRfdHlwZSA9IEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiYjNDM7XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbl9kZXYsICpvdXRfZGV2O1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGV0aF9oZHIocGt0LVx1MDAzZXNrYik7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGU7XG4mIzQzO1x0aW50IGVyciwgaSA9IDA7XG4mIzQzO1xuJiM0MztcdGluX2RldiA9IG5mdF9pbihwa3QpO1xuJiM0MztcdGlmICghaW5fZGV2IHx8ICFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluX2RldiwgZnQpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRvdXRfZGV2ID0gbmZ0X291dChwa3QpO1xuJiM0MztcdGlmICghb3V0X2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihvdXRfZGV2LCBmdCkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHR1cGxlID0gIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQocGt0LVx1MDAzZXNrYikpIHtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gc2tiX3ZsYW5fdGFnX2dldChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gcGt0LVx1MDAzZXNrYi1cdTAwM2V2bGFuX3Byb3RvO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGV0aF9oZHIocGt0LVx1MDAzZXNrYiktXHUwMDNlaF9wcm90bykge1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfODAyMVEpOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0XHQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmhkci1cdTAwM2VoX3ZsYW5fVENJKTtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKToge1xuJiM0MztcdFx0c3RydWN0IHBwcG9lX2hkciAqcGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0XHQgICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XG4mIzQzO1xuJiM0MztcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4mIzQzO1x0XHR0dXBsZS1cdTAwM2VlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QX1BQUF9TRVMpO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0fVxuJiM0MztcdHR1cGxlLVx1MDAzZWVuY2FwX251bSA9IGk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aChmbG93LCBmdCwgIWRpciwgb3V0X2RldiwgaW5fZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBldGgtXHUwMDNlaF9kZXN0LCBldGgtXHUwMDNlaF9zb3VyY2UpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsIGRpciwgaW5fZGV2LCBvdXRfZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBldGgtXHUwMDNlaF9zb3VyY2UsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDM1Li4xYTVlZWY0NmY5MjJkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuQEAgLTUzLDEzICYjNDM7NTMsMTQgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiB7XG4gXHRzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4gXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcdTAwMjZwcml2LVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VkYXRhO1xuJiM0MztcdGJvb2wgcm91dGluZyA9IGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRTtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0Y3BoID0gTlVMTDtcbiBcdHN0cnVjdCBuZl9mbG93X3JvdXRlIHJvdXRlID0ge307XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0LCB0aG9mZjtcbiBcbiBcdGlmIChuZnRfZmxvd19vZmZsb2FkX3NraXAocGt0LVx1MDAzZXNrYiwgbmZ0X3BmKHBrdCkpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC03MCw4ICYjNDM7NzEsMTEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcbiBcdHN3aXRjaCAoY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7XG4gXHRjYXNlIElQUFJPVE9fVENQOlxuLVx0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIG5mdF90aG9mZihwa3QpLFxuLVx0XHRcdFx0XHQgIHNpemVvZihfdGNwaCksIFx1MDAyNl90Y3BoKTtcbiYjNDM7XHRcdHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XG4mIzQzO1x0XHRpZiAodGhvZmYgPT0gMClcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIHRob2ZmLCBzaXplb2YoX3RjcGgpLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZfdGNwaCk7XG4gXHRcdGlmICh1bmxpa2VseSghdGNwaCB8fCB0Y3BoLVx1MDAzZWZpbiB8fCB0Y3BoLVx1MDAzZXJzdCB8fFxuIFx0XHRcdCAgICAgIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpKSlcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC0xMDYsMTQgJiM0MzsxMTAsMjEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4tXHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiM0MztcdGlmIChyb3V0aW5nKSB7XG4mIzQzO1x0XHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiM0MztcdH1cbiBcbiBcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xuIFx0aWYgKCFmbG93KVxuIFx0XHRnb3RvIGVycl9mbG93X2FsbG9jO1xuIFxuLVx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuJiM0MztcdGlmIChyb3V0aW5nKVxuJiM0MztcdFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlmIChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoZmxvdywgcGt0LCBkaXIsIHByaXYtXHUwMDNlZmxvd3RhYmxlKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfZmxvd19hZGQ7XG4mIzQzO1xuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuQEAgLTEyNyw4ICYjNDM7MTM4LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gZXJyX2Zsb3dfYWRkOlxuIFx0Zmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7XG4gZXJyX2Zsb3dfYWxsb2M6XG4tXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4tXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xuJiM0MztcdGlmIChyb3V0aW5nKSB7XG4mIzQzO1x0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4mIzQzO1x0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xuJiM0MztcdH1cbiBlcnJfZmxvd19yb3V0ZTpcbiBcdGNsZWFyX2JpdChJUFNfT0ZGTE9BRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gb3V0OlxuQEAgLTE0Miw3ICYjNDM7MTU1LDggQEAgc3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjQgXHUwMDI2XHUwMDI2XG4gXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjYgXHUwMDI2XHUwMDI2XG4tXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXG4mIzQzO1x0ICAgIGN0eC1cdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JTkVUIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjdHgtXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fQlJJREdFKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cdTAwM2VjaGFpbiwgaG9va19tYXNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZmlsbF9icmlkZ2VfcGF0aCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfYnJpZGdlX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9icmlkZ2UmIzM0OywKICAgICYjMzQ7YnJfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzIwNWE1MjVhZDBjZDZkNDQxMGRhMGMzOTE1ZDNlM2NhZGIxNWRlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTY6MzA6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZmRlZTQ0NjVkNjEyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzQyMCw2ICYjNDM7MzQyMCw4IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pOwogCiBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO2ludCBkZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAomIzQzOwkJCSBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7CiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spOwogc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggN2IyM2IyNDVhNWE4NmEuLmExMDllZGE1MjUwYzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKQEAgLTMwNSw2ICYjNDM7MzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIHZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAkJCSAgICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlKTsKIAomIzQzO2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7CiYjNDM7CiBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTsKIHZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgYm9vbCBmb3JjZSk7CkBAIC0zNjgsNiAmIzQzOzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTsKIGludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJZW51bSBmbG93X2Jsb2NrX2NvbW1hbmQgY21kKTsKJiM0MztpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiYjNDM7CQkJZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpciwKJiM0MzsJCQlzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpOwogaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAkJCSAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLAogCQkJICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCBlN2YzNDNhYjIyZDM3OS4uODlmNDUyNWE3Mjc5ZDYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwpAQCAtMzg1LDE2ICYjNDM7Mzg1LDI1IEBAIHN0YXRpYyBpbnQgYnJfZGVsX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpCiBzdGF0aWMgaW50IGJyX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCkKIHsKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc3JjLCAqZHN0OwogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3Q7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCi0JaWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KGN0eC0mZ3Q7ZGV2KSkKLQkJcmV0dXJuIC0xOwomIzQzOwlpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoY3R4LSZndDtkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2OwomIzQzOwomIzQzOwkJYnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtJmd0O2Rldik7CiYjNDM7CQlpZiAoIWJyX2RldikKJiM0MzsJCQlyZXR1cm4gLTE7CiAKLQliciA9IG5ldGRldl9wcml2KGN0eC0mZ3Q7ZGV2KTsKJiM0MzsJCXNyYyA9IGJyX3BvcnRfZ2V0X3JjdShjdHgtJmd0O2Rldik7CiYjNDM7CQliciA9IG5ldGRldl9wcml2KGJyX2Rldik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzcmMgPSBOVUxMOwomIzQzOwkJYnIgPSBuZXRkZXZfcHJpdihjdHgtJmd0O2Rldik7CiYjNDM7CX0KIAotCWJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChiciwgY3R4LCBwYXRoKTsKJiM0MzsJYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKGJyLCBzcmMsIGN0eCwgcGF0aCk7CiAKIAlmID0gYnJfZmRiX2ZpbmRfcmN1KGJyLCBjdHgtJmd0O2RhZGRyLCBwYXRoLSZndDticmlkZ2Uudmxhbl9pZCk7CiAJaWYgKCFmKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCBkNTVlYTk1MTZlM2UzNi4uMDBmNWI3MmZmNDJkZWEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC0xNjMwLDYgJiM0MzsxNjMwLDcgQEAgYm9vbCBicl92bGFuX2Nhbl9lbnRlcl9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnJhbmdlX2VuZCk7CiAKIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpOwogaW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCkBAIC0xNzk5LDYgJiM0MzsxODAwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbmJwX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKJiM0MzsJCQkJCQkgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpCiB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jCmluZGV4IDU1NjBhZmNhYWNhMzI3Li43MTUzMTQ5OWJjNzM1NiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl92bGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl92bGFuLmMKQEAgLTE0NTAsNiAmIzQzOzE0NTAsNyBAQCBpbnQgYnJfdmxhbl9nZXRfcHZpZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2ICpwX3B2aWQpCiBFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9wdmlkX3JjdSk7CiAKIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpCiB7CkBAIC0xNDYyLDcgJiM0MzsxNDYzLDEwIEBAIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpCiAJCXJldHVybjsKIAotCXZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpOwomIzQzOwlpZiAocCkKJiM0MzsJCXZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApOwomIzQzOwllbHNlCiYjNDM7CQl2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTsKIAogCWlmIChpZHggJmd0Oz0gMCAmYW1wOyZhbXA7CiAJICAgIGN0eC0mZ3Q7dmxhbltpZHhdLnByb3RvID09IGJyLSZndDt2bGFuX3Byb3RvKSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5mNjY4NWMxZTQ3ODYwMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTc1MCw0NCAmIzQzOzc1MCw4NCBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogCXJldHVybiAmYW1wO3N0YWNrLSZndDtwYXRoW2tdOwogfQogCi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiYjNDM7c3RhdGljIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewotCQkuZGV2CT0gZGV2LAotCX07CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKIAlpbnQgcmV0ID0gMDsKIAotCW1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7Ci0Jc3RhY2stJmd0O251bV9wYXRocyA9IDA7Ci0Jd2hpbGUgKGN0eC5kZXYgJmFtcDsmYW1wOyBjdHguZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHsKLQkJbGFzdF9kZXYgPSBjdHguZGV2OwomIzQzOwl3aGlsZSAoY3R4LSZndDtkZXYgJmFtcDsmYW1wOyBjdHgtJmd0O2Rldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7CiYjNDM7CQlsYXN0X2RldiA9IGN0eC0mZ3Q7ZGV2OwogCQlwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTsKIAkJaWYgKCFwYXRoKQogCQkJcmV0dXJuIC0xOwogCiAJCW1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpOwotCQlyZXQgPSBjdHguZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgoJmFtcDtjdHgsIHBhdGgpOwomIzQzOwkJcmV0ID0gY3R4LSZndDtkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiAtMTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtJmd0O2RldikpCiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKCFjdHguZGV2KQomIzQzOwlpZiAoIWN0eC0mZ3Q7ZGV2KQogCQlyZXR1cm4gcmV0OwogCiAJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLTE7CiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUOwotCXBhdGgtJmd0O2RldiA9IGN0eC5kZXY7CiYjNDM7CXBhdGgtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2OwogCiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKJiM0MztpbnQgZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKJiM0MzsJCQkgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXYsICpicl9kZXY7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiYjNDM7CiYjNDM7CXN0YWNrLSZndDtudW1fcGF0aHMgPSAwOwomIzQzOwomIzQzOwlpZiAoIWN0eC0mZ3Q7ZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtJmd0O2RldikpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3UoKHN0cnVjdCBuZXRfZGV2aWNlICopY3R4LSZndDtkZXYpOwomIzQzOwlpZiAoIWJyX2RldiB8fCAhYnJfZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWxhc3RfZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwomIzQzOwlpZiAoIXBhdGgpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CW1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpOwomIzQzOwlpZiAoYnJfZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmICghY3R4LSZndDtkZXYgfHwgV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC0mZ3Q7ZGV2KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oY3R4LCBzdGFjayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2JyaWRnZV9wYXRoKTsKJiM0MzsKJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKJiM0MzsJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldgk9IGRldiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJbWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTsKJiM0MzsKJiM0MzsJc3RhY2stJmd0O251bV9wYXRocyA9IDA7CiYjNDM7CiYjNDM7CXJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKCZhbXA7Y3R4LCBzdGFjayk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTsKIAogLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBhcyB3ZSBkb250IHRha2UgYSByZWZlcmVuY2UgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jCmluZGV4IGIwZjE5OTE3MTkzMjQxLi44MGIyMzgxOTZmMjliMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jCkBAIC02NSw2ICYjNDM7NjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2JyaWRnZSA9IHsKJiM0MzsJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKJiM0MzsJLmluaXQJCT0gbmZfZmxvd190YWJsZV9pbml0LAomIzQzOwkuc2V0dXAJCT0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLAomIzQzOwkuYWN0aW9uCQk9IG5mX2Zsb3dfcnVsZV9icmlkZ2UsCiYjNDM7CS5mcmVlCQk9IG5mX2Zsb3dfdGFibGVfZnJlZSwKJiM0MzsJLmhvb2sJCT0gbmZfZmxvd19vZmZsb2FkX2luZXRfaG9vaywKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0gewogCS5mYW1pbHkJCT0gTkZQUk9UT19JTkVULAogCS5pbml0CQk9IG5mX2Zsb3dfdGFibGVfaW5pdCwKQEAgLTk3LDYgJiM0MzsxMDcsNyBAQCBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0gewogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X2luZXRfbW9kdWxlX2luaXQodm9pZCkKIHsKJiM0MzsJbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKCZhbXA7Zmxvd3RhYmxlX2JyaWRnZSk7CiAJbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKCZhbXA7Zmxvd3RhYmxlX2lwdjQpOwogCW5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pcHY2KTsKIAluZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoJmFtcDtmbG93dGFibGVfaW5ldCk7CkBAIC0xMDksNiAmIzQzOzEyMCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X2luZXRfbW9kdWxlX2V4aXQodm9pZCkKIAluZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pbmV0KTsKIAluZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pcHY2KTsKIAluZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pcHY0KTsKJiM0MzsJbmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoJmFtcDtmbG93dGFibGVfYnJpZGdlKTsKIH0KIAogbW9kdWxlX2luaXQobmZfZmxvd19pbmV0X21vZHVsZV9pbml0KTsKQEAgLTExOCw1ICYjNDM7MTMwLDYgQEAgTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGFibG8gTmVpcmEgQXl1c28gJmx0O3BhYmxvQG5ldGZpbHRlci5vcmcmZ3Q7JiMzNDspOwogTU9EVUxFX0FMSUFTX05GX0ZMT1dUQUJMRShBRl9JTkVUKTsKIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVDYpOwomIzQzO01PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfQlJJREdFKTsKIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoMSk7IC8qIE5GUFJPVE9fSU5FVCAqLwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZSYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCmluZGV4IDAwMmVjMTVkOTg4YmRiLi41NTY2ZWJkYTdiN2QzMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCkBAIC03NDAsNiAmIzQzOzc0MCwxOSBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQllbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLAomIzQzOwkJCXN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSkKJiM0Mzt7CiYjNDM7CWlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZmxvd19vZmZsb2FkX3JlZGlyZWN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX2JyaWRnZSk7CiYjNDM7CiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAogCQkJICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsCiAJCQkgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKaW5kZXggOThjMDNiNDg3ZjUyMTEuLjJkZWI4ZTRkNTMyOGIzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKQEAgLTEsNiAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwpAQCAtMzUwLDMgJiM0MzszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAogCXJldHVybiAtRU5PRU5UOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQsCiYjNDM7CQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnNyY19kZXYsCiYjNDM7CQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZHN0X2RldiwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGNoYXIgKnNyY19oYSwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGNoYXIgKmRzdF9oYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnRoID0gZmxvdy0mZ3Q7dHVwbGVoYXNoOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7fTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjazsKJiM0MzsJc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gaW5mbyA9IHt9OwomIzQzOwlpbnQgaSwgaiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHRoW2Rpcl0udHVwbGUuZW5jYXBfbnVtIC0gMTsgaSAmZ3Q7PSAwIDsgaS0tKSB7CiYjNDM7CQlpZiAoaW5mby5udW1fZW5jYXBzICZndDs9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJCWlmICh0aFtkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyAmYW1wOyBCSVQoaSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpbmZvLmVuY2FwW2luZm8ubnVtX2VuY2Fwc10uaWQgPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLmlkOwomIzQzOwkJaW5mby5lbmNhcFtpbmZvLm51bV9lbmNhcHNdLnByb3RvID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90bzsKJiM0MzsJCWluZm8ubnVtX2VuY2FwcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAodGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90byA9PSBodG9ucyhFVEhfUF9QUFBfU0VTKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChjdHgubnVtX3ZsYW5zICZndDs9IE5FVF9ERVZJQ0VfUEFUSF9WTEFOX01BWCkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQljdHgudmxhbltjdHgubnVtX3ZsYW5zXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7CiYjNDM7CQljdHgudmxhbltjdHgubnVtX3ZsYW5zXS5wcm90byA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0ucHJvdG87CiYjNDM7CQljdHgubnVtX3ZsYW5zJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwljdHguZGV2ID0gc3JjX2RldjsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgZHN0X2hhKTsKJiM0MzsKJiM0MzsJaWYgKGRldl9maWxsX2JyaWRnZV9wYXRoKCZhbXA7Y3R4LCAmYW1wO3N0YWNrKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CW5mdF9kZXZfcGF0aF9pbmZvKCZhbXA7c3RhY2ssICZhbXA7aW5mbywgZHN0X2hhLCAmYW1wO2Z0LSZndDtkYXRhKTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLmluZGV2IHx8IGluZm8uaW5kZXYgIT0gZHN0X2RldikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJdGhbIWRpcl0udHVwbGUuaWlmaWR4ID0gaW5mby5pbmRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJZm9yIChpID0gaW5mby5udW1fZW5jYXBzIC0gMTsgaSAmZ3Q7PSAwOyBpLS0pIHsKJiM0MzsJCXRoWyFkaXJdLnR1cGxlLmVuY2FwW2pdLmlkID0gaW5mby5lbmNhcFtpXS5pZDsKJiM0MzsJCXRoWyFkaXJdLnR1cGxlLmVuY2FwW2pdLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bzsKJiM0MzsJCWlmIChpbmZvLmluZ3Jlc3NfdmxhbnMgJmFtcDsgQklUKGkpKQomIzQzOwkJCXRoWyFkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyB8PSBCSVQoaik7CiYjNDM7CQlqJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwl0aFshZGlyXS50dXBsZS5lbmNhcF9udW0gPSBpbmZvLm51bV9lbmNhcHM7CiYjNDM7CiYjNDM7CXRoW2Rpcl0udHVwbGUubXR1ID0gZHN0X2Rldi0mZ3Q7bXR1OwomIzQzOwlldGhlcl9hZGRyX2NvcHkodGhbZGlyXS50dXBsZS5vdXQuaF9zb3VyY2UsIHNyY19oYSk7CiYjNDM7CWV0aGVyX2FkZHJfY29weSh0aFtkaXJdLnR1cGxlLm91dC5oX2Rlc3QsIGRzdF9oYSk7CiYjNDM7CXRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CXRoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAomIzQzOwkJCSAgICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluX2RldiwgKm91dF9kZXY7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmV0aCA9IGV0aF9oZHIocGt0LSZndDtza2IpOwomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZTsKJiM0MzsJaW50IGVyciwgaSA9IDA7CiYjNDM7CiYjNDM7CWluX2RldiA9IG5mdF9pbihwa3QpOwomIzQzOwlpZiAoIWluX2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihpbl9kZXYsIGZ0KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJb3V0X2RldiA9IG5mdF9vdXQocGt0KTsKJiM0MzsJaWYgKCFvdXRfZGV2IHx8ICFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KG91dF9kZXYsIGZ0KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJdHVwbGUgPSAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGU7CiYjNDM7CiYjNDM7CWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChwa3QtJmd0O3NrYikpIHsKJiM0MzsJCXR1cGxlLSZndDtlbmNhcFtpXS5pZCA9IHNrYl92bGFuX3RhZ19nZXQocGt0LSZndDtza2IpOwomIzQzOwkJdHVwbGUtJmd0O2VuY2FwW2ldLnByb3RvID0gcGt0LSZndDtza2ItJmd0O3ZsYW5fcHJvdG87CiYjNDM7CQlpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGV0aF9oZHIocGt0LSZndDtza2IpLSZndDtoX3Byb3RvKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfODAyMVEpOiB7CiYjNDM7CQlzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC0mZ3Q7c2tiKQomIzQzOwkJCQkJICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiYjNDM7CQl0dXBsZS0mZ3Q7ZW5jYXBbaV0uaWQgPSBudG9ocyh2aGRyLSZndDtoX3ZsYW5fVENJKTsKJiM0MzsJCXR1cGxlLSZndDtlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTsKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTogewomIzQzOwkJc3RydWN0IHBwcG9lX2hkciAqcGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC0mZ3Q7c2tiKQomIzQzOwkJCQkJICAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwomIzQzOwomIzQzOwkJdHVwbGUtJmd0O2VuY2FwW2ldLmlkID0gbnRvaHMocGhkci0mZ3Q7c2lkKTsKJiM0MzsJCXR1cGxlLSZndDtlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QX1BQUF9TRVMpOwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl9CiYjNDM7CXR1cGxlLSZndDtlbmNhcF9udW0gPSBpOwomIzQzOwomIzQzOwllcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsICFkaXIsIG91dF9kZXYsIGluX2RldiwKJiM0MzsJCQkJICAgICAgIGV0aC0mZ3Q7aF9kZXN0LCBldGgtJmd0O2hfc291cmNlKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsIGRpciwgaW5fZGV2LCBvdXRfZGV2LAomIzQzOwkJCQkgICAgICAgZXRoLSZndDtoX3NvdXJjZSwgZXRoLSZndDtoX2Rlc3QpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwppbmRleCAzMmI0MjgxMDM4ZGQzNS4uMWE1ZWVmNDZmOTIyZDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCkBAIC01MywxMyAmIzQzOzUzLDE0IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiB7CiAJc3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOwogCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSA9ICZhbXA7cHJpdi0mZ3Q7Zmxvd3RhYmxlLSZndDtkYXRhOwomIzQzOwlib29sIHJvdXRpbmcgPSBmbG93dGFibGUtJmd0O3R5cGUtJmd0O2ZhbWlseSAhPSBORlBST1RPX0JSSURHRTsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGNwaCA9IE5VTEw7CiAJc3RydWN0IG5mX2Zsb3dfcm91dGUgcm91dGUgPSB7fTsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93OwogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIHRob2ZmOwogCiAJaWYgKG5mdF9mbG93X29mZmxvYWRfc2tpcChwa3QtJmd0O3NrYiwgbmZ0X3BmKHBrdCkpKQogCQlnb3RvIG91dDsKQEAgLTcwLDggJiM0Mzs3MSwxMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCiAJc3dpdGNoIChjdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7CiAJY2FzZSBJUFBST1RPX1RDUDoKLQkJdGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtJmd0O3NrYiwgbmZ0X3Rob2ZmKHBrdCksCi0JCQkJCSAgc2l6ZW9mKF90Y3BoKSwgJmFtcDtfdGNwaCk7CiYjNDM7CQl0aG9mZiA9IG5mdF90aG9mZihwa3QpOwomIzQzOwkJaWYgKHRob2ZmID09IDApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC0mZ3Q7c2tiLCB0aG9mZiwgc2l6ZW9mKF90Y3BoKSwKJiM0MzsJCQkJCSAgJmFtcDtfdGNwaCk7CiAJCWlmICh1bmxpa2VseSghdGNwaCB8fCB0Y3BoLSZndDtmaW4gfHwgdGNwaC0mZ3Q7cnN0IHx8CiAJCQkgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpCiAJCQlnb3RvIG91dDsKQEAgLTEwNiwxNCAmIzQzOzExMCwyMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQlnb3RvIG91dDsKIAogCWRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKLQlpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgJmFtcDtyb3V0ZSwgZGlyLCBwcml2LSZndDtmbG93dGFibGUpICZsdDsgMCkKLQkJZ290byBlcnJfZmxvd19yb3V0ZTsKJiM0MzsJaWYgKHJvdXRpbmcpIHsKJiM0MzsJCWlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCAmYW1wO3JvdXRlLCBkaXIsIHByaXYtJmd0O2Zsb3d0YWJsZSkgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX2Zsb3dfcm91dGU7CiYjNDM7CX0KIAogCWZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpOwogCWlmICghZmxvdykKIAkJZ290byBlcnJfZmxvd19hbGxvYzsKIAotCWZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csICZhbXA7cm91dGUpOwomIzQzOwlpZiAocm91dGluZykKJiM0MzsJCWZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csICZhbXA7cm91dGUpOwomIzQzOwllbHNlCiYjNDM7CQlpZiAoZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KGZsb3csIHBrdCwgZGlyLCBwcml2LSZndDtmbG93dGFibGUpICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9mbG93X2FkZDsKJiM0MzsKIAlpZiAodGNwaCkKIAkJZmxvd19vZmZsb2FkX2N0X3RjcChjdCk7CiAKQEAgLTEyNyw4ICYjNDM7MTM4LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiBlcnJfZmxvd19hZGQ6CiAJZmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7CiBlcnJfZmxvd19hbGxvYzoKLQlkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7Ci0JZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTsKJiM0MzsJaWYgKHJvdXRpbmcpIHsKJiM0MzsJCWRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTsKJiM0MzsJCWRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7CiYjNDM7CX0KIGVycl9mbG93X3JvdXRlOgogCWNsZWFyX2JpdChJUFNfT0ZGTE9BRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cyk7CiBvdXQ6CkBAIC0xNDIsNyAmIzQzOzE1NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCiAJaWYgKGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSVBWNCAmYW1wOyZhbXA7CiAJICAgIGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSVBWNiAmYW1wOyZhbXA7Ci0JICAgIGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSU5FVCkKJiM0MzsJICAgIGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSU5FVCAmYW1wOyZhbXA7CiYjNDM7CSAgICBjdHgtJmd0O2ZhbWlseSAhPSBORlBST1RPX0JSSURHRSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtJmd0O2NoYWluLCBob29rX21hc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBCcmlkZ2UgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCwgd2hpY2ggZGVmaW5pdGVseSBzb3VuZHMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMuIEkgc2VlIGBkZXZfZmlsbF9icmlkZ2VfcGF0aGAgaW4gYG5ldC9jb3JlL2Rldi5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgbG9vaywgYW5kIGBicl9maWxsX2ZvcndhcmRfcGF0aGAgaW4gYG5ldC9icmlkZ2UvYnJfZGV2aWNlLmNgIGdldHMgbW9kaWZpZWQuIFRoZW4sIHdlIGhhdmUgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGAgYW5kIGBuZl9mbG93X3J1bGVfYnJpZGdlYCBpbiB0aGUgbmV0ZmlsdGVyIHNpZGUsIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCByZXNwZWN0aXZlbHkuIEl0IGFsc28gcmVnaXN0ZXJzIGBmbG93dGFibGVfYnJpZGdlYCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuY2AuIEZpbmFsbHkgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBpcyBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgYE5GUFJPVE9fQlJJREdFYC4KClllcywgdGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtlcm5lbCBmdW5jdGlvbnMgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gTG9va3MgbGlrZToKCiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgCiogICBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YAoqICAgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgKHN0YXRpY2FsbHkgZGVmaW5lZCkKKiAgIGBuZl9mbG93X3J1bGVfYnJpZGdlYAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb21waWxlZCBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIGNvZGUgaXMgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmaWxlczoKCiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgIGxpdmVzIGluIGBuZXQvY29yZS9kZXYuY2AKKiAgIGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jYAoqICAgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYAoqICAgYGZsb3d0YWJsZV9icmlkZ2VgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jYAoKVGltZSB0byB3aGlwIG91dCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgY29udHJvbGxpbmcgdGhpcy4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwIHRvIGVuc3VyZSBJIGNhbiBidWlsZCBhIGZ1enplciB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSB3aWRlc3Qgc2V0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBuZl9mbG93X3RhYmxlYCBpbiB0aGUgTmV0ZmlsdGVyIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgYG5mX2Zsb3dfdGFibGVgIG1vZHVsZSBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBrZXJuZWwgZGV2ZWxvcG1lbnQsIGlzIHRvIGNoZWNrIHRoZSBgTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIHJlc2lkZS4gSXQmIzM5O2xsIHRlbGwgbWUgaG93IGBuZl9mbG93X3RhYmxlYCBpcyBjb21waWxlZCwgbGlua2VkLCBhbmQgcG9zc2libHkgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBgbmV0L25ldGZpbHRlci9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQmIzM5O3MgaW4gaXRzIE1ha2VmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgYnVpbGQgcHJvY2VzcyB3aWxsIGlsbHVtaW5hdGUgaXRzIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkIGZsYWdzLCBhbmQgb3ZlcmFsbCByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGF0IE1ha2VmaWxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGUtb2JqcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQyPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvZGUgcG9pbnRzIHRvIHRoZSBtYW5kYXRvcnkgcmVxdWlyZW1lbnQgb2YgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gVGhhdCYjMzk7cyB0aGUgY29yZSwgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5nLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgdGhhbiBqdXN0IHRoYXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IGBuZl9mbG93X3RhYmxlX2luZXQub2A/IElzIGl0IGFsc28gbmVjZXNzYXJ5PyBUaGUgZGVwZW5kZW5jeSB0cmVlIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0aGUgYXNzb2NpYXRlZCBtb2R1bGVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgaW1wbGljaXRseSBidWlsdCB3aXRoIHRoYXQsIG9yIGlmIGl0IHJlcXVpcmVzIGl0cyBvd24gZXhwbGljaXQgY2FsbCwgb3IgaXQgbWF5IG5lZWQgb3RoZXIgb3B0aW9ucy4gVGltZSB0byBhbmFseXplIHRoZSBidWlsZCBzeXN0ZW0gbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfaW5ldFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLCBJIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCYjMzk7cyBqdW1waW5nIHRvIG15IG1pbmQgaXMgYWJvdXQgYG5mdF9mbG93X29mZmxvYWQub2AuIElzIHRoaXMgbW9kdWxlJiMzOTtzIGluY2x1c2lvbiBhbHNvIGVzc2VudGlhbCBvciB0aWVkIHRvIHNwZWNpZmljIGZlYXR1cmVzIEkgYW0gdXNpbmc/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZmxvdyB0YWJsZSBhbmQgdGhlIG9mZmxvYWQgY29tcG9uZW50OyBkbyB0aGV5IGJvdGggbmVlZCB0byBiZSBwcmVzZW50IGFuZCBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbCBmb3IgdGhpbmdzIHRvIGZ1bmN0aW9uIHByb3Blcmx5PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVx0XHQmIzQzOz0gbmZ0X2N0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVx0JiM0Mzs9IG5mdF9mbG93X29mZmxvYWQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcdFx0JiM0Mzs9IG5mdF9saW1pdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTMzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEkmIzM5O20gd29ya2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE5GVGFibGVzIEZsb3cgT2ZmbG9hZCBEZXBlbmRlbmNpZXMgaW4gQnJpZGdlIENvZGUqKgoKQWxyaWdodCwgdGhlIHN5c3RlbSYjMzk7cyB0ZWxsaW5nIG1lIHRoYXQgYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYCBpcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQgaGVyZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgYnJpZGdlIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGVsdmUgaW50byBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgYW5kIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHM7IHRoZXkmIzM5O3JlIHRoZSBjb3JlIG9mIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSBhbmQgVkxBTiBoYW5kbGluZyByZXNwZWN0aXZlbHksIHNvIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gZmluZCB0aGUgaW50ZWdyYXRpb24sIG9yIGxhY2sgdGhlcmVvZiwgd2l0aCBuZnRhYmxlcyBvZmZsb2FkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIGluIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZSwgb3Igd2hldGhlciB0aGVyZSBuZWVkcyB0byBiZSBhIGhvb2sgYWRkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2RldmljZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0JSSURHRSkgJiM0Mzs9IGJyaWRnZS5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTctXG5uZXQvYnJpZGdlL01ha2VmaWxlOjg6YnJpZGdlLXlcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxubmV0L2JyaWRnZS9NYWtlZmlsZS05LVx0XHRcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0JSSURHRWAgaXMgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBoZXJlLiBUaGF0JiMzOTtzIGhhcmRseSBzdXJwcmlzaW5nLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJyaWRnaW5nIGFmdGVyIGFsbC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWluZyBlbmFibGVkLgoKTm93LCB3aGF0IGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgYnJfdmxhbi5jYD8gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIG1vZHVsZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgYnJpZGdpbmcgZnJhbWV3b3JrLiBJcyBpdCBhIGNvcmUgY29tcG9uZW50PyBBIHN1cHBvcnRpbmcgbW9kdWxlPyBBcmUgdGhlcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX3ZsYW5cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZT0yMT1icmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIzOmJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQnJpZGdlZCBWTEFOIEZpbHRlcmluZyAtIERpZ2dpbmcgRGVlcGVyKioKClJpZ2h0LCBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyB3b3JraW5nIHVuZGVyIHRoZSBob29kLCBwYXJ0aWN1bGFybHkgaG93IHRoZSBrZXJuZWwgZGV0ZXJtaW5lcyBpZiBhIHBhY2tldCBzaG91bGQgYmUgYnJpZGdlZCB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQuIE15IGluc3RpbmN0cyB0ZWxsIG1lIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzIGluIHNvbWV0aGluZyBsaWtlIHRoZSBkZXZpY2UgcGF0aCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbS4KCkxldCYjMzk7cyBkaXZlIGludG8gYGRldl9maWxsX2JyaWRnZV9wYXRoYCB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl04oCZcyByZXNwb25zaWJsZSBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwYXRoIGEgcGFja2V0IHRha2VzIHRocm91Z2ggdGhlIGJyaWRnaW5nIGluZnJhc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHBhdGgtYnVpbGRpbmcgaW50ZXJhY3RzIHdpdGggVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZC4gVGhpcyBzaG91bGQgZXhwb3NlIHRoZSBjcnVjaWFsIGRlY2lzaW9uIHBvaW50cyBhbmQgZmlsdGVyaW5nIHJ1bGVzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaG93IHRoZSBWTEFOIHRhZyBpcyBjb25zaWRlcmVkIGR1cmluZyBwYXRoIGRldGVybWluYXRpb24gYW5kIHdoZXRoZXIgaXTigJlzIHVzZWQgaW4gZmlsdGVyaW5nIHBhY2tldHMgZGVzdGluZWQgZm9yIHRoZSBicmlkZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzUzPXN0YXRpYyBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc4Ni1cbm5ldC9jb3JlL2Rldi5jOjc4NzppbnQgZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9jb3JlL2Rldi5jLTc4OC1cdFx0XHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtODE1LX1cbm5ldC9jb3JlL2Rldi5jOjgxNjpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9icmlkZ2VfcGF0aCk7XG5uZXQvY29yZS9kZXYuYy04MTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTE3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gRmxvdyBPZmZsb2FkIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGRvZXMgdGhlIG1hZ2ljIHJlYWxseSBiZWdpbiBmb3IgdGhlIGZsb3cgb2ZmbG9hZCBicmlkZ2UgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiBob3cgdGhpcyB0aGluZyBnZXRzIGluaXRpYWxpemVkLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBpcyB0aGUgZnVuY3Rpb24gdG8gZXhhbWluZS4gU3BlY2lmaWNhbGx5LCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBiZSBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgIGZpbGUuIFRpbWUgdG8gZGlnIGluIHRoZXJlIGFuZCBzZWUgaG93IHRoZSBicmlkZ2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIHJlc291cmNlcyBhcmUgc2V0dXAgZm9yIHRoZSBmbG93IG9mZmxvYWQgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIGFyZSBob29rZWQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zNTU9c3RhdGljIGludCBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQxOC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDE5OmludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDIwLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NzctfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0Nzg6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGUsIHRoaW5raW5nIG91dCBsb3VkOgoKKipEaXZpbmcgaW50byBuZl9mbG93X3J1bGVfYnJpZGdlKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmZfZmxvd19ydWxlX2JyaWRnZWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSYjMzk7cyByb2xlIGluIHRoZSBvZmZsb2FkIHBhdGguIFNpbmNlIGl0JiMzOTtzIGJyaWRnZS1yZWxhdGVkLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFja2V0IHRyYXZlcnNlcyBhIGJyaWRnZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHJ1bGUgY3JlYXRpb24sIG1hdGNoaW5nLCBhbmQgZXZpY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgYnJpZGdlZCBlbnZpcm9ubWVudC4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGJyaWRnZSBuZXRkZXZpY2Ugc3RydWN0dXJlLCBhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHBhY2tldHMgZ2V0IGZvcndhcmRlZCB0aHJvdWdoIHRoZSBmbG93IHRhYmxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGFuZCBob3cgdGhlIGJyaWRnZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiAobGlrZSBWTEFOIElEcyBvciBNQUMgYWRkcmVzc2VzKSBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgZmxvdyBrZXkgYW5kIHJ1bGUgbWF0Y2hpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIHJlYWR5IHRvIHRyYWNlIGhvdyB0aGUgcGFja2V0cyBhcmUgZ2V0dGluZyBwdW50ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZS4gSSYjMzk7bSBnb2luZyB0byB3YXRjaCB0aGUgZGF0YSBwYXRoIGNsb3NlbHkuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaG9va3Mgb3IgY2FsbGJhY2tzIHRvIHRoZSBicmlkZ2UgZHJpdmVyIGl0c2VsZj8gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY2FsbGJhY2tzIGFyZSBkb2luZyBhbmQgd2hlcmUgdGhleSYjMzk7cmUgaW52b2tlZC4gQW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIEFQSSBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaGFyZHdhcmUgYW5kIHRoZSBzb2Z0d2FyZSBpcywgYW5kIGhvdyBpdCBpcyBlbmZvcmNlZC4gRmluYWxseSwgbGV0JiMzOTtzIGZpbmQgdGhlIHBsYWNlcyB3aGVyZSB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIG1heWJlIHRoZSBkZXZpY2UgZHJpdmVycyYjMzk7IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3J1bGVfYnJpZGdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzQzOmludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzQ0LVx0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3NTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX2JyaWRnZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGlzOiBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgLCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCwgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgLCBhbmQgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGAgYmVjYXVzZSBJIGtub3cgdGhlc2Ugd2VyZSByZWNlbnRseSBtb2RpZmllZCwgaW5jcmVhc2luZyB0aGUgbGlrZWxpaG9vZCBvZiBpbnRlcmVzdGluZyBiZWhhdmlvci4KCkkmIzM5O20gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBmdW5jdGlvbnMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcyB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBhY2N1cmF0ZS4gYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZGVmaW5pdGVseSBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AsIGp1c3QgYXMgSSB0aG91Z2h0LiBJIGNhbiBjb25maXJtIGBicl9maWxsX2ZvcndhcmRfcGF0aGAgcmVzaWRlcyBpbiBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgYW5kIGBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWRgIGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIEFsbCBjaGVja3MgYXJlIGdvb2QuCgpOb3csIGZvciB0aGUgY29uZmlndXJhdGlvbnMsIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZXNlIGluIHBsYWNlIHdoZW4gdGVzdGluZzogYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLCBgQlJJREdFYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9GTE9XX1RBQkxFX0lORVRgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgdGFzazoKCioqRGVwZW5kZW5jaWVzIENoZWNrIGZvciBgTkZUX0ZMT1dfT0ZGTE9BRGAqKgoKUmlnaHQsIHNvIGBORlRfRkxPV19PRkZMT0FEYC4gVGhhdCYjMzk7cyBhIGtleSBmZWF0dXJlLCBhbmQgYmVmb3JlIEkgc3RhcnQgZG9pbmcgYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIHVuZGVybHlpbmcgcGllY2VzIGFyZSBpbiBwbGFjZS4gTm8gc2Vuc2Ugd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBhIGJ1aWxkIGxhdGVyIGlmIEkgY2FuIHByb2FjdGl2ZWx5IGlkZW50aWZ5IGFueSBtaXNzaW5nIGxpbmtzLiBUaGlzIG1lYW5zIGEgdGhvcm91Z2ggY2hlY2sgb2YgYWxsIGRlcGVuZGVuY2llcyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY29tcG9uZW50cyBgTkZUX0ZMT1dfT0ZGTE9BRGAgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBjb21waWxpbmc7IGl0JiMzOTtzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IgYW5kIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgcGxheXMgbmljZWx5IHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUsIGRvY3VtZW50YXRpb24sIGFuZCBtYXliZSBldmVuIHNvbWUgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipORl9GTE9XX1RBQkxFIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBORl9GTE9XX1RBQkxFYC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyB0b28gZWFzeSB0byBtYWtlIGEgY2hhbmdlIGhlcmUgYW5kIGJyZWFrIHNvbWV0aGluZyB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHdpdGhvdXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuCgpMZXQmIzM5O3Mgc2Vl4oCmIHdoYXQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgcmVseSBvbiB0aGlzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgcGVyaGFwcyBuZXRmaWx0ZXIgbW9kdWxlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHVzZXItc3BhY2UgaW50ZXJmYWNlcyB0aGF0IGFyZSBsaW5rZWQgdG8gdGhpcyB0YWJsZT8gSSBuZWVkIHRvIGxvb2sgZm9yIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0byBmaW5kIHJlZmVyZW5jZXMgYW5kIHRoZW4gbW92ZSB0byBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIHdpdGggbmV0ZmlsdGVyIGludGVybmFscy4gR290dGEgYmUgbWV0aG9kaWNhbCBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVx0Ym9vbCBcJiMzNDtTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIGEgY29uY2lzZSBzdW1tYXJ5IGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6CgoqKkluaXRpYWwgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gaW5pdGlhbGx5IHplcm9pbmcgaW4gb24gdGhlIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiBJJiMzOTttIG5vdGluZyB0aGUgcHJlc2VuY2Ugb2YgYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGZsb3cgdGFibGUgYW5kIG9mZmxvYWQgY2FwYWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSB2ZXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgbG9naWNhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZz0zNj1jb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIGFuZCB0aGlua2luZyBhbG9uZyB0aGVzZSBsaW5lczoKCioqQ2hlY2tpbmcgYEJSSURHRWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBvZiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgYEJSSURHRWAgc3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGltcGFjdHMsIGlkZW50aWZ5aW5nIGFueSBsdXJraW5nIGNvbmZsaWN0cywgb3IgcGlucG9pbnRpbmcgYXJlYXMgd2hlcmUgd2UgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB1cHN0cmVhbSBjaGFuZ2VzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZvdW5kYXRpb25zIGFyZSBzb2xpZC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgd2Ugc3RhbmQsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgQlJJREdFYCBzeXN0ZW0gYmVmb3JlIEkgbW92ZSBvbi4gV2hhdCBkb2VzIHRoZSBkZXBlbmRlbmN5IHRyZWUgbG9vayBsaWtlPyBBcmUgd2UgcmVseWluZyBvbiBhbnkgbGlicmFyaWVzIHRoYXQgYXJlIGtub3duIHBhaW4gcG9pbnRzLCBvciB0aGF0IGFyZSBhYm91dCB0byByZWFjaCBlbmQtb2YtbGlmZT8gQSBxdWljayBkZXBlbmRlbmN5IGF1ZGl0IGlzIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA5CgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCcmlkZ2UgU3VwcG9ydCBmb3IgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGJyaWRnZSBzdXBwb3J0IGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgQlJJREdFYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvYnJpZGdlL0tjb25maWdgLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBmdW5jdGlvbmFsaXRpZXMgYW5kIGludGVncmF0aW9uIHdpdGggdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4KCk15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgLCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCwgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgLCBgYnJfZmlsbF9mb3J3YXJkX3BhdGhgLCBhbmQgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGAuIExldCYjMzk7cyB2ZXJpZnkgdGhhdCBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IGFoLCB5ZXMsIGl0IGlzLiBJdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGluY2x1ZGUgaXQgd2l0aGluIHRoZSBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBkZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBieSBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYC4gVGhlbiwgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgY2FsbGVkIGJ5IGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgLiBGaW5hbGx5LCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBpcyBpbnZva2VkIGJ5IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHNwZWNpZmljYWxseSB3aGVuIHRoZSByb3V0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQsIG9yIHJhdGhlciwgd2hlbiBgZmxvd3RhYmxlLSZndDt0eXBlLSZndDtmYW1pbHkgPT0gTkZQUk9UT19CUklER0VgLiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpcyB0aGUgZXZhbHVhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBuZnRfZmxvd19vZmZsb2FkYCBleHByZXNzaW9uLCB3aGljaCBpcyB1c2VkIHdpdGhpbiBuZnRhYmxlcy4KClNvLCB0aGUgY29kZSBpcyByZWFjaGFibGUsIGFuZCBpdCYjMzk7cyBmdW5jdGlvbmFsLiBUaGF0IG1lYW5zIGl0IGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhlIGJyaWRnZS1uZXRmaWx0ZXIgaW50ZXJhY3Rpb24gYW5kIGNhbiBiZSB0ZXN0ZWQuCgpMZXQmIzM5O3MgcHJlcGFyZSB0aGUgb3V0cHV0LiBUaGUgZnV6emluZyB0YXJnZXQgaXMgZGVmaW5pdGVseSB3b3J0aHdoaWxlLgoKSGVyZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSB0YXJnZXRpbmc6CiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgCiogICBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YAoqICAgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAKKiAgIGBuZl9mbG93X3J1bGVfYnJpZGdlYAoqICAgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYAoqICAgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGAKCkFuZCBoZXJlIGFyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZToKKiAgIGBORl9GTE9XX1RBQkxFYAoqICAgYE5GX0ZMT1dfVEFCTEVfSU5FVGAKKiAgIGBORlRfRkxPV19PRkZMT0FEYAoqICAgYEJSSURHRWAKKiAgIGBCUklER0VfVkxBTl9GSUxURVJJTkdgCgpNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBicmlkZ2UgdHJhZmZpYyBpbnRlcmFjdHMgd2l0aCBuZXRmaWx0ZXImIzM5O3MgZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbXBsZW1lbnRpbmcgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIHdpdGhpbiB0aGUgZmxvdyBvZmZsb2FkIGZyYW1ld29yaywgY291cGxlZCB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgYnJpZGdlIGZvcndhcmRpbmcgcGF0aCBmdW5jdGlvbnMuIEdpdmVuIHRoaXMgbGV2ZWwgb2YgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtIG1vZGlmaWNhdGlvbnMsIGNvbWJpbmVkIHdpdGggaXRzIGRpcmVjdCBhY2Nlc3NpYmlsaXR5IHZpYSBuZnRhYmxlcyBhbmQgcmVsZXZhbnQgYnJpZGdlIGNvbmZpZ3VyYXRpb25zLCB0aGlzIG1ha2VzIGl0IGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIHRob3JvdWdoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZmlsbF9icmlkZ2VfcGF0aCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfYnJpZGdlX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9icmlkZ2UmIzM0OywKICAgICYjMzQ7YnJfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2X2ZpbGxfYnJpZGdlX3BhdGgmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2JyaWRnZV9pbml0JiMzNDssCiAgICAmIzM0O25mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfYnJpZGdlJiMzNDssCiAgICAmIzM0O2JyX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJyaWRnZSBzdXBwb3J0IGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gaGFuZGxlIGJyaWRnZSBwYXRocyBpbiBmbG93IG9mZmxvYWQgYW5kIG1vZGlmaWVzIGV4aXN0aW5nIGJyaWRnZSBmb3J3YXJkIHBhdGggZnVuY3Rpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIGFuZCBicmlkZ2UgY29uZmlndXJhdGlvbiwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDoyNC40NTMxOTkyNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk5MTE0ODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfYnJpZGdlX3BhdGhcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdFwiLFxuICAgIFwibmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfYnJpZGdlXCIsXG4gICAgXCJicl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgaW4gZmxvdyBvZmZsb2FkIGFuZCBtb2RpZmllcyBleGlzdGluZyBicmlkZ2UgZm9yd2FyZCBwYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBhbmQgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDoyNC40NTMyMDUwODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTU3ODcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyMDVhNTI1YWQwY2Q2ZDQ0MTBkYTBjMzkxNWQzZTNjYWRiMTVkZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNjozMDoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5mZGVlNDQ2NWQ2MTI2MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0zNDIwLDYgKzM0MjAsOCBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTtcXG4gXFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbmluZGV4IDdiMjNiMjQ1YTVhODZhLi5hMTA5ZWRhNTI1MGM3OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbkBAIC0zMDUsNiArMzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gdm9pZCBmbG93X29mZmxvYWRfcm91dGVfaW5pdChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSk7XFxuIFxcbitpbnQgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xcbitcXG4gaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuIHZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBib29sIGZvcmNlKTtcXG5AQCAtMzY4LDYgKzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTtcXG4gaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdGVudW0gZmxvd19ibG9ja19jb21tYW5kIGNtZCk7XFxuK2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4rXFx0XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4rXFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKTtcXG4gaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0XFx0XFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpO1xcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbmluZGV4IGU3ZjM0M2FiMjJkMzc5Li44OWY0NTI1YTcyNzlkNiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbkBAIC0zODUsMTYgKzM4NSwyNSBAQCBzdGF0aWMgaW50IGJyX2RlbF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KVxcbiBzdGF0aWMgaW50IGJyX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc3JjLCAqZHN0O1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmY7XFxuLVxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKmRzdDtcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xcbiBcXG4tXFx0aWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KGN0eC1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoY3R4LVxcdTAwM2VkZXYpKSB7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXY7XFxuK1xcbitcXHRcXHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KChzdHJ1Y3QgbmV0X2RldmljZSAqKWN0eC1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0aWYgKCFicl9kZXYpXFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRzcmMgPSBicl9wb3J0X2dldF9yY3UoY3R4LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRiciA9IG5ldGRldl9wcml2KGJyX2Rldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNyYyA9IE5VTEw7XFxuK1xcdFxcdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVxcdTAwM2VkZXYpO1xcbitcXHR9XFxuIFxcbi1cXHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIGN0eCwgcGF0aCk7XFxuK1xcdGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChiciwgc3JjLCBjdHgsIHBhdGgpO1xcbiBcXG4gXFx0ZiA9IGJyX2ZkYl9maW5kX3JjdShiciwgY3R4LVxcdTAwM2VkYWRkciwgcGF0aC1cXHUwMDNlYnJpZGdlLnZsYW5faWQpO1xcbiBcXHRpZiAoIWYpXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkNTVlYTk1MTZlM2UzNi4uMDBmNWI3MmZmNDJkZWEgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxcbkBAIC0xNjMwLDYgKzE2MzAsNyBAQCBib29sIGJyX3ZsYW5fY2FuX2VudGVyX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3VycixcXG4gXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpyYW5nZV9lbmQpO1xcbiBcXG4gdm9pZCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKTtcXG4gaW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuQEAgLTE3OTksNiArMTgwMCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5icF9nZXRfbnVtX3ZsYW5faW5mb3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbmluZGV4IDU1NjBhZmNhYWNhMzI3Li43MTUzMTQ5OWJjNzM1NiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXFxuQEAgLTE0NTAsNiArMTQ1MCw3IEBAIGludCBicl92bGFuX2dldF9wdmlkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgKnBfcHZpZClcXG4gRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9nZXRfcHZpZF9yY3UpO1xcbiBcXG4gdm9pZCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbiB7XFxuQEAgLTE0NjIsNyArMTQ2MywxMCBAQCB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9FTkFCTEVEKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0dmcgPSBicl92bGFuX2dyb3VwX3JjdShicik7XFxuK1xcdGlmIChwKVxcbitcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcXG4gXFxuIFxcdGlmIChpZHggXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgY3R4LVxcdTAwM2V2bGFuW2lkeF0ucHJvdG8gPT0gYnItXFx1MDAzZXZsYW5fcHJvdG8pIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5mNjY4NWMxZTQ3ODYwMSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTc1MCw0NCArNzUwLDg0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIFxcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhba107XFxuIH1cXG4gXFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbitzdGF0aWMgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5kZXZcXHQ9IGRldixcXG4tXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xcbi1cXHRzdGFjay1cXHUwMDNlbnVtX3BhdGhzID0gMDtcXG4tXFx0d2hpbGUgKGN0eC5kZXYgXFx1MDAyNlxcdTAwMjYgY3R4LmRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XFxuLVxcdFxcdGxhc3RfZGV2ID0gY3R4LmRldjtcXG4rXFx0d2hpbGUgKGN0eC1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcXG4rXFx0XFx0bGFzdF9kZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4gXFx0XFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuIFxcdFxcdGlmICghcGF0aClcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0XFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XFxuLVxcdFxcdHJldCA9IGN0eC5kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBwYXRoKTtcXG4rXFx0XFx0cmV0ID0gY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXFx1MDAzZWRldikpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjdHguZGV2KVxcbitcXHRpZiAoIWN0eC1cXHUwMDNlZGV2KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuIFxcdGlmICghcGF0aClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRwYXRoLVxcdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XFxuLVxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC5kZXY7XFxuK1xcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitcXG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXYsICpicl9kZXY7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuK1xcbitcXHRzdGFjay1cXHUwMDNlbnVtX3BhdGhzID0gMDtcXG4rXFxuK1xcdGlmICghY3R4LVxcdTAwM2VkZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9wb3J0KGN0eC1cXHUwMDNlZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0YnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtXFx1MDAzZWRldik7XFxuK1xcdGlmICghYnJfZGV2IHx8ICFicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0bGFzdF9kZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuK1xcdGlmICghcGF0aClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XFxuK1xcdGlmIChicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKCFjdHgtXFx1MDAzZWRldiB8fCBXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVxcdTAwM2VkZXYpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihjdHgsIHN0YWNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9icmlkZ2VfcGF0aCk7XFxuK1xcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuK1xcdFxcdC5kZXZcXHQ9IGRldixcXG4rXFx0fTtcXG4rXFxuK1xcdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XFxuK1xcbitcXHRzdGFjay1cXHUwMDNlbnVtX3BhdGhzID0gMDtcXG4rXFxuK1xcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKFxcdTAwMjZjdHgsIHN0YWNrKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbiBcXG4gLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBhcyB3ZSBkb250IHRha2UgYSByZWZlcmVuY2UgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcXG5pbmRleCBiMGYxOTkxNzE5MzI0MS4uODBiMjM4MTk2ZjI5YjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcXG5AQCAtNjUsNiArNjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2JyaWRnZSA9IHtcXG4rXFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19CUklER0UsXFxuK1xcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxuK1xcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbitcXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfYnJpZGdlLFxcbitcXHQuZnJlZVxcdFxcdD0gbmZfZmxvd190YWJsZV9mcmVlLFxcbitcXHQuaG9va1xcdFxcdD0gbmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayxcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XFxuIFxcdC5mYW1pbHlcXHRcXHQ9IE5GUFJPVE9fSU5FVCxcXG4gXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5AQCAtOTcsNiArMTA3LDcgQEAgc3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfaW5ldF9tb2R1bGVfaW5pdCh2b2lkKVxcbiB7XFxuK1xcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XFxuIFxcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcXHUwMDI2Zmxvd3RhYmxlX2lwdjQpO1xcbiBcXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcXG4gXFx0bmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaW5ldCk7XFxuQEAgLTEwOSw2ICsxMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd19pbmV0X21vZHVsZV9leGl0KHZvaWQpXFxuIFxcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaW5ldCk7XFxuIFxcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaXB2Nik7XFxuIFxcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaXB2NCk7XFxuK1xcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfYnJpZGdlKTtcXG4gfVxcbiBcXG4gbW9kdWxlX2luaXQobmZfZmxvd19pbmV0X21vZHVsZV9pbml0KTtcXG5AQCAtMTE4LDUgKzEzMCw2IEBAIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGFibG8gTmVpcmEgQXl1c28gXFx1MDAzY3BhYmxvQG5ldGZpbHRlci5vcmdcXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVCk7XFxuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVDYpO1xcbitNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKEFGX0JSSURHRSk7XFxuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoMSk7IC8qIE5GUFJPVE9fSU5FVCAqL1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5pbmRleCAwMDJlYzE1ZDk4OGJkYi4uNTU2NmViZGE3YjdkMzAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5AQCAtNzQwLDYgKzc0MCwxOSBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4rXFx0XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4rXFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbit7XFxuK1xcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zmxvd19vZmZsb2FkX3JlZGlyZWN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX2JyaWRnZSk7XFxuK1xcbiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbiBcXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG5pbmRleCA5OGMwM2I0ODdmNTIxMS4uMmRlYjhlNGQ1MzI4YjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRsaW5rLmhcXHUwMDNlXFxuQEAgLTM1MCwzICszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRyZXR1cm4gLUVOT0VOVDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XFxuK1xcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpzcmNfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRzdF9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyICpzcmNfaGEsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyICpkc3RfaGEpXFxuK3tcXG4rXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdGggPSBmbG93LVxcdTAwM2V0dXBsZWhhc2g7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHt9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xcbitcXHRzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyBpbmZvID0ge307XFxuK1xcdGludCBpLCBqID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IHRoW2Rpcl0udHVwbGUuZW5jYXBfbnVtIC0gMTsgaSBcXHUwMDNlPSAwIDsgaS0tKSB7XFxuK1xcdFxcdGlmIChpbmZvLm51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdFxcdGlmICh0aFtkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyBcXHUwMDI2IEJJVChpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpbmZvLmVuY2FwW2luZm8ubnVtX2VuY2Fwc10uaWQgPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLmlkO1xcbitcXHRcXHRpbmZvLmVuY2FwW2luZm8ubnVtX2VuY2Fwc10ucHJvdG8gPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvO1xcbitcXHRcXHRpbmZvLm51bV9lbmNhcHMrKztcXG4rXFxuK1xcdFxcdGlmICh0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmIChjdHgubnVtX3ZsYW5zIFxcdTAwM2U9IE5FVF9ERVZJQ0VfUEFUSF9WTEFOX01BWClcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRjdHgudmxhbltjdHgubnVtX3ZsYW5zXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7XFxuK1xcdFxcdGN0eC52bGFuW2N0eC5udW1fdmxhbnNdLnByb3RvID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90bztcXG4rXFx0XFx0Y3R4Lm51bV92bGFucysrO1xcbitcXHR9XFxuK1xcdGN0eC5kZXYgPSBzcmNfZGV2O1xcbitcXHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBkc3RfaGEpO1xcbitcXG4rXFx0aWYgKGRldl9maWxsX2JyaWRnZV9wYXRoKFxcdTAwMjZjdHgsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRuZnRfZGV2X3BhdGhfaW5mbyhcXHUwMDI2c3RhY2ssIFxcdTAwMjZpbmZvLCBkc3RfaGEsIFxcdTAwMjZmdC1cXHUwMDNlZGF0YSk7XFxuK1xcbitcXHRpZiAoIWluZm8uaW5kZXYgfHwgaW5mby5pbmRldiAhPSBkc3RfZGV2KVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHR0aFshZGlyXS50dXBsZS5paWZpZHggPSBpbmZvLmluZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRmb3IgKGkgPSBpbmZvLm51bV9lbmNhcHMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSkge1xcbitcXHRcXHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XFxuK1xcdFxcdHRoWyFkaXJdLnR1cGxlLmVuY2FwW2pdLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcXG4rXFx0XFx0aWYgKGluZm8uaW5ncmVzc192bGFucyBcXHUwMDI2IEJJVChpKSlcXG4rXFx0XFx0XFx0dGhbIWRpcl0udHVwbGUuaW5fdmxhbl9pbmdyZXNzIHw9IEJJVChqKTtcXG4rXFx0XFx0aisrO1xcbitcXHR9XFxuK1xcdHRoWyFkaXJdLnR1cGxlLmVuY2FwX251bSA9IGluZm8ubnVtX2VuY2FwcztcXG4rXFxuK1xcdHRoW2Rpcl0udHVwbGUubXR1ID0gZHN0X2Rldi1cXHUwMDNlbXR1O1xcbitcXHRldGhlcl9hZGRyX2NvcHkodGhbZGlyXS50dXBsZS5vdXQuaF9zb3VyY2UsIHNyY19oYSk7XFxuK1xcdGV0aGVyX2FkZHJfY29weSh0aFtkaXJdLnR1cGxlLm91dC5oX2Rlc3QsIGRzdF9oYSk7XFxuK1xcdHRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdHRoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2LCAqb3V0X2RldjtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoID0gZXRoX2hkcihwa3QtXFx1MDAzZXNrYik7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlO1xcbitcXHRpbnQgZXJyLCBpID0gMDtcXG4rXFxuK1xcdGluX2RldiA9IG5mdF9pbihwa3QpO1xcbitcXHRpZiAoIWluX2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihpbl9kZXYsIGZ0KSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0b3V0X2RldiA9IG5mdF9vdXQocGt0KTtcXG4rXFx0aWYgKCFvdXRfZGV2IHx8ICFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KG91dF9kZXYsIGZ0KSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0dHVwbGUgPSAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcXG4rXFxuK1xcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChwa3QtXFx1MDAzZXNrYikpIHtcXG4rXFx0XFx0dHVwbGUtXFx1MDAzZWVuY2FwW2ldLmlkID0gc2tiX3ZsYW5fdGFnX2dldChwa3QtXFx1MDAzZXNrYik7XFxuK1xcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5wcm90byA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2V2bGFuX3Byb3RvO1xcbitcXHRcXHRpKys7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZXRoX2hkcihwa3QtXFx1MDAzZXNrYiktXFx1MDAzZWhfcHJvdG8pIHtcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6IHtcXG4rXFx0XFx0c3RydWN0IHZsYW5faGRyICp2aGRyID0gKHN0cnVjdCB2bGFuX2hkciAqKShza2JfbWFjX2hlYWRlcihwa3QtXFx1MDAzZXNrYilcXG4rXFx0XFx0XFx0XFx0XFx0ICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcXG4rXFx0XFx0dHVwbGUtXFx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmhkci1cXHUwMDNlaF92bGFuX1RDSSk7XFxuK1xcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTtcXG4rXFx0XFx0aSsrO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOiB7XFxuK1xcdFxcdHN0cnVjdCBwcHBvZV9oZHIgKnBoZHIgPSAoc3RydWN0IHBwcG9lX2hkciAqKShza2JfbWFjX2hlYWRlcihwa3QtXFx1MDAzZXNrYilcXG4rXFx0XFx0XFx0XFx0XFx0ICArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XFxuK1xcbitcXHRcXHR0dXBsZS1cXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVxcdTAwM2VzaWQpO1xcbitcXHRcXHR0dXBsZS1cXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBodG9ucyhFVEhfUF9QUFBfU0VTKTtcXG4rXFx0XFx0aSsrO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHR9XFxuK1xcdHR1cGxlLVxcdTAwM2VlbmNhcF9udW0gPSBpO1xcbitcXG4rXFx0ZXJyID0gbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKGZsb3csIGZ0LCAhZGlyLCBvdXRfZGV2LCBpbl9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBldGgtXFx1MDAzZWhfZGVzdCwgZXRoLVxcdTAwM2VoX3NvdXJjZSk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKGZsb3csIGZ0LCBkaXIsIGluX2Rldiwgb3V0X2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGV0aC1cXHUwMDNlaF9zb3VyY2UsIGV0aC1cXHUwMDNlaF9kZXN0KTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXFxuaW5kZXggMzJiNDI4MTAzOGRkMzUuLjFhNWVlZjQ2ZjkyMmQwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG5AQCAtNTMsMTMgKzUzLDE0IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbiBcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VkYXRhO1xcbitcXHRib29sIHJvdXRpbmcgPSBmbG93dGFibGUtXFx1MDAzZXR5cGUtXFx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRTtcXG4gXFx0c3RydWN0IHRjcGhkciBfdGNwaCwgKnRjcGggPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSByb3V0ZSA9IHt9O1xcbiBcXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcXG4gXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4gXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcXG4gXFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0LCB0aG9mZjtcXG4gXFxuIFxcdGlmIChuZnRfZmxvd19vZmZsb2FkX3NraXAocGt0LVxcdTAwM2Vza2IsIG5mdF9wZihwa3QpKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTcwLDggKzcxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcbiBcXHRzd2l0Y2ggKGN0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pIHtcXG4gXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4tXFx0XFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXFx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXFxuLVxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKF90Y3BoKSwgXFx1MDAyNl90Y3BoKTtcXG4rXFx0XFx0dGhvZmYgPSBuZnRfdGhvZmYocGt0KTtcXG4rXFx0XFx0aWYgKHRob2ZmID09IDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cXHUwMDNlc2tiLCB0aG9mZiwgc2l6ZW9mKF90Y3BoKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2X3RjcGgpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cXHUwMDNlZmluIHx8IHRjcGgtXFx1MDAzZXJzdCB8fFxcbiBcXHRcXHRcXHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0xMDYsMTQgKzExMCwyMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcXG4tXFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG4rXFx0aWYgKHJvdXRpbmcpIHtcXG4rXFx0XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG4rXFx0fVxcbiBcXG4gXFx0ZmxvdyA9IGZsb3dfb2ZmbG9hZF9hbGxvYyhjdCk7XFxuIFxcdGlmICghZmxvdylcXG4gXFx0XFx0Z290byBlcnJfZmxvd19hbGxvYztcXG4gXFxuLVxcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFxcdTAwMjZyb3V0ZSk7XFxuK1xcdGlmIChyb3V0aW5nKVxcbitcXHRcXHRmbG93X29mZmxvYWRfcm91dGVfaW5pdChmbG93LCBcXHUwMDI2cm91dGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlmIChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoZmxvdywgcGt0LCBkaXIsIHByaXYtXFx1MDAzZWZsb3d0YWJsZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9mbG93X2FkZDtcXG4rXFxuIFxcdGlmICh0Y3BoKVxcbiBcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gXFxuQEAgLTEyNyw4ICsxMzgsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4gZXJyX2Zsb3dfYWRkOlxcbiBcXHRmbG93X29mZmxvYWRfZnJlZShmbG93KTtcXG4gZXJyX2Zsb3dfYWxsb2M6XFxuLVxcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTtcXG4tXFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcXG4rXFx0aWYgKHJvdXRpbmcpIHtcXG4rXFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xcbitcXHRcXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xcbitcXHR9XFxuIGVycl9mbG93X3JvdXRlOlxcbiBcXHRjbGVhcl9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cyk7XFxuIG91dDpcXG5AQCAtMTQyLDcgKzE1NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fSVBWNCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JUFY2IFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBjdHgtXFx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXFxuK1xcdCAgICBjdHgtXFx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGN0eC1cXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fQlJJREdFKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cXHUwMDNlY2hhaW4sIGhvb2tfbWFzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjI1LjE2Mzc1MTgzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyODA1ODYxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJmbG93X29mZmxvYWRfYnJpZGdlX2luaXRcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aFwiLFxuICAgIFwibmZfZmxvd19ydWxlX2JyaWRnZVwiLFxuICAgIFwiYnJfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcImJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjA1YTUyNWFkMGNkNmQ0NDEwZGEwYzM5MTVkM2UzY2FkYjE1ZGVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNjozMDoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZmRlZTQ0NjVkNjEyNjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzQyMCw2ICszNDIwLDggQEAgdm9pZCBkZXZfcmVtb3ZlX29mZmxvYWQoc3RydWN0IHBhY2tldF9vZmZsb2FkICpwbyk7XG4gXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4rXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IDdiMjNiMjQ1YTVhODZhLi5hMTA5ZWRhNTI1MGM3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbkBAIC0zMDUsNiArMzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiB2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpO1xuIFxuK2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0XHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7XG4rXG4gaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG4gdm9pZCBmbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgYm9vbCBmb3JjZSk7XG5AQCAtMzY4LDYgKzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTtcbiBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRlbnVtIGZsb3dfYmxvY2tfY29tbWFuZCBjbWQpO1xuK2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbitcdFx0XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuK1x0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7XG4gaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbiBcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLjg5ZjQ1MjVhNzI3OWQ2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTM4NSwxNiArMzg1LDI1IEBAIHN0YXRpYyBpbnQgYnJfZGVsX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpXG4gc3RhdGljIGludCBicl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbiB7XG4rXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzcmMsICpkc3Q7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmY7XG4tXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3Q7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XG4gXG4tXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoY3R4LVx1MDAzZWRldikpXG4tXHRcdHJldHVybiAtMTtcbitcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSkge1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2O1xuK1xuK1x0XHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KChzdHJ1Y3QgbmV0X2RldmljZSAqKWN0eC1cdTAwM2VkZXYpO1xuK1x0XHRpZiAoIWJyX2RldilcbitcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRiciA9IG5ldGRldl9wcml2KGN0eC1cdTAwM2VkZXYpO1xuK1x0XHRzcmMgPSBicl9wb3J0X2dldF9yY3UoY3R4LVx1MDAzZWRldik7XG4rXHRcdGJyID0gbmV0ZGV2X3ByaXYoYnJfZGV2KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNyYyA9IE5VTEw7XG4rXHRcdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4rXHR9XG4gXG4tXHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIGN0eCwgcGF0aCk7XG4rXHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIHNyYywgY3R4LCBwYXRoKTtcbiBcbiBcdGYgPSBicl9mZGJfZmluZF9yY3UoYnIsIGN0eC1cdTAwM2VkYWRkciwgcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9pZCk7XG4gXHRpZiAoIWYpXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjAwZjViNzJmZjQyZGVhIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMTYzMCw2ICsxNjMwLDcgQEAgYm9vbCBicl92bGFuX2Nhbl9lbnRlcl9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpyYW5nZV9lbmQpO1xuIFxuIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCk7XG4gaW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5AQCAtMTc5OSw2ICsxODAwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbmJwX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuaW5kZXggNTU2MGFmY2FhY2EzMjcuLjcxNTMxNDk5YmM3MzU2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl92bGFuLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXG5AQCAtMTQ1MCw2ICsxNDUwLDcgQEAgaW50IGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiAqcF9wdmlkKVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KTtcbiBcbiB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuQEAgLTE0NjIsNyArMTQ2MywxMCBAQCB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xuK1x0aWYgKHApXG4rXHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuK1x0ZWxzZVxuK1x0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiBcbiBcdGlmIChpZHggXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGN0eC1cdTAwM2V2bGFuW2lkeF0ucHJvdG8gPT0gYnItXHUwMDNldmxhbl9wcm90bykge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5mNjY4NWMxZTQ3ODYwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc1MCw0NCArNzUwLDg0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gXHRyZXR1cm4gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiB9XG4gXG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4tXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbitzdGF0aWMgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbitcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuLVx0XHQuZGV2XHQ9IGRldixcbi1cdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xuLVx0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbi1cdHdoaWxlIChjdHguZGV2IFx1MDAyNlx1MDAyNiBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4tXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbitcdHdoaWxlIChjdHgtXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4rXHRcdGxhc3RfZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRcdGlmICghcGF0aClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xuLVx0XHRyZXQgPSBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgcGF0aCk7XG4rXHRcdHJldCA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4rXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0aWYgKCFjdHguZGV2KVxuK1x0aWYgKCFjdHgtXHUwMDNlZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4gXHRcdHJldHVybiAtMTtcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUO1xuLVx0cGF0aC1cdTAwM2VkZXYgPSBjdHguZGV2O1xuK1x0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4rXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpsYXN0X2RldiwgKmJyX2RldjtcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4rXG4rXHRzdGFjay1cdTAwM2VudW1fcGF0aHMgPSAwO1xuK1xuK1x0aWYgKCFjdHgtXHUwMDNlZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0YnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtXHUwMDNlZGV2KTtcbitcdGlmICghYnJfZGV2IHx8ICFicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGxhc3RfZGV2ID0gY3R4LVx1MDAzZWRldjtcbitcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuK1x0aWYgKCFwYXRoKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbitcdGlmIChicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKCFjdHgtXHUwMDNlZGV2IHx8IFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXHUwMDNlZGV2KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oY3R4LCBzdGFjayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2JyaWRnZV9wYXRoKTtcbitcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbitcdFx0LmRldlx0PSBkZXYsXG4rXHR9O1xuK1xuK1x0bWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTtcbitcbitcdHN0YWNrLVx1MDAzZW51bV9wYXRocyA9IDA7XG4rXG4rXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihcdTAwMjZjdHgsIHN0YWNrKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbiAvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCksIGFzIHdlIGRvbnQgdGFrZSBhIHJlZmVyZW5jZSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jXG5pbmRleCBiMGYxOTkxNzE5MzI0MS4uODBiMjM4MTk2ZjI5YjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jXG5AQCAtNjUsNiArNjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9icmlkZ2UgPSB7XG4rXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19CUklER0UsXG4rXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbitcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbitcdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfYnJpZGdlLFxuK1x0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG4rXHQuaG9va1x0XHQ9IG5mX2Zsb3dfb2ZmbG9hZF9pbmV0X2hvb2ssXG4rXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbit9O1xuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG4gXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JTkVULFxuIFx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5AQCAtOTcsNiArMTA3LDcgQEAgc3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X2luZXRfbW9kdWxlX2luaXQodm9pZClcbiB7XG4rXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XG4gXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2lwdjQpO1xuIFx0bmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcbiBcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaW5ldCk7XG5AQCAtMTA5LDYgKzEyMCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X2luZXRfbW9kdWxlX2V4aXQodm9pZClcbiBcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pbmV0KTtcbiBcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcbiBcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY0KTtcbitcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9icmlkZ2UpO1xuIH1cbiBcbiBtb2R1bGVfaW5pdChuZl9mbG93X2luZXRfbW9kdWxlX2luaXQpO1xuQEAgLTExOCw1ICsxMzAsNiBAQCBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiUGFibG8gTmVpcmEgQXl1c28gXHUwMDNjcGFibG9AbmV0ZmlsdGVyLm9yZ1x1MDAzZVwiKTtcbiBNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKEFGX0lORVQpO1xuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVDYpO1xuK01PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfQlJJREdFKTtcbiBNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKDEpOyAvKiBORlBST1RPX0lORVQgKi9cbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5pbmRleCAwMDJlYzE1ZDk4OGJkYi4uNTU2NmViZGE3YjdkMzAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5AQCAtNzQwLDYgKzc0MCwxOSBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4rXHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbitcdFx0XHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4re1xuK1x0aWYgKG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24obmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGZsb3dfb2ZmbG9hZF9yZWRpcmVjdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3J1bGVfYnJpZGdlKTtcbitcbiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIFx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi4yZGViOGU0ZDUzMjhiMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuQEAgLTM1MCwzICszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbitcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCxcbitcdFx0XHRcdCAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpzcmNfZGV2LFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkc3RfZGV2LFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGNoYXIgKnNyY19oYSxcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBjaGFyICpkc3RfaGEpXG4re1xuK1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdGggPSBmbG93LVx1MDAzZXR1cGxlaGFzaDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHt9O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbitcdHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIGluZm8gPSB7fTtcbitcdGludCBpLCBqID0gMDtcbitcbitcdGZvciAoaSA9IHRoW2Rpcl0udHVwbGUuZW5jYXBfbnVtIC0gMTsgaSBcdTAwM2U9IDAgOyBpLS0pIHtcbitcdFx0aWYgKGluZm8ubnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0aWYgKHRoW2Rpcl0udHVwbGUuaW5fdmxhbl9pbmdyZXNzIFx1MDAyNiBCSVQoaSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGluZm8uZW5jYXBbaW5mby5udW1fZW5jYXBzXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7XG4rXHRcdGluZm8uZW5jYXBbaW5mby5udW1fZW5jYXBzXS5wcm90byA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0ucHJvdG87XG4rXHRcdGluZm8ubnVtX2VuY2FwcysrO1xuK1xuK1x0XHRpZiAodGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90byA9PSBodG9ucyhFVEhfUF9QUFBfU0VTKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKGN0eC5udW1fdmxhbnMgXHUwMDNlPSBORVRfREVWSUNFX1BBVEhfVkxBTl9NQVgpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRjdHgudmxhbltjdHgubnVtX3ZsYW5zXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7XG4rXHRcdGN0eC52bGFuW2N0eC5udW1fdmxhbnNdLnByb3RvID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90bztcbitcdFx0Y3R4Lm51bV92bGFucysrO1xuK1x0fVxuK1x0Y3R4LmRldiA9IHNyY19kZXY7XG4rXHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBkc3RfaGEpO1xuK1xuK1x0aWYgKGRldl9maWxsX2JyaWRnZV9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgZHN0X2hhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKTtcbitcbitcdGlmICghaW5mby5pbmRldiB8fCBpbmZvLmluZGV2ICE9IGRzdF9kZXYpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHRoWyFkaXJdLnR1cGxlLmlpZmlkeCA9IGluZm8uaW5kZXYtXHUwMDNlaWZpbmRleDtcbitcdGZvciAoaSA9IGluZm8ubnVtX2VuY2FwcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0dGhbIWRpcl0udHVwbGUuZW5jYXBbal0uaWQgPSBpbmZvLmVuY2FwW2ldLmlkO1xuK1x0XHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5wcm90byA9IGluZm8uZW5jYXBbaV0ucHJvdG87XG4rXHRcdGlmIChpbmZvLmluZ3Jlc3NfdmxhbnMgXHUwMDI2IEJJVChpKSlcbitcdFx0XHR0aFshZGlyXS50dXBsZS5pbl92bGFuX2luZ3Jlc3MgfD0gQklUKGopO1xuK1x0XHRqKys7XG4rXHR9XG4rXHR0aFshZGlyXS50dXBsZS5lbmNhcF9udW0gPSBpbmZvLm51bV9lbmNhcHM7XG4rXG4rXHR0aFtkaXJdLnR1cGxlLm10dSA9IGRzdF9kZXYtXHUwMDNlbXR1O1xuK1x0ZXRoZXJfYWRkcl9jb3B5KHRoW2Rpcl0udHVwbGUub3V0Lmhfc291cmNlLCBzcmNfaGEpO1xuK1x0ZXRoZXJfYWRkcl9jb3B5KHRoW2Rpcl0udHVwbGUub3V0LmhfZGVzdCwgZHN0X2hhKTtcbitcdHRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtXHUwMDNlaWZpbmRleDtcbitcdHRoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0XHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2LCAqb3V0X2RldjtcbitcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGV0aF9oZHIocGt0LVx1MDAzZXNrYik7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZTtcbitcdGludCBlcnIsIGkgPSAwO1xuK1xuK1x0aW5fZGV2ID0gbmZ0X2luKHBrdCk7XG4rXHRpZiAoIWluX2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihpbl9kZXYsIGZ0KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0b3V0X2RldiA9IG5mdF9vdXQocGt0KTtcbitcdGlmICghb3V0X2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihvdXRfZGV2LCBmdCkpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHR1cGxlID0gIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuK1xuK1x0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHBrdC1cdTAwM2Vza2IpKSB7XG4rXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gc2tiX3ZsYW5fdGFnX2dldChwa3QtXHUwMDNlc2tiKTtcbitcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4rXHRcdGkrKztcbitcdH1cbitcbitcdHN3aXRjaCAoZXRoX2hkcihwa3QtXHUwMDNlc2tiKS1cdTAwM2VoX3Byb3RvKSB7XG4rXHRjYXNlIGh0b25zKEVUSF9QXzgwMjFRKToge1xuK1x0XHRzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC1cdTAwM2Vza2IpXG4rXHRcdFx0XHRcdCArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XG4rXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmhkci1cdTAwM2VoX3ZsYW5fVENJKTtcbitcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4rXHRcdGkrKztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOiB7XG4rXHRcdHN0cnVjdCBwcHBvZV9oZHIgKnBoZHIgPSAoc3RydWN0IHBwcG9lX2hkciAqKShza2JfbWFjX2hlYWRlcihwa3QtXHUwMDNlc2tiKVxuK1x0XHRcdFx0XHQgICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcbitcbitcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4rXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gaHRvbnMoRVRIX1BfUFBQX1NFUyk7XG4rXHRcdGkrKztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHR9XG4rXHR0dXBsZS1cdTAwM2VlbmNhcF9udW0gPSBpO1xuK1xuK1x0ZXJyID0gbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKGZsb3csIGZ0LCAhZGlyLCBvdXRfZGV2LCBpbl9kZXYsXG4rXHRcdFx0XHQgICAgICAgZXRoLVx1MDAzZWhfZGVzdCwgZXRoLVx1MDAzZWhfc291cmNlKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsIGRpciwgaW5fZGV2LCBvdXRfZGV2LFxuK1x0XHRcdFx0ICAgICAgIGV0aC1cdTAwM2VoX3NvdXJjZSwgZXRoLVx1MDAzZWhfZGVzdCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuaW5kZXggMzJiNDI4MTAzOGRkMzUuLjFhNWVlZjQ2ZjkyMmQwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtNTMsMTMgKzUzLDE0IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4ge1xuIFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlID0gXHUwMDI2cHJpdi1cdTAwM2VmbG93dGFibGUtXHUwMDNlZGF0YTtcbitcdGJvb2wgcm91dGluZyA9IGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRTtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0Y3BoID0gTlVMTDtcbiBcdHN0cnVjdCBuZl9mbG93X3JvdXRlIHJvdXRlID0ge307XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuLVx0aW50IHJldDtcbitcdGludCByZXQsIHRob2ZmO1xuIFxuIFx0aWYgKG5mdF9mbG93X29mZmxvYWRfc2tpcChwa3QtXHUwMDNlc2tiLCBuZnRfcGYocGt0KSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTcwLDggKzcxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXG4gXHRzd2l0Y2ggKGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSkge1xuIFx0Y2FzZSBJUFBST1RPX1RDUDpcbi1cdFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXHUwMDNlc2tiLCBuZnRfdGhvZmYocGt0KSxcbi1cdFx0XHRcdFx0ICBzaXplb2YoX3RjcGgpLCBcdTAwMjZfdGNwaCk7XG4rXHRcdHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XG4rXHRcdGlmICh0aG9mZiA9PSAwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIHRob2ZmLCBzaXplb2YoX3RjcGgpLFxuK1x0XHRcdFx0XHQgIFx1MDAyNl90Y3BoKTtcbiBcdFx0aWYgKHVubGlrZWx5KCF0Y3BoIHx8IHRjcGgtXHUwMDNlZmluIHx8IHRjcGgtXHUwMDNlcnN0IHx8XG4gXHRcdFx0ICAgICAhbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkpKVxuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTEwNiwxNCArMTEwLDIxIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuLVx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXHUwMDNlZmxvd3RhYmxlKSBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfZmxvd19yb3V0ZTtcbitcdGlmIChyb3V0aW5nKSB7XG4rXHRcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfZmxvd19yb3V0ZTtcbitcdH1cbiBcbiBcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xuIFx0aWYgKCFmbG93KVxuIFx0XHRnb3RvIGVycl9mbG93X2FsbG9jO1xuIFxuLVx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuK1x0aWYgKHJvdXRpbmcpXG4rXHRcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFx1MDAyNnJvdXRlKTtcbitcdGVsc2VcbitcdFx0aWYgKGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdChmbG93LCBwa3QsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX2Zsb3dfYWRkO1xuK1xuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuQEAgLTEyNyw4ICsxMzgsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBlcnJfZmxvd19hZGQ6XG4gXHRmbG93X29mZmxvYWRfZnJlZShmbG93KTtcbiBlcnJfZmxvd19hbGxvYzpcbi1cdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTtcbi1cdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7XG4rXHRpZiAocm91dGluZykge1xuK1x0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4rXHRcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7XG4rXHR9XG4gZXJyX2Zsb3dfcm91dGU6XG4gXHRjbGVhcl9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpO1xuIG91dDpcbkBAIC0xNDIsNyArMTU1LDggQEAgc3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjQgXHUwMDI2XHUwMDI2XG4gXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjYgXHUwMDI2XHUwMDI2XG4tXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXG4rXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQgXHUwMDI2XHUwMDI2XG4rXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0dXJuIG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtXHUwMDNlY2hhaW4sIGhvb2tfbWFzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDoyNS4xNjM3NTQzMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA3MzAzOTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQnJpZGdlIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIFNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQsIHdoaWNoIGRlZmluaXRlbHkgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgdGFyZ2V0LiBMZXQncyBkaWcgaW4uXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcy4gSSBzZWUgYGRldl9maWxsX2JyaWRnZV9wYXRoYCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBsb29rLCBhbmQgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYCBpbiBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgZ2V0cyBtb2RpZmllZC4gVGhlbiwgd2UgaGF2ZSBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBhbmQgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgIGluIHRoZSBuZXRmaWx0ZXIgc2lkZSwgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIHJlc3BlY3RpdmVseS4gSXQgYWxzbyByZWdpc3RlcnMgYGZsb3d0YWJsZV9icmlkZ2VgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jYC4gRmluYWxseSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSBgTkZQUk9UT19CUklER0VgLlxuXG5ZZXMsIHRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXJuZWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIExvb2tzIGxpa2U6XG5cbiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgXG4qICAgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGBcbiogICBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYCAoc3RhdGljYWxseSBkZWZpbmVkKVxuKiAgIGBuZl9mbG93X3J1bGVfYnJpZGdlYFxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuIEkga25vdyB0aGUgY29kZSBpcyBzcHJlYWQgYWNyb3NzIG11bHRpcGxlIGZpbGVzOlxuXG4qICAgYGRldl9maWxsX2JyaWRnZV9wYXRoYCBsaXZlcyBpbiBgbmV0L2NvcmUvZGV2LmNgXG4qICAgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGAgbGl2ZXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgXG4qICAgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYFxuKiAgIGBmbG93dGFibGVfYnJpZGdlYCBsaXZlcyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuY2BcblxuVGltZSB0byB3aGlwIG91dCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgY29udHJvbGxpbmcgdGhpcy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgdG8gZW5zdXJlIEkgY2FuIGJ1aWxkIGEgZnV6emVyIHRoYXQncyByZWxldmFudCB0byB0aGUgd2lkZXN0IHNldCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDozNS4yMzY3OTQ4NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MzUxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfcGF0aFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NS1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjM1LjQzMTE1MDg2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODY2MTYxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Zsb3dfdGFibGVgIGluIHRoZSBOZXRmaWx0ZXIgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGgga2VybmVsIGRldmVsb3BtZW50LCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIHJlc2lkZS4gSXQnbGwgdGVsbCBtZSBob3cgYG5mX2Zsb3dfdGFibGVgIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBwb3NzaWJseSB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFNwZWNpZmljYWxseSwgSSdsbCBnbyBkaXJlY3RseSB0byB0aGUgYG5ldC9uZXRmaWx0ZXIvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0J3MgaW4gaXRzIE1ha2VmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgYnVpbGQgcHJvY2VzcyB3aWxsIGlsbHVtaW5hdGUgaXRzIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkIGZsYWdzLCBhbmQgb3ZlcmFsbCByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGF0IE1ha2VmaWxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzA6NDAuMzE3NzY5MjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzM1OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlLW9ianNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjQwLjQ1MTEzNDc0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzQ5NDgwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY29kZSBwb2ludHMgdG8gdGhlIG1hbmRhdG9yeSByZXF1aXJlbWVudCBvZiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBUaGF0J3MgdGhlIGNvcmUsIHRoZSBmb3VuZGF0aW9uYWwgc2V0dGluZy4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIHRoYW4ganVzdCB0aGF0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCBgbmZfZmxvd190YWJsZV9pbmV0Lm9gPyBJcyBpdCBhbHNvIG5lY2Vzc2FyeT8gVGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIGFzc29jaWF0ZWQgbW9kdWxlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBpbXBsaWNpdGx5IGJ1aWx0IHdpdGggdGhhdCwgb3IgaWYgaXQgcmVxdWlyZXMgaXRzIG93biBleHBsaWNpdCBjYWxsLCBvciBpdCBtYXkgbmVlZCBvdGhlciBvcHRpb25zLiBUaW1lIHRvIGFuYWx5emUgdGhlIGJ1aWxkIHN5c3RlbSBtb3JlIGNsb3NlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzA6NDUuMTg2MDg1NzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQyNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2luZXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDo0NS4zMzU1MTgwNzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5NTAyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCBtZSBzZWUuLi4gaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19ORl9GTE9XX1RBQkxFX0lORVRgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLCBJIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCdzIGp1bXBpbmcgdG8gbXkgbWluZCBpcyBhYm91dCBgbmZ0X2Zsb3dfb2ZmbG9hZC5vYC4gSXMgdGhpcyBtb2R1bGUncyBpbmNsdXNpb24gYWxzbyBlc3NlbnRpYWwgb3IgdGllZCB0byBzcGVjaWZpYyBmZWF0dXJlcyBJIGFtIHVzaW5nPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGZsb3cgdGFibGUgYW5kIHRoZSBvZmZsb2FkIGNvbXBvbmVudDsgZG8gdGhleSBib3RoIG5lZWQgdG8gYmUgcHJlc2VudCBhbmQgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwgZm9yIHRoaW5ncyB0byBmdW5jdGlvbiBwcm9wZXJseT8gTGV0J3MgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDo0OS45NzUwMjI3ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzUyNzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZmxvd19vZmZsb2FkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXFx0XFx0Kz0gbmZ0X2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcXHQrPSBuZnRfZmxvd19vZmZsb2FkLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVxcdFxcdCs9IG5mdF9saW1pdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjUwLjEyMjU1NjE2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI1NTE2NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEknbSB3b3JraW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBORlRhYmxlcyBGbG93IE9mZmxvYWQgRGVwZW5kZW5jaWVzIGluIEJyaWRnZSBDb2RlKipcblxuQWxyaWdodCwgdGhlIHN5c3RlbSdzIHRlbGxpbmcgbWUgdGhhdCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBoZXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBicmlkZ2UgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBkZWx2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX2RldmljZS5jYCBhbmQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50czsgdGhleSdyZSB0aGUgY29yZSBvZiB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgYW5kIFZMQU4gaGFuZGxpbmcgcmVzcGVjdGl2ZWx5LCBzbyB0aGV5J3JlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gZmluZCB0aGUgaW50ZWdyYXRpb24sIG9yIGxhY2sgdGhlcmVvZiwgd2l0aCBuZnRhYmxlcyBvZmZsb2FkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIGluIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZSwgb3Igd2hldGhlciB0aGVyZSBuZWVkcyB0byBiZSBhIGhvb2sgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTMzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzA6NTYuNTQ4MDc0Njk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNDIxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfZGV2aWNlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQlJJREdFKSArPSBicmlkZ2Uub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtNy1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjg6YnJpZGdlLXlcXHQ6PSBici5vIGJyX2RldmljZS5vIGJyX2ZkYi5vIGJyX2ZvcndhcmQubyBicl9pZi5vIGJyX2lucHV0Lm8gXFxcXFxcbm5ldC9icmlkZ2UvTWFrZWZpbGUtOS1cXHRcXHRcXHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDo1Ni42NjYxMjI5NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2OTI2NDE2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfQlJJREdFYCBpcyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGhlcmUuIFRoYXQncyBoYXJkbHkgc3VycHJpc2luZywgd2UncmUgZGVhbGluZyB3aXRoIGJyaWRnaW5nIGFmdGVyIGFsbC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWluZyBlbmFibGVkLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBicl92bGFuLmNgPyBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgbW9kdWxlIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBicmlkZ2luZyBmcmFtZXdvcmsuIElzIGl0IGEgY29yZSBjb21wb25lbnQ/IEEgc3VwcG9ydGluZyBtb2R1bGU/IEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMTowNy4zNTg3NjczMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzkwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZT0yMT1icmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXFxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSArPSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjA3LjQ0NzE2MjUxMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA3NjYzMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipCcmlkZ2VkIFZMQU4gRmlsdGVyaW5nIC0gRGlnZ2luZyBEZWVwZXIqKlxuXG5SaWdodCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QsIHBhcnRpY3VsYXJseSBob3cgdGhlIGtlcm5lbCBkZXRlcm1pbmVzIGlmIGEgcGFja2V0IHNob3VsZCBiZSBicmlkZ2VkIHdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGNvcmUgbG9naWMgbGlrZWx5IHJlc2lkZXMgaW4gc29tZXRoaW5nIGxpa2UgdGhlIGRldmljZSBwYXRoIGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtLlxuXG5MZXQncyBkaXZlIGludG8gYGRldl9maWxsX2JyaWRnZV9wYXRoYCB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl04oCZcyByZXNwb25zaWJsZSBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwYXRoIGEgcGFja2V0IHRha2VzIHRocm91Z2ggdGhlIGJyaWRnaW5nIGluZnJhc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuIExldCdzIHNlZSBob3cgdGhhdCBwYXRoLWJ1aWxkaW5nIGludGVyYWN0cyB3aXRoIFZMQU4gZmlsdGVyaW5nIGVuYWJsZWQuIFRoaXMgc2hvdWxkIGV4cG9zZSB0aGUgY3J1Y2lhbCBkZWNpc2lvbiBwb2ludHMgYW5kIGZpbHRlcmluZyBydWxlcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyB0aGUgVkxBTiB0YWcgaXMgY29uc2lkZXJlZCBkdXJpbmcgcGF0aCBkZXRlcm1pbmF0aW9uIGFuZCB3aGV0aGVyIGl04oCZcyB1c2VkIGluIGZpbHRlcmluZyBwYWNrZXRzIGRlc3RpbmVkIGZvciB0aGUgYnJpZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjExLjE1NDgyOTM5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyNTYzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2ZpbGxfYnJpZGdlX3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzUzPXN0YXRpYyBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg2LVxcbm5ldC9jb3JlL2Rldi5jOjc4NzppbnQgZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG5uZXQvY29yZS9kZXYuYy03ODgtXFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODE1LX1cXG5uZXQvY29yZS9kZXYuYzo4MTY6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfYnJpZGdlX3BhdGgpO1xcbm5ldC9jb3JlL2Rldi5jLTgxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6MTEuMjQ1MDg5OTM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTA0MzE3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEZsb3cgT2ZmbG9hZCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUgZG9lcyB0aGUgbWFnaWMgcmVhbGx5IGJlZ2luIGZvciB0aGUgZmxvdyBvZmZsb2FkIGJyaWRnZSBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSByb290IG9mIGhvdyB0aGlzIHRoaW5nIGdldHMgaW5pdGlhbGl6ZWQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgIGlzIHRoZSBmdW5jdGlvbiB0byBleGFtaW5lLiBTcGVjaWZpY2FsbHksIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIGluIHRoZSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AgZmlsZS4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhlIGJyaWRnZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgcmVzb3VyY2VzIGFyZSBzZXR1cCBmb3IgdGhlIGZsb3cgb2ZmbG9hZCBmZWF0dXJlLiBMZXQncyBzZWUgaG93IHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cyBhcmUgaG9va2VkIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjE0LjgzNTUyMzQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDc2MzUwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zNTU9c3RhdGljIGludCBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDE5OmludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQyMC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NzctfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDc4OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjE1LjI0MzE2Mzc5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzc2MjY2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSwgdGhpbmtpbmcgb3V0IGxvdWQ6XG5cbioqRGl2aW5nIGludG8gbmZfZmxvd19ydWxlX2JyaWRnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmZfZmxvd19ydWxlX2JyaWRnZWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSdzIHJvbGUgaW4gdGhlIG9mZmxvYWQgcGF0aC4gU2luY2UgaXQncyBicmlkZ2UtcmVsYXRlZCwgSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFja2V0IHRyYXZlcnNlcyBhIGJyaWRnZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgcnVsZSBjcmVhdGlvbiwgbWF0Y2hpbmcsIGFuZCBldmljdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBicmlkZ2VkIGVudmlyb25tZW50LlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGJyaWRnZSBuZXRkZXZpY2Ugc3RydWN0dXJlLCBhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHBhY2tldHMgZ2V0IGZvcndhcmRlZCB0aHJvdWdoIHRoZSBmbG93IHRhYmxlLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyB0aGUgYnJpZGdlLXNwZWNpZmljIGluZm9ybWF0aW9uIChsaWtlIFZMQU4gSURzIG9yIE1BQyBhZGRyZXNzZXMpIGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBmbG93IGtleSBhbmQgcnVsZSBtYXRjaGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gdHJhY2UgaG93IHRoZSBwYWNrZXRzIGFyZSBnZXR0aW5nIHB1bnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlLiBJJ20gZ29pbmcgdG8gd2F0Y2ggdGhlIGRhdGEgcGF0aCBjbG9zZWx5LiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGhvb2tzIG9yIGNhbGxiYWNrcyB0byB0aGUgYnJpZGdlIGRyaXZlciBpdHNlbGY/IElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGNhbGxiYWNrcyBhcmUgZG9pbmcgYW5kIHdoZXJlIHRoZXkncmUgaW52b2tlZC4gQW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIEFQSSBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHNvZnR3YXJlIGlzLCBhbmQgaG93IGl0IGlzIGVuZm9yY2VkLiBGaW5hbGx5LCBsZXQncyBmaW5kIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBtYXliZSB0aGUgZGV2aWNlIGRyaXZlcnMnIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjIwLjYxOTQzMjUyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzE0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfcnVsZV9icmlkZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzQzOmludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc0NC1cXHRcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzU0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfcnVsZV9icmlkZ2UpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMToyMC43NDI3NTIyMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwMjE2MzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGlzOiBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgLCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCwgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgLCBhbmQgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAuIEknbSBhbHNvIGluY2x1ZGluZyBgYnJfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkYCBiZWNhdXNlIEkga25vdyB0aGVzZSB3ZXJlIHJlY2VudGx5IG1vZGlmaWVkLCBpbmNyZWFzaW5nIHRoZSBsaWtlbGlob29kIG9mIGludGVyZXN0aW5nIGJlaGF2aW9yLlxuXG5JJ20gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBmdW5jdGlvbnMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcyB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBhY2N1cmF0ZS4gYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZGVmaW5pdGVseSBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AsIGp1c3QgYXMgSSB0aG91Z2h0LiBJIGNhbiBjb25maXJtIGBicl9maWxsX2ZvcndhcmRfcGF0aGAgcmVzaWRlcyBpbiBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgYW5kIGBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWRgIGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIEFsbCBjaGVja3MgYXJlIGdvb2QuXG5cbk5vdywgZm9yIHRoZSBjb25maWd1cmF0aW9ucywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlc2UgaW4gcGxhY2Ugd2hlbiB0ZXN0aW5nOiBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBCUklER0VgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjI4LjU0NDkxODIwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzczMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjI4LjY0ODI5NzYyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk4MzQ5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6XG5cbioqRGVwZW5kZW5jaWVzIENoZWNrIGZvciBgTkZUX0ZMT1dfT0ZGTE9BRGAqKlxuXG5SaWdodCwgc28gYE5GVF9GTE9XX09GRkxPQURgLiBUaGF0J3MgYSBrZXkgZmVhdHVyZSwgYW5kIGJlZm9yZSBJIHN0YXJ0IGRvaW5nIGFueXRoaW5nIGVsc2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSB1bmRlcmx5aW5nIHBpZWNlcyBhcmUgaW4gcGxhY2UuIE5vIHNlbnNlIHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgYSBidWlsZCBsYXRlciBpZiBJIGNhbiBwcm9hY3RpdmVseSBpZGVudGlmeSBhbnkgbWlzc2luZyBsaW5rcy4gVGhpcyBtZWFucyBhIHRob3JvdWdoIGNoZWNrIG9mIGFsbCBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IG90aGVyIG1vZHVsZXMsIGxpYnJhcmllcywgb3Igc3lzdGVtIGNvbXBvbmVudHMgYE5GVF9GTE9XX09GRkxPQURgIHJlbGllcyBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBjb21waWxpbmc7IGl0J3MgYWJvdXQgcnVudGltZSBiZWhhdmlvciBhbmQgZW5zdXJpbmcgZXZlcnl0aGluZyBwbGF5cyBuaWNlbHkgdG9nZXRoZXIuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlLCBkb2N1bWVudGF0aW9uLCBhbmQgbWF5YmUgZXZlbiBzb21lIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6MzIuNDQ2NjQ5NTM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0Njk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjMyLjU1OTEyNTU4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4NDY2OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE5GX0ZMT1dfVEFCTEVgLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBtYXAgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgdG9vIGVhc3kgdG8gbWFrZSBhIGNoYW5nZSBoZXJlIGFuZCBicmVhayBzb21ldGhpbmcgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSB3aXRob3V0IGEgZnVsbCB1bmRlcnN0YW5kaW5nLlxuXG5MZXQncyBzZWXigKYgd2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyByZWx5IG9uIHRoaXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBwZXJoYXBzIG5ldGZpbHRlciBtb2R1bGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgdXNlci1zcGFjZSBpbnRlcmZhY2VzIHRoYXQgYXJlIGxpbmtlZCB0byB0aGlzIHRhYmxlPyBJIG5lZWQgdG8gbG9vayBmb3IgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1pZ2h0IG1ha2UuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0byBmaW5kIHJlZmVyZW5jZXMgYW5kIHRoZW4gbW92ZSB0byBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIHdpdGggbmV0ZmlsdGVyIGludGVybmFscy4gR290dGEgYmUgbWV0aG9kaWNhbCBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjM2LjIwNzU5NjI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1MjM3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6MzYuNDI4MTI3NTU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjQyMzY3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKkluaXRpYWwgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGluaXRpYWxseSB6ZXJvaW5nIGluIG9uIHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gSSdtIG5vdGluZyB0aGUgcHJlc2VuY2Ugb2YgYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmxvdyB0YWJsZSBhbmQgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IHZldCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBsb2dpY2FsbHkgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6NDAuNDUyMzY2MzEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3Mzg5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTM2PWNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMTo0MC42MjMxMTAzNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NzQ3MjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgYW5kIHRoaW5raW5nIGFsb25nIHRoZXNlIGxpbmVzOlxuXG4qKkNoZWNraW5nIGBCUklER0VgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBvZiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgYEJSSURHRWAgc3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGltcGFjdHMsIGlkZW50aWZ5aW5nIGFueSBsdXJraW5nIGNvbmZsaWN0cywgb3IgcGlucG9pbnRpbmcgYXJlYXMgd2hlcmUgd2UgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB1cHN0cmVhbSBjaGFuZ2VzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZvdW5kYXRpb25zIGFyZSBzb2xpZC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgd2Ugc3RhbmQsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgQlJJREdFYCBzeXN0ZW0gYmVmb3JlIEkgbW92ZSBvbi4gV2hhdCBkb2VzIHRoZSBkZXBlbmRlbmN5IHRyZWUgbG9vayBsaWtlPyBBcmUgd2UgcmVseWluZyBvbiBhbnkgbGlicmFyaWVzIHRoYXQgYXJlIGtub3duIHBhaW4gcG9pbnRzLCBvciB0aGF0IGFyZSBhYm91dCB0byByZWFjaCBlbmQtb2YtbGlmZT8gQSBxdWljayBkZXBlbmRlbmN5IGF1ZGl0IGlzIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjQ0LjE3MDU4NTM0NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MTA0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cXG5uZXQvYnJpZGdlL0tjb25maWctNzctXFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMTo0NC4zMDU2OTY1MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk2NjYzMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCcmlkZ2UgU3VwcG9ydCBmb3IgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGJyaWRnZSBzdXBwb3J0IGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgQlJJREdFYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvYnJpZGdlL0tjb25maWdgLCB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGZ1bmN0aW9uYWxpdGllcyBhbmQgaW50ZWdyYXRpb24gd2l0aCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGRldl9maWxsX2JyaWRnZV9wYXRoYCwgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGAsIGBuZl9mbG93X3J1bGVfYnJpZGdlYCwgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWRgLiBMZXQncyB2ZXJpZnkgdGhhdCBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IGFoLCB5ZXMsIGl0IGlzLiBJdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBpdCB3aXRoaW4gdGhlIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBkZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBieSBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYC4gVGhlbiwgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgY2FsbGVkIGJ5IGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgLiBGaW5hbGx5LCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBpcyBpbnZva2VkIGJ5IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHNwZWNpZmljYWxseSB3aGVuIHRoZSByb3V0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQsIG9yIHJhdGhlciwgd2hlbiBgZmxvd3RhYmxlLVx1MDAzZXR5cGUtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFYC4gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgZXhwcmVzc2lvbiwgd2hpY2ggaXMgdXNlZCB3aXRoaW4gbmZ0YWJsZXMuXG5cblNvLCB0aGUgY29kZSBpcyByZWFjaGFibGUsIGFuZCBpdCdzIGZ1bmN0aW9uYWwuIFRoYXQgbWVhbnMgaXQgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBicmlkZ2UtbmV0ZmlsdGVyIGludGVyYWN0aW9uIGFuZCBjYW4gYmUgdGVzdGVkLlxuXG5MZXQncyBwcmVwYXJlIHRoZSBvdXRwdXQuIFRoZSBmdXp6aW5nIHRhcmdldCBpcyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuXG5cbkhlcmUgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEknbSB0YXJnZXRpbmc6XG4qICAgYGRldl9maWxsX2JyaWRnZV9wYXRoYFxuKiAgIGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgXG4qICAgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGBcbiogICBgbmZfZmxvd19ydWxlX2JyaWRnZWBcbiogICBgYnJfZmlsbF9mb3J3YXJkX3BhdGhgXG4qICAgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGBcblxuQW5kIGhlcmUgYXJlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlOlxuKiAgIGBORl9GTE9XX1RBQkxFYFxuKiAgIGBORl9GTE9XX1RBQkxFX0lORVRgXG4qICAgYE5GVF9GTE9XX09GRkxPQURgXG4qICAgYEJSSURHRWBcbiogICBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYFxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBicmlkZ2UgdHJhZmZpYyBpbnRlcmFjdHMgd2l0aCBuZXRmaWx0ZXIncyBmbG93IG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGFjaGlldmVkIGJ5IGltcGxlbWVudGluZyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgd2l0aGluIHRoZSBmbG93IG9mZmxvYWQgZnJhbWV3b3JrLCBjb3VwbGVkIHdpdGggbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBicmlkZ2UgZm9yd2FyZGluZyBwYXRoIGZ1bmN0aW9ucy4gR2l2ZW4gdGhpcyBsZXZlbCBvZiBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9ucywgY29tYmluZWQgd2l0aCBpdHMgZGlyZWN0IGFjY2Vzc2liaWxpdHkgdmlhIG5mdGFibGVzIGFuZCByZWxldmFudCBicmlkZ2UgY29uZmlndXJhdGlvbnMsIHRoaXMgbWFrZXMgaXQgYW4gZXhjZWxsZW50IHRhcmdldCBmb3IgdGhvcm91Z2ggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDksIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjU0LjI3MjMzMDgwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjAwMzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJmbG93X29mZmxvYWRfYnJpZGdlX2luaXRcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aFwiLFxuICAgIFwibmZfZmxvd19ydWxlX2JyaWRnZVwiLFxuICAgIFwiYnJfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcImJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfYnJpZGdlX3BhdGhcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdFwiLFxuICAgIFwibmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfYnJpZGdlXCIsXG4gICAgXCJicl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgaW4gZmxvdyBvZmZsb2FkIGFuZCBtb2RpZmllcyBleGlzdGluZyBicmlkZ2UgZm9yd2FyZCBwYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBhbmQgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 16:16:23 +0000 UTC FinishedAt: 2026-07-07 16:31:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "e56fe1cd-beb1-4f25-a865-486c9b500fe9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dev_fill_bridge_path", "flow_offload_bridge_init", "nft_dev_fill_bridge_path", "nf_flow_rule_bridge", "br_fill_forward_path", "br_vlan_fill_forward_path_pvid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgmIzM0OywKICAgICYjMzQ7bmZfZmxvd19ydWxlX2JyaWRnZSYjMzQ7LAogICAgJiMzNDticl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDticl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgaW4gZmxvdyBvZmZsb2FkIGFuZCBtb2RpZmllcyBleGlzdGluZyBicmlkZ2UgZm9yd2FyZCBwYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBhbmQgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzIwNWE1MjVhZDBjZDZkNDQxMGRhMGMzOTE1ZDNlM2NhZGIxNWRlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTY6MzA6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5mZGVlNDQ2NWQ2MTI2MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDIwLDYgJiM0MzszNDIwLDggQEAgdm9pZCBkZXZfcmVtb3ZlX29mZmxvYWQoc3RydWN0IHBhY2tldF9vZmZsb2FkICpwbyk7XG4gXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO2ludCBkZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLmExMDllZGE1MjUwYzc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTMwNSw2ICYjNDM7MzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiB2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpO1xuIFxuJiM0MztpbnQgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xuJiM0MztcbiBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbiB2b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBib29sIGZvcmNlKTtcbkBAIC0zNjgsNiAmIzQzOzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTtcbiBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRlbnVtIGZsb3dfYmxvY2tfY29tbWFuZCBjbWQpO1xuJiM0MztpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7XG4gaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbiBcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLjg5ZjQ1MjVhNzI3OWQ2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTM4NSwxNiAmIzQzOzM4NSwyNSBAQCBzdGF0aWMgaW50IGJyX2RlbF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KVxuIHN0YXRpYyBpbnQgYnJfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNyYywgKmRzdDtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjtcbi1cdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKmRzdDtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlICpicjtcbiBcbi1cdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSlcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSkge1xuJiM0MztcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldjtcbiYjNDM7XG4mIzQzO1x0XHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KChzdHJ1Y3QgbmV0X2RldmljZSAqKWN0eC1cdTAwM2VkZXYpO1xuJiM0MztcdFx0aWYgKCFicl9kZXYpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiBcbi1cdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4mIzQzO1x0XHRzcmMgPSBicl9wb3J0X2dldF9yY3UoY3R4LVx1MDAzZWRldik7XG4mIzQzO1x0XHRiciA9IG5ldGRldl9wcml2KGJyX2Rldik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNyYyA9IE5VTEw7XG4mIzQzO1x0XHRiciA9IG5ldGRldl9wcml2KGN0eC1cdTAwM2VkZXYpO1xuJiM0MztcdH1cbiBcbi1cdGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChiciwgY3R4LCBwYXRoKTtcbiYjNDM7XHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIHNyYywgY3R4LCBwYXRoKTtcbiBcbiBcdGYgPSBicl9mZGJfZmluZF9yY3UoYnIsIGN0eC1cdTAwM2VkYWRkciwgcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9pZCk7XG4gXHRpZiAoIWYpXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjAwZjViNzJmZjQyZGVhIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMTYzMCw2ICYjNDM7MTYzMCw3IEBAIGJvb2wgYnJfdmxhbl9jYW5fZW50ZXJfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxuIFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcmFuZ2VfZW5kKTtcbiBcbiB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKTtcbiBpbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbkBAIC0xNzk5LDYgJiM0MzsxODAwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbmJwX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfdmxhbi5jIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbmluZGV4IDU1NjBhZmNhYWNhMzI3Li43MTUzMTQ5OWJjNzM1NiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuQEAgLTE0NTAsNiAmIzQzOzE0NTAsNyBAQCBpbnQgYnJfdmxhbl9nZXRfcHZpZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2ICpwX3B2aWQpXG4gRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9nZXRfcHZpZF9yY3UpO1xuIFxuIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuQEAgLTE0NjIsNyAmIzQzOzE0NjMsMTAgQEAgdm9pZCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiYjNDM7XHRpZiAocClcbiYjNDM7XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xuIFxuIFx0aWYgKGlkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgY3R4LVx1MDAzZXZsYW5baWR4XS5wcm90byA9PSBici1cdTAwM2V2bGFuX3Byb3RvKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNGIzZDVjZmRmNmUwMGYuLmY2Njg1YzFlNDc4NjAxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzUwLDQ0ICYjNDM7NzUwLDg0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gXHRyZXR1cm4gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiB9XG4gXG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4tXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiYjNDM7c3RhdGljIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuLVx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XG4tXHRzdGFjay1cdTAwM2VudW1fcGF0aHMgPSAwO1xuLVx0d2hpbGUgKGN0eC5kZXYgXHUwMDI2XHUwMDI2IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbi1cdFx0bGFzdF9kZXYgPSBjdHguZGV2O1xuJiM0MztcdHdoaWxlIChjdHgtXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4mIzQzO1x0XHRsYXN0X2RldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0XHRpZiAoIXBhdGgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbi1cdFx0cmV0ID0gY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIHBhdGgpO1xuJiM0MztcdFx0cmV0ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0aWYgKCFjdHguZGV2KVxuJiM0MztcdGlmICghY3R4LVx1MDAzZWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0aWYgKCFwYXRoKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbiYjNDM7XHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4mIzQzO2ludCBkZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXYsICpicl9kZXY7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiYjNDM7XG4mIzQzO1x0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdHgtXHUwMDNlZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0YnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIWJyX2RldiB8fCAhYnJfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRsYXN0X2RldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1x0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4mIzQzO1x0aWYgKCFwYXRoKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbiYjNDM7XHRpZiAoYnJfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZWRldiB8fCBXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKGN0eCwgc3RhY2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2JyaWRnZV9wYXRoKTtcbiYjNDM7XG4mIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuJiM0MztcdFx0LmRldlx0PSBkZXYsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oXHUwMDI2Y3R4LCBzdGFjayk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcbmluZGV4IGIwZjE5OTE3MTkzMjQxLi44MGIyMzgxOTZmMjliMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcbkBAIC02NSw2ICYjNDM7NjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfYnJpZGdlID0ge1xuJiM0MztcdC5mYW1pbHlcdFx0PSBORlBST1RPX0JSSURHRSxcbiYjNDM7XHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbiYjNDM7XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG4mIzQzO1x0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9icmlkZ2UsXG4mIzQzO1x0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG4mIzQzO1x0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaW5ldF9ob29rLFxuJiM0MztcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xuIFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSU5FVCxcbiBcdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxuQEAgLTk3LDYgJiM0MzsxMDcsNyBAQCBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfaW5ldF9tb2R1bGVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XG4gXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2lwdjQpO1xuIFx0bmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcbiBcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaW5ldCk7XG5AQCAtMTA5LDYgJiM0MzsxMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd19pbmV0X21vZHVsZV9leGl0KHZvaWQpXG4gXHRuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaW5ldCk7XG4gXHRuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaXB2Nik7XG4gXHRuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaXB2NCk7XG4mIzQzO1x0bmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XG4gfVxuIFxuIG1vZHVsZV9pbml0KG5mX2Zsb3dfaW5ldF9tb2R1bGVfaW5pdCk7XG5AQCAtMTE4LDUgJiM0MzsxMzAsNiBAQCBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7UGFibG8gTmVpcmEgQXl1c28gXHUwMDNjcGFibG9AbmV0ZmlsdGVyLm9yZ1x1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GX0ZMT1dUQUJMRShBRl9JTkVUKTtcbiBNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKEFGX0lORVQ2KTtcbiYjNDM7TU9EVUxFX0FMSUFTX05GX0ZMT1dUQUJMRShBRl9CUklER0UpO1xuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoMSk7IC8qIE5GUFJPVE9fSU5FVCAqL1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggMDAyZWMxNWQ5ODhiZGIuLjU1NjZlYmRhN2I3ZDMwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuQEAgLTc0MCw2ICYjNDM7NzQwLDE5IEBAIG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbiYjNDM7e1xuJiM0MztcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRmbG93X29mZmxvYWRfcmVkaXJlY3QobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfcnVsZV9icmlkZ2UpO1xuJiM0MztcbiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIFx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi4yZGViOGU0ZDUzMjhiMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG5AQCAtMzUwLDMgJiM0MzszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCxcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnNyY19kZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkc3RfZGV2LFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBjaGFyICpzcmNfaGEsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGNoYXIgKmRzdF9oYSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnRoID0gZmxvdy1cdTAwM2V0dXBsZWhhc2g7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge307XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyBpbmZvID0ge307XG4mIzQzO1x0aW50IGksIGogPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB0aFtkaXJdLnR1cGxlLmVuY2FwX251bSAtIDE7IGkgXHUwMDNlPSAwIDsgaS0tKSB7XG4mIzQzO1x0XHRpZiAoaW5mby5udW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGhbZGlyXS50dXBsZS5pbl92bGFuX2luZ3Jlc3MgXHUwMDI2IEJJVChpKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aW5mby5lbmNhcFtpbmZvLm51bV9lbmNhcHNdLmlkID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5pZDtcbiYjNDM7XHRcdGluZm8uZW5jYXBbaW5mby5udW1fZW5jYXBzXS5wcm90byA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0ucHJvdG87XG4mIzQzO1x0XHRpbmZvLm51bV9lbmNhcHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmICh0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3R4Lm51bV92bGFucyBcdTAwM2U9IE5FVF9ERVZJQ0VfUEFUSF9WTEFOX01BWClcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0Y3R4LnZsYW5bY3R4Lm51bV92bGFuc10uaWQgPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLmlkO1xuJiM0MztcdFx0Y3R4LnZsYW5bY3R4Lm51bV92bGFuc10ucHJvdG8gPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvO1xuJiM0MztcdFx0Y3R4Lm51bV92bGFucyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdGN0eC5kZXYgPSBzcmNfZGV2O1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGRzdF9oYSk7XG4mIzQzO1xuJiM0MztcdGlmIChkZXZfZmlsbF9icmlkZ2VfcGF0aChcdTAwMjZjdHgsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0bmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGRzdF9oYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSk7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby5pbmRldiB8fCBpbmZvLmluZGV2ICE9IGRzdF9kZXYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHRoWyFkaXJdLnR1cGxlLmlpZmlkeCA9IGluZm8uaW5kZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRmb3IgKGkgPSBpbmZvLm51bV9lbmNhcHMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4mIzQzO1x0XHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4mIzQzO1x0XHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5wcm90byA9IGluZm8uZW5jYXBbaV0ucHJvdG87XG4mIzQzO1x0XHRpZiAoaW5mby5pbmdyZXNzX3ZsYW5zIFx1MDAyNiBCSVQoaSkpXG4mIzQzO1x0XHRcdHRoWyFkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyB8PSBCSVQoaik7XG4mIzQzO1x0XHRqJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0dGhbIWRpcl0udHVwbGUuZW5jYXBfbnVtID0gaW5mby5udW1fZW5jYXBzO1xuJiM0MztcbiYjNDM7XHR0aFtkaXJdLnR1cGxlLm10dSA9IGRzdF9kZXYtXHUwMDNlbXR1O1xuJiM0MztcdGV0aGVyX2FkZHJfY29weSh0aFtkaXJdLnR1cGxlLm91dC5oX3NvdXJjZSwgc3JjX2hhKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkodGhbZGlyXS50dXBsZS5vdXQuaF9kZXN0LCBkc3RfaGEpO1xuJiM0MztcdHRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHR0aFtkaXJdLnR1cGxlLnhtaXRfdHlwZSA9IEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiYjNDM7XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbl9kZXYsICpvdXRfZGV2O1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGV0aF9oZHIocGt0LVx1MDAzZXNrYik7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGU7XG4mIzQzO1x0aW50IGVyciwgaSA9IDA7XG4mIzQzO1xuJiM0MztcdGluX2RldiA9IG5mdF9pbihwa3QpO1xuJiM0MztcdGlmICghaW5fZGV2IHx8ICFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluX2RldiwgZnQpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRvdXRfZGV2ID0gbmZ0X291dChwa3QpO1xuJiM0MztcdGlmICghb3V0X2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihvdXRfZGV2LCBmdCkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHR1cGxlID0gIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQocGt0LVx1MDAzZXNrYikpIHtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gc2tiX3ZsYW5fdGFnX2dldChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gcGt0LVx1MDAzZXNrYi1cdTAwM2V2bGFuX3Byb3RvO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGV0aF9oZHIocGt0LVx1MDAzZXNrYiktXHUwMDNlaF9wcm90bykge1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfODAyMVEpOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0XHQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmhkci1cdTAwM2VoX3ZsYW5fVENJKTtcbiYjNDM7XHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKToge1xuJiM0MztcdFx0c3RydWN0IHBwcG9lX2hkciAqcGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0XHQgICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XG4mIzQzO1xuJiM0MztcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4mIzQzO1x0XHR0dXBsZS1cdTAwM2VlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QX1BQUF9TRVMpO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0fVxuJiM0MztcdHR1cGxlLVx1MDAzZWVuY2FwX251bSA9IGk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aChmbG93LCBmdCwgIWRpciwgb3V0X2RldiwgaW5fZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBldGgtXHUwMDNlaF9kZXN0LCBldGgtXHUwMDNlaF9zb3VyY2UpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsIGRpciwgaW5fZGV2LCBvdXRfZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBldGgtXHUwMDNlaF9zb3VyY2UsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDM1Li4xYTVlZWY0NmY5MjJkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuQEAgLTUzLDEzICYjNDM7NTMsMTQgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiB7XG4gXHRzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4gXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcdTAwMjZwcml2LVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VkYXRhO1xuJiM0MztcdGJvb2wgcm91dGluZyA9IGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRTtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0Y3BoID0gTlVMTDtcbiBcdHN0cnVjdCBuZl9mbG93X3JvdXRlIHJvdXRlID0ge307XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0LCB0aG9mZjtcbiBcbiBcdGlmIChuZnRfZmxvd19vZmZsb2FkX3NraXAocGt0LVx1MDAzZXNrYiwgbmZ0X3BmKHBrdCkpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC03MCw4ICYjNDM7NzEsMTEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcbiBcdHN3aXRjaCAoY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7XG4gXHRjYXNlIElQUFJPVE9fVENQOlxuLVx0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIG5mdF90aG9mZihwa3QpLFxuLVx0XHRcdFx0XHQgIHNpemVvZihfdGNwaCksIFx1MDAyNl90Y3BoKTtcbiYjNDM7XHRcdHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XG4mIzQzO1x0XHRpZiAodGhvZmYgPT0gMClcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIHRob2ZmLCBzaXplb2YoX3RjcGgpLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZfdGNwaCk7XG4gXHRcdGlmICh1bmxpa2VseSghdGNwaCB8fCB0Y3BoLVx1MDAzZWZpbiB8fCB0Y3BoLVx1MDAzZXJzdCB8fFxuIFx0XHRcdCAgICAgIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpKSlcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC0xMDYsMTQgJiM0MzsxMTAsMjEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4tXHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiM0MztcdGlmIChyb3V0aW5nKSB7XG4mIzQzO1x0XHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiM0MztcdH1cbiBcbiBcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xuIFx0aWYgKCFmbG93KVxuIFx0XHRnb3RvIGVycl9mbG93X2FsbG9jO1xuIFxuLVx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuJiM0MztcdGlmIChyb3V0aW5nKVxuJiM0MztcdFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlmIChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoZmxvdywgcGt0LCBkaXIsIHByaXYtXHUwMDNlZmxvd3RhYmxlKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfZmxvd19hZGQ7XG4mIzQzO1xuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuQEAgLTEyNyw4ICYjNDM7MTM4LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gZXJyX2Zsb3dfYWRkOlxuIFx0Zmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7XG4gZXJyX2Zsb3dfYWxsb2M6XG4tXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4tXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xuJiM0MztcdGlmIChyb3V0aW5nKSB7XG4mIzQzO1x0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4mIzQzO1x0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xuJiM0MztcdH1cbiBlcnJfZmxvd19yb3V0ZTpcbiBcdGNsZWFyX2JpdChJUFNfT0ZGTE9BRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gb3V0OlxuQEAgLTE0Miw3ICYjNDM7MTU1LDggQEAgc3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjQgXHUwMDI2XHUwMDI2XG4gXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjYgXHUwMDI2XHUwMDI2XG4tXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXG4mIzQzO1x0ICAgIGN0eC1cdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JTkVUIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjdHgtXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fQlJJREdFKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cdTAwM2VjaGFpbiwgaG9va19tYXNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZmlsbF9icmlkZ2VfcGF0aCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfYnJpZGdlX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9icmlkZ2UmIzM0OywKICAgICYjMzQ7YnJfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzIwNWE1MjVhZDBjZDZkNDQxMGRhMGMzOTE1ZDNlM2NhZGIxNWRlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTY6MzA6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZmRlZTQ0NjVkNjEyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzQyMCw2ICYjNDM7MzQyMCw4IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pOwogCiBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO2ludCBkZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAomIzQzOwkJCSBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7CiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spOwogc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggN2IyM2IyNDVhNWE4NmEuLmExMDllZGE1MjUwYzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKQEAgLTMwNSw2ICYjNDM7MzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIHZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAkJCSAgICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlKTsKIAomIzQzO2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7CiYjNDM7CiBpbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTsKIHZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgYm9vbCBmb3JjZSk7CkBAIC0zNjgsNiAmIzQzOzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTsKIGludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJZW51bSBmbG93X2Jsb2NrX2NvbW1hbmQgY21kKTsKJiM0MztpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiYjNDM7CQkJZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpciwKJiM0MzsJCQlzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpOwogaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAkJCSAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLAogCQkJICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCBlN2YzNDNhYjIyZDM3OS4uODlmNDUyNWE3Mjc5ZDYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwpAQCAtMzg1LDE2ICYjNDM7Mzg1LDI1IEBAIHN0YXRpYyBpbnQgYnJfZGVsX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpCiBzdGF0aWMgaW50IGJyX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCkKIHsKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc3JjLCAqZHN0OwogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3Q7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCi0JaWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KGN0eC0mZ3Q7ZGV2KSkKLQkJcmV0dXJuIC0xOwomIzQzOwlpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoY3R4LSZndDtkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2OwomIzQzOwomIzQzOwkJYnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtJmd0O2Rldik7CiYjNDM7CQlpZiAoIWJyX2RldikKJiM0MzsJCQlyZXR1cm4gLTE7CiAKLQliciA9IG5ldGRldl9wcml2KGN0eC0mZ3Q7ZGV2KTsKJiM0MzsJCXNyYyA9IGJyX3BvcnRfZ2V0X3JjdShjdHgtJmd0O2Rldik7CiYjNDM7CQliciA9IG5ldGRldl9wcml2KGJyX2Rldik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzcmMgPSBOVUxMOwomIzQzOwkJYnIgPSBuZXRkZXZfcHJpdihjdHgtJmd0O2Rldik7CiYjNDM7CX0KIAotCWJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChiciwgY3R4LCBwYXRoKTsKJiM0MzsJYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKGJyLCBzcmMsIGN0eCwgcGF0aCk7CiAKIAlmID0gYnJfZmRiX2ZpbmRfcmN1KGJyLCBjdHgtJmd0O2RhZGRyLCBwYXRoLSZndDticmlkZ2Uudmxhbl9pZCk7CiAJaWYgKCFmKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCBkNTVlYTk1MTZlM2UzNi4uMDBmNWI3MmZmNDJkZWEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC0xNjMwLDYgJiM0MzsxNjMwLDcgQEAgYm9vbCBicl92bGFuX2Nhbl9lbnRlcl9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnJhbmdlX2VuZCk7CiAKIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpOwogaW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCkBAIC0xNzk5LDYgJiM0MzsxODAwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbmJwX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKJiM0MzsJCQkJCQkgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpCiB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jCmluZGV4IDU1NjBhZmNhYWNhMzI3Li43MTUzMTQ5OWJjNzM1NiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl92bGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl92bGFuLmMKQEAgLTE0NTAsNiAmIzQzOzE0NTAsNyBAQCBpbnQgYnJfdmxhbl9nZXRfcHZpZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2ICpwX3B2aWQpCiBFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9wdmlkX3JjdSk7CiAKIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpCiB7CkBAIC0xNDYyLDcgJiM0MzsxNDYzLDEwIEBAIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpCiAJCXJldHVybjsKIAotCXZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpOwomIzQzOwlpZiAocCkKJiM0MzsJCXZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApOwomIzQzOwllbHNlCiYjNDM7CQl2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTsKIAogCWlmIChpZHggJmd0Oz0gMCAmYW1wOyZhbXA7CiAJICAgIGN0eC0mZ3Q7dmxhbltpZHhdLnByb3RvID09IGJyLSZndDt2bGFuX3Byb3RvKSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5mNjY4NWMxZTQ3ODYwMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTc1MCw0NCAmIzQzOzc1MCw4NCBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogCXJldHVybiAmYW1wO3N0YWNrLSZndDtwYXRoW2tdOwogfQogCi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiYjNDM7c3RhdGljIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewotCQkuZGV2CT0gZGV2LAotCX07CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKIAlpbnQgcmV0ID0gMDsKIAotCW1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7Ci0Jc3RhY2stJmd0O251bV9wYXRocyA9IDA7Ci0Jd2hpbGUgKGN0eC5kZXYgJmFtcDsmYW1wOyBjdHguZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHsKLQkJbGFzdF9kZXYgPSBjdHguZGV2OwomIzQzOwl3aGlsZSAoY3R4LSZndDtkZXYgJmFtcDsmYW1wOyBjdHgtJmd0O2Rldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7CiYjNDM7CQlsYXN0X2RldiA9IGN0eC0mZ3Q7ZGV2OwogCQlwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTsKIAkJaWYgKCFwYXRoKQogCQkJcmV0dXJuIC0xOwogCiAJCW1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpOwotCQlyZXQgPSBjdHguZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgoJmFtcDtjdHgsIHBhdGgpOwomIzQzOwkJcmV0ID0gY3R4LSZndDtkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiAtMTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtJmd0O2RldikpCiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKCFjdHguZGV2KQomIzQzOwlpZiAoIWN0eC0mZ3Q7ZGV2KQogCQlyZXR1cm4gcmV0OwogCiAJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLTE7CiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUOwotCXBhdGgtJmd0O2RldiA9IGN0eC5kZXY7CiYjNDM7CXBhdGgtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2OwogCiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKJiM0MztpbnQgZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKJiM0MzsJCQkgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXYsICpicl9kZXY7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiYjNDM7CiYjNDM7CXN0YWNrLSZndDtudW1fcGF0aHMgPSAwOwomIzQzOwomIzQzOwlpZiAoIWN0eC0mZ3Q7ZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtJmd0O2RldikpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3UoKHN0cnVjdCBuZXRfZGV2aWNlICopY3R4LSZndDtkZXYpOwomIzQzOwlpZiAoIWJyX2RldiB8fCAhYnJfZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWxhc3RfZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwomIzQzOwlpZiAoIXBhdGgpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CW1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpOwomIzQzOwlpZiAoYnJfZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmICghY3R4LSZndDtkZXYgfHwgV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC0mZ3Q7ZGV2KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oY3R4LCBzdGFjayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2JyaWRnZV9wYXRoKTsKJiM0MzsKJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKJiM0MzsJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldgk9IGRldiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJbWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTsKJiM0MzsKJiM0MzsJc3RhY2stJmd0O251bV9wYXRocyA9IDA7CiYjNDM7CiYjNDM7CXJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKCZhbXA7Y3R4LCBzdGFjayk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTsKIAogLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBhcyB3ZSBkb250IHRha2UgYSByZWZlcmVuY2UgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jCmluZGV4IGIwZjE5OTE3MTkzMjQxLi44MGIyMzgxOTZmMjliMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jCkBAIC02NSw2ICYjNDM7NjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2JyaWRnZSA9IHsKJiM0MzsJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKJiM0MzsJLmluaXQJCT0gbmZfZmxvd190YWJsZV9pbml0LAomIzQzOwkuc2V0dXAJCT0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLAomIzQzOwkuYWN0aW9uCQk9IG5mX2Zsb3dfcnVsZV9icmlkZ2UsCiYjNDM7CS5mcmVlCQk9IG5mX2Zsb3dfdGFibGVfZnJlZSwKJiM0MzsJLmhvb2sJCT0gbmZfZmxvd19vZmZsb2FkX2luZXRfaG9vaywKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0gewogCS5mYW1pbHkJCT0gTkZQUk9UT19JTkVULAogCS5pbml0CQk9IG5mX2Zsb3dfdGFibGVfaW5pdCwKQEAgLTk3LDYgJiM0MzsxMDcsNyBAQCBzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0gewogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X2luZXRfbW9kdWxlX2luaXQodm9pZCkKIHsKJiM0MzsJbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKCZhbXA7Zmxvd3RhYmxlX2JyaWRnZSk7CiAJbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKCZhbXA7Zmxvd3RhYmxlX2lwdjQpOwogCW5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pcHY2KTsKIAluZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoJmFtcDtmbG93dGFibGVfaW5ldCk7CkBAIC0xMDksNiAmIzQzOzEyMCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X2luZXRfbW9kdWxlX2V4aXQodm9pZCkKIAluZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pbmV0KTsKIAluZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pcHY2KTsKIAluZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSgmYW1wO2Zsb3d0YWJsZV9pcHY0KTsKJiM0MzsJbmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoJmFtcDtmbG93dGFibGVfYnJpZGdlKTsKIH0KIAogbW9kdWxlX2luaXQobmZfZmxvd19pbmV0X21vZHVsZV9pbml0KTsKQEAgLTExOCw1ICYjNDM7MTMwLDYgQEAgTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGFibG8gTmVpcmEgQXl1c28gJmx0O3BhYmxvQG5ldGZpbHRlci5vcmcmZ3Q7JiMzNDspOwogTU9EVUxFX0FMSUFTX05GX0ZMT1dUQUJMRShBRl9JTkVUKTsKIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVDYpOwomIzQzO01PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfQlJJREdFKTsKIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoMSk7IC8qIE5GUFJPVE9fSU5FVCAqLwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZSYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCmluZGV4IDAwMmVjMTVkOTg4YmRiLi41NTY2ZWJkYTdiN2QzMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCkBAIC03NDAsNiAmIzQzOzc0MCwxOSBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQllbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLAomIzQzOwkJCXN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSkKJiM0Mzt7CiYjNDM7CWlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZmxvd19vZmZsb2FkX3JlZGlyZWN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX2JyaWRnZSk7CiYjNDM7CiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAogCQkJICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsCiAJCQkgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKaW5kZXggOThjMDNiNDg3ZjUyMTEuLjJkZWI4ZTRkNTMyOGIzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKQEAgLTEsNiAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwpAQCAtMzUwLDMgJiM0MzszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAogCXJldHVybiAtRU5PRU5UOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQsCiYjNDM7CQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnNyY19kZXYsCiYjNDM7CQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZHN0X2RldiwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGNoYXIgKnNyY19oYSwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGNoYXIgKmRzdF9oYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnRoID0gZmxvdy0mZ3Q7dHVwbGVoYXNoOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7fTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjazsKJiM0MzsJc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gaW5mbyA9IHt9OwomIzQzOwlpbnQgaSwgaiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHRoW2Rpcl0udHVwbGUuZW5jYXBfbnVtIC0gMTsgaSAmZ3Q7PSAwIDsgaS0tKSB7CiYjNDM7CQlpZiAoaW5mby5udW1fZW5jYXBzICZndDs9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJCWlmICh0aFtkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyAmYW1wOyBCSVQoaSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpbmZvLmVuY2FwW2luZm8ubnVtX2VuY2Fwc10uaWQgPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLmlkOwomIzQzOwkJaW5mby5lbmNhcFtpbmZvLm51bV9lbmNhcHNdLnByb3RvID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90bzsKJiM0MzsJCWluZm8ubnVtX2VuY2FwcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAodGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90byA9PSBodG9ucyhFVEhfUF9QUFBfU0VTKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChjdHgubnVtX3ZsYW5zICZndDs9IE5FVF9ERVZJQ0VfUEFUSF9WTEFOX01BWCkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQljdHgudmxhbltjdHgubnVtX3ZsYW5zXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7CiYjNDM7CQljdHgudmxhbltjdHgubnVtX3ZsYW5zXS5wcm90byA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0ucHJvdG87CiYjNDM7CQljdHgubnVtX3ZsYW5zJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwljdHguZGV2ID0gc3JjX2RldjsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgZHN0X2hhKTsKJiM0MzsKJiM0MzsJaWYgKGRldl9maWxsX2JyaWRnZV9wYXRoKCZhbXA7Y3R4LCAmYW1wO3N0YWNrKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CW5mdF9kZXZfcGF0aF9pbmZvKCZhbXA7c3RhY2ssICZhbXA7aW5mbywgZHN0X2hhLCAmYW1wO2Z0LSZndDtkYXRhKTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLmluZGV2IHx8IGluZm8uaW5kZXYgIT0gZHN0X2RldikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJdGhbIWRpcl0udHVwbGUuaWlmaWR4ID0gaW5mby5pbmRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJZm9yIChpID0gaW5mby5udW1fZW5jYXBzIC0gMTsgaSAmZ3Q7PSAwOyBpLS0pIHsKJiM0MzsJCXRoWyFkaXJdLnR1cGxlLmVuY2FwW2pdLmlkID0gaW5mby5lbmNhcFtpXS5pZDsKJiM0MzsJCXRoWyFkaXJdLnR1cGxlLmVuY2FwW2pdLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bzsKJiM0MzsJCWlmIChpbmZvLmluZ3Jlc3NfdmxhbnMgJmFtcDsgQklUKGkpKQomIzQzOwkJCXRoWyFkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyB8PSBCSVQoaik7CiYjNDM7CQlqJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwl0aFshZGlyXS50dXBsZS5lbmNhcF9udW0gPSBpbmZvLm51bV9lbmNhcHM7CiYjNDM7CiYjNDM7CXRoW2Rpcl0udHVwbGUubXR1ID0gZHN0X2Rldi0mZ3Q7bXR1OwomIzQzOwlldGhlcl9hZGRyX2NvcHkodGhbZGlyXS50dXBsZS5vdXQuaF9zb3VyY2UsIHNyY19oYSk7CiYjNDM7CWV0aGVyX2FkZHJfY29weSh0aFtkaXJdLnR1cGxlLm91dC5oX2Rlc3QsIGRzdF9oYSk7CiYjNDM7CXRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CXRoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAomIzQzOwkJCSAgICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluX2RldiwgKm91dF9kZXY7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmV0aCA9IGV0aF9oZHIocGt0LSZndDtza2IpOwomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZTsKJiM0MzsJaW50IGVyciwgaSA9IDA7CiYjNDM7CiYjNDM7CWluX2RldiA9IG5mdF9pbihwa3QpOwomIzQzOwlpZiAoIWluX2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihpbl9kZXYsIGZ0KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJb3V0X2RldiA9IG5mdF9vdXQocGt0KTsKJiM0MzsJaWYgKCFvdXRfZGV2IHx8ICFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KG91dF9kZXYsIGZ0KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJdHVwbGUgPSAgJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGU7CiYjNDM7CiYjNDM7CWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChwa3QtJmd0O3NrYikpIHsKJiM0MzsJCXR1cGxlLSZndDtlbmNhcFtpXS5pZCA9IHNrYl92bGFuX3RhZ19nZXQocGt0LSZndDtza2IpOwomIzQzOwkJdHVwbGUtJmd0O2VuY2FwW2ldLnByb3RvID0gcGt0LSZndDtza2ItJmd0O3ZsYW5fcHJvdG87CiYjNDM7CQlpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGV0aF9oZHIocGt0LSZndDtza2IpLSZndDtoX3Byb3RvKSB7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfODAyMVEpOiB7CiYjNDM7CQlzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC0mZ3Q7c2tiKQomIzQzOwkJCQkJICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiYjNDM7CQl0dXBsZS0mZ3Q7ZW5jYXBbaV0uaWQgPSBudG9ocyh2aGRyLSZndDtoX3ZsYW5fVENJKTsKJiM0MzsJCXR1cGxlLSZndDtlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTsKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTogewomIzQzOwkJc3RydWN0IHBwcG9lX2hkciAqcGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC0mZ3Q7c2tiKQomIzQzOwkJCQkJICAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwomIzQzOwomIzQzOwkJdHVwbGUtJmd0O2VuY2FwW2ldLmlkID0gbnRvaHMocGhkci0mZ3Q7c2lkKTsKJiM0MzsJCXR1cGxlLSZndDtlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QX1BQUF9TRVMpOwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl9CiYjNDM7CXR1cGxlLSZndDtlbmNhcF9udW0gPSBpOwomIzQzOwomIzQzOwllcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsICFkaXIsIG91dF9kZXYsIGluX2RldiwKJiM0MzsJCQkJICAgICAgIGV0aC0mZ3Q7aF9kZXN0LCBldGgtJmd0O2hfc291cmNlKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsIGRpciwgaW5fZGV2LCBvdXRfZGV2LAomIzQzOwkJCQkgICAgICAgZXRoLSZndDtoX3NvdXJjZSwgZXRoLSZndDtoX2Rlc3QpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwppbmRleCAzMmI0MjgxMDM4ZGQzNS4uMWE1ZWVmNDZmOTIyZDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCkBAIC01MywxMyAmIzQzOzUzLDE0IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiB7CiAJc3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOwogCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSA9ICZhbXA7cHJpdi0mZ3Q7Zmxvd3RhYmxlLSZndDtkYXRhOwomIzQzOwlib29sIHJvdXRpbmcgPSBmbG93dGFibGUtJmd0O3R5cGUtJmd0O2ZhbWlseSAhPSBORlBST1RPX0JSSURHRTsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGNwaCA9IE5VTEw7CiAJc3RydWN0IG5mX2Zsb3dfcm91dGUgcm91dGUgPSB7fTsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93OwogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIHRob2ZmOwogCiAJaWYgKG5mdF9mbG93X29mZmxvYWRfc2tpcChwa3QtJmd0O3NrYiwgbmZ0X3BmKHBrdCkpKQogCQlnb3RvIG91dDsKQEAgLTcwLDggJiM0Mzs3MSwxMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCiAJc3dpdGNoIChjdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7CiAJY2FzZSBJUFBST1RPX1RDUDoKLQkJdGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtJmd0O3NrYiwgbmZ0X3Rob2ZmKHBrdCksCi0JCQkJCSAgc2l6ZW9mKF90Y3BoKSwgJmFtcDtfdGNwaCk7CiYjNDM7CQl0aG9mZiA9IG5mdF90aG9mZihwa3QpOwomIzQzOwkJaWYgKHRob2ZmID09IDApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC0mZ3Q7c2tiLCB0aG9mZiwgc2l6ZW9mKF90Y3BoKSwKJiM0MzsJCQkJCSAgJmFtcDtfdGNwaCk7CiAJCWlmICh1bmxpa2VseSghdGNwaCB8fCB0Y3BoLSZndDtmaW4gfHwgdGNwaC0mZ3Q7cnN0IHx8CiAJCQkgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpCiAJCQlnb3RvIG91dDsKQEAgLTEwNiwxNCAmIzQzOzExMCwyMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQlnb3RvIG91dDsKIAogCWRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKLQlpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgJmFtcDtyb3V0ZSwgZGlyLCBwcml2LSZndDtmbG93dGFibGUpICZsdDsgMCkKLQkJZ290byBlcnJfZmxvd19yb3V0ZTsKJiM0MzsJaWYgKHJvdXRpbmcpIHsKJiM0MzsJCWlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCAmYW1wO3JvdXRlLCBkaXIsIHByaXYtJmd0O2Zsb3d0YWJsZSkgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX2Zsb3dfcm91dGU7CiYjNDM7CX0KIAogCWZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpOwogCWlmICghZmxvdykKIAkJZ290byBlcnJfZmxvd19hbGxvYzsKIAotCWZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csICZhbXA7cm91dGUpOwomIzQzOwlpZiAocm91dGluZykKJiM0MzsJCWZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csICZhbXA7cm91dGUpOwomIzQzOwllbHNlCiYjNDM7CQlpZiAoZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KGZsb3csIHBrdCwgZGlyLCBwcml2LSZndDtmbG93dGFibGUpICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9mbG93X2FkZDsKJiM0MzsKIAlpZiAodGNwaCkKIAkJZmxvd19vZmZsb2FkX2N0X3RjcChjdCk7CiAKQEAgLTEyNyw4ICYjNDM7MTM4LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiBlcnJfZmxvd19hZGQ6CiAJZmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7CiBlcnJfZmxvd19hbGxvYzoKLQlkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7Ci0JZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTsKJiM0MzsJaWYgKHJvdXRpbmcpIHsKJiM0MzsJCWRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTsKJiM0MzsJCWRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7CiYjNDM7CX0KIGVycl9mbG93X3JvdXRlOgogCWNsZWFyX2JpdChJUFNfT0ZGTE9BRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cyk7CiBvdXQ6CkBAIC0xNDIsNyAmIzQzOzE1NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCiAJaWYgKGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSVBWNCAmYW1wOyZhbXA7CiAJICAgIGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSVBWNiAmYW1wOyZhbXA7Ci0JICAgIGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSU5FVCkKJiM0MzsJICAgIGN0eC0mZ3Q7ZmFtaWx5ICE9IE5GUFJPVE9fSU5FVCAmYW1wOyZhbXA7CiYjNDM7CSAgICBjdHgtJmd0O2ZhbWlseSAhPSBORlBST1RPX0JSSURHRSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtJmd0O2NoYWluLCBob29rX21hc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBCcmlkZ2UgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCwgd2hpY2ggZGVmaW5pdGVseSBzb3VuZHMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMuIEkgc2VlIGBkZXZfZmlsbF9icmlkZ2VfcGF0aGAgaW4gYG5ldC9jb3JlL2Rldi5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgbG9vaywgYW5kIGBicl9maWxsX2ZvcndhcmRfcGF0aGAgaW4gYG5ldC9icmlkZ2UvYnJfZGV2aWNlLmNgIGdldHMgbW9kaWZpZWQuIFRoZW4sIHdlIGhhdmUgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGAgYW5kIGBuZl9mbG93X3J1bGVfYnJpZGdlYCBpbiB0aGUgbmV0ZmlsdGVyIHNpZGUsIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCByZXNwZWN0aXZlbHkuIEl0IGFsc28gcmVnaXN0ZXJzIGBmbG93dGFibGVfYnJpZGdlYCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuY2AuIEZpbmFsbHkgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBpcyBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgYE5GUFJPVE9fQlJJREdFYC4KClllcywgdGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtlcm5lbCBmdW5jdGlvbnMgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gTG9va3MgbGlrZToKCiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgCiogICBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YAoqICAgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgKHN0YXRpY2FsbHkgZGVmaW5lZCkKKiAgIGBuZl9mbG93X3J1bGVfYnJpZGdlYAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb21waWxlZCBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIGNvZGUgaXMgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmaWxlczoKCiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgIGxpdmVzIGluIGBuZXQvY29yZS9kZXYuY2AKKiAgIGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jYAoqICAgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYAoqICAgYGZsb3d0YWJsZV9icmlkZ2VgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jYAoKVGltZSB0byB3aGlwIG91dCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgY29udHJvbGxpbmcgdGhpcy4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwIHRvIGVuc3VyZSBJIGNhbiBidWlsZCBhIGZ1enplciB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSB3aWRlc3Qgc2V0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBuZl9mbG93X3RhYmxlYCBpbiB0aGUgTmV0ZmlsdGVyIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgYG5mX2Zsb3dfdGFibGVgIG1vZHVsZSBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBrZXJuZWwgZGV2ZWxvcG1lbnQsIGlzIHRvIGNoZWNrIHRoZSBgTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIHJlc2lkZS4gSXQmIzM5O2xsIHRlbGwgbWUgaG93IGBuZl9mbG93X3RhYmxlYCBpcyBjb21waWxlZCwgbGlua2VkLCBhbmQgcG9zc2libHkgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBgbmV0L25ldGZpbHRlci9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQmIzM5O3MgaW4gaXRzIE1ha2VmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgYnVpbGQgcHJvY2VzcyB3aWxsIGlsbHVtaW5hdGUgaXRzIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkIGZsYWdzLCBhbmQgb3ZlcmFsbCByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGF0IE1ha2VmaWxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGUtb2JqcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQyPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvZGUgcG9pbnRzIHRvIHRoZSBtYW5kYXRvcnkgcmVxdWlyZW1lbnQgb2YgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gVGhhdCYjMzk7cyB0aGUgY29yZSwgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5nLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgdGhhbiBqdXN0IHRoYXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IGBuZl9mbG93X3RhYmxlX2luZXQub2A/IElzIGl0IGFsc28gbmVjZXNzYXJ5PyBUaGUgZGVwZW5kZW5jeSB0cmVlIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0aGUgYXNzb2NpYXRlZCBtb2R1bGVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgaW1wbGljaXRseSBidWlsdCB3aXRoIHRoYXQsIG9yIGlmIGl0IHJlcXVpcmVzIGl0cyBvd24gZXhwbGljaXQgY2FsbCwgb3IgaXQgbWF5IG5lZWQgb3RoZXIgb3B0aW9ucy4gVGltZSB0byBhbmFseXplIHRoZSBidWlsZCBzeXN0ZW0gbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfaW5ldFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLCBJIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCYjMzk7cyBqdW1waW5nIHRvIG15IG1pbmQgaXMgYWJvdXQgYG5mdF9mbG93X29mZmxvYWQub2AuIElzIHRoaXMgbW9kdWxlJiMzOTtzIGluY2x1c2lvbiBhbHNvIGVzc2VudGlhbCBvciB0aWVkIHRvIHNwZWNpZmljIGZlYXR1cmVzIEkgYW0gdXNpbmc/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZmxvdyB0YWJsZSBhbmQgdGhlIG9mZmxvYWQgY29tcG9uZW50OyBkbyB0aGV5IGJvdGggbmVlZCB0byBiZSBwcmVzZW50IGFuZCBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbCBmb3IgdGhpbmdzIHRvIGZ1bmN0aW9uIHByb3Blcmx5PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVx0XHQmIzQzOz0gbmZ0X2N0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVx0JiM0Mzs9IG5mdF9mbG93X29mZmxvYWQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcdFx0JiM0Mzs9IG5mdF9saW1pdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTMzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEkmIzM5O20gd29ya2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE5GVGFibGVzIEZsb3cgT2ZmbG9hZCBEZXBlbmRlbmNpZXMgaW4gQnJpZGdlIENvZGUqKgoKQWxyaWdodCwgdGhlIHN5c3RlbSYjMzk7cyB0ZWxsaW5nIG1lIHRoYXQgYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYCBpcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQgaGVyZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgYnJpZGdlIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGVsdmUgaW50byBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgYW5kIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHM7IHRoZXkmIzM5O3JlIHRoZSBjb3JlIG9mIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSBhbmQgVkxBTiBoYW5kbGluZyByZXNwZWN0aXZlbHksIHNvIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gZmluZCB0aGUgaW50ZWdyYXRpb24sIG9yIGxhY2sgdGhlcmVvZiwgd2l0aCBuZnRhYmxlcyBvZmZsb2FkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIGluIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZSwgb3Igd2hldGhlciB0aGVyZSBuZWVkcyB0byBiZSBhIGhvb2sgYWRkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2RldmljZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0JSSURHRSkgJiM0Mzs9IGJyaWRnZS5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTctXG5uZXQvYnJpZGdlL01ha2VmaWxlOjg6YnJpZGdlLXlcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxubmV0L2JyaWRnZS9NYWtlZmlsZS05LVx0XHRcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0JSSURHRWAgaXMgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBoZXJlLiBUaGF0JiMzOTtzIGhhcmRseSBzdXJwcmlzaW5nLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJyaWRnaW5nIGFmdGVyIGFsbC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWluZyBlbmFibGVkLgoKTm93LCB3aGF0IGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgYnJfdmxhbi5jYD8gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIG1vZHVsZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgYnJpZGdpbmcgZnJhbWV3b3JrLiBJcyBpdCBhIGNvcmUgY29tcG9uZW50PyBBIHN1cHBvcnRpbmcgbW9kdWxlPyBBcmUgdGhlcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX3ZsYW5cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZT0yMT1icmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIzOmJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQnJpZGdlZCBWTEFOIEZpbHRlcmluZyAtIERpZ2dpbmcgRGVlcGVyKioKClJpZ2h0LCBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyB3b3JraW5nIHVuZGVyIHRoZSBob29kLCBwYXJ0aWN1bGFybHkgaG93IHRoZSBrZXJuZWwgZGV0ZXJtaW5lcyBpZiBhIHBhY2tldCBzaG91bGQgYmUgYnJpZGdlZCB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQuIE15IGluc3RpbmN0cyB0ZWxsIG1lIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzIGluIHNvbWV0aGluZyBsaWtlIHRoZSBkZXZpY2UgcGF0aCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbS4KCkxldCYjMzk7cyBkaXZlIGludG8gYGRldl9maWxsX2JyaWRnZV9wYXRoYCB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl04oCZcyByZXNwb25zaWJsZSBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwYXRoIGEgcGFja2V0IHRha2VzIHRocm91Z2ggdGhlIGJyaWRnaW5nIGluZnJhc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHBhdGgtYnVpbGRpbmcgaW50ZXJhY3RzIHdpdGggVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZC4gVGhpcyBzaG91bGQgZXhwb3NlIHRoZSBjcnVjaWFsIGRlY2lzaW9uIHBvaW50cyBhbmQgZmlsdGVyaW5nIHJ1bGVzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaG93IHRoZSBWTEFOIHRhZyBpcyBjb25zaWRlcmVkIGR1cmluZyBwYXRoIGRldGVybWluYXRpb24gYW5kIHdoZXRoZXIgaXTigJlzIHVzZWQgaW4gZmlsdGVyaW5nIHBhY2tldHMgZGVzdGluZWQgZm9yIHRoZSBicmlkZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzUzPXN0YXRpYyBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc4Ni1cbm5ldC9jb3JlL2Rldi5jOjc4NzppbnQgZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9jb3JlL2Rldi5jLTc4OC1cdFx0XHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtODE1LX1cbm5ldC9jb3JlL2Rldi5jOjgxNjpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9icmlkZ2VfcGF0aCk7XG5uZXQvY29yZS9kZXYuYy04MTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTE3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gRmxvdyBPZmZsb2FkIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGRvZXMgdGhlIG1hZ2ljIHJlYWxseSBiZWdpbiBmb3IgdGhlIGZsb3cgb2ZmbG9hZCBicmlkZ2UgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiBob3cgdGhpcyB0aGluZyBnZXRzIGluaXRpYWxpemVkLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBpcyB0aGUgZnVuY3Rpb24gdG8gZXhhbWluZS4gU3BlY2lmaWNhbGx5LCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBiZSBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgIGZpbGUuIFRpbWUgdG8gZGlnIGluIHRoZXJlIGFuZCBzZWUgaG93IHRoZSBicmlkZ2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIHJlc291cmNlcyBhcmUgc2V0dXAgZm9yIHRoZSBmbG93IG9mZmxvYWQgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIGFyZSBob29rZWQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zNTU9c3RhdGljIGludCBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQxOC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDE5OmludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDIwLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NzctfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0Nzg6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGUsIHRoaW5raW5nIG91dCBsb3VkOgoKKipEaXZpbmcgaW50byBuZl9mbG93X3J1bGVfYnJpZGdlKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmZfZmxvd19ydWxlX2JyaWRnZWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSYjMzk7cyByb2xlIGluIHRoZSBvZmZsb2FkIHBhdGguIFNpbmNlIGl0JiMzOTtzIGJyaWRnZS1yZWxhdGVkLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFja2V0IHRyYXZlcnNlcyBhIGJyaWRnZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHJ1bGUgY3JlYXRpb24sIG1hdGNoaW5nLCBhbmQgZXZpY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgYnJpZGdlZCBlbnZpcm9ubWVudC4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGJyaWRnZSBuZXRkZXZpY2Ugc3RydWN0dXJlLCBhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHBhY2tldHMgZ2V0IGZvcndhcmRlZCB0aHJvdWdoIHRoZSBmbG93IHRhYmxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGFuZCBob3cgdGhlIGJyaWRnZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiAobGlrZSBWTEFOIElEcyBvciBNQUMgYWRkcmVzc2VzKSBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgZmxvdyBrZXkgYW5kIHJ1bGUgbWF0Y2hpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIHJlYWR5IHRvIHRyYWNlIGhvdyB0aGUgcGFja2V0cyBhcmUgZ2V0dGluZyBwdW50ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZS4gSSYjMzk7bSBnb2luZyB0byB3YXRjaCB0aGUgZGF0YSBwYXRoIGNsb3NlbHkuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaG9va3Mgb3IgY2FsbGJhY2tzIHRvIHRoZSBicmlkZ2UgZHJpdmVyIGl0c2VsZj8gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY2FsbGJhY2tzIGFyZSBkb2luZyBhbmQgd2hlcmUgdGhleSYjMzk7cmUgaW52b2tlZC4gQW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIEFQSSBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaGFyZHdhcmUgYW5kIHRoZSBzb2Z0d2FyZSBpcywgYW5kIGhvdyBpdCBpcyBlbmZvcmNlZC4gRmluYWxseSwgbGV0JiMzOTtzIGZpbmQgdGhlIHBsYWNlcyB3aGVyZSB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIG1heWJlIHRoZSBkZXZpY2UgZHJpdmVycyYjMzk7IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3J1bGVfYnJpZGdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc0Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzQzOmludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzQ0LVx0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3NTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX2JyaWRnZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGlzOiBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgLCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCwgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgLCBhbmQgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGAgYmVjYXVzZSBJIGtub3cgdGhlc2Ugd2VyZSByZWNlbnRseSBtb2RpZmllZCwgaW5jcmVhc2luZyB0aGUgbGlrZWxpaG9vZCBvZiBpbnRlcmVzdGluZyBiZWhhdmlvci4KCkkmIzM5O20gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBmdW5jdGlvbnMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcyB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBhY2N1cmF0ZS4gYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZGVmaW5pdGVseSBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AsIGp1c3QgYXMgSSB0aG91Z2h0LiBJIGNhbiBjb25maXJtIGBicl9maWxsX2ZvcndhcmRfcGF0aGAgcmVzaWRlcyBpbiBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgYW5kIGBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWRgIGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIEFsbCBjaGVja3MgYXJlIGdvb2QuCgpOb3csIGZvciB0aGUgY29uZmlndXJhdGlvbnMsIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZXNlIGluIHBsYWNlIHdoZW4gdGVzdGluZzogYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLCBgQlJJREdFYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9GTE9XX1RBQkxFX0lORVRgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgdGFzazoKCioqRGVwZW5kZW5jaWVzIENoZWNrIGZvciBgTkZUX0ZMT1dfT0ZGTE9BRGAqKgoKUmlnaHQsIHNvIGBORlRfRkxPV19PRkZMT0FEYC4gVGhhdCYjMzk7cyBhIGtleSBmZWF0dXJlLCBhbmQgYmVmb3JlIEkgc3RhcnQgZG9pbmcgYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIHVuZGVybHlpbmcgcGllY2VzIGFyZSBpbiBwbGFjZS4gTm8gc2Vuc2Ugd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBhIGJ1aWxkIGxhdGVyIGlmIEkgY2FuIHByb2FjdGl2ZWx5IGlkZW50aWZ5IGFueSBtaXNzaW5nIGxpbmtzLiBUaGlzIG1lYW5zIGEgdGhvcm91Z2ggY2hlY2sgb2YgYWxsIGRlcGVuZGVuY2llcyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY29tcG9uZW50cyBgTkZUX0ZMT1dfT0ZGTE9BRGAgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBjb21waWxpbmc7IGl0JiMzOTtzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IgYW5kIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgcGxheXMgbmljZWx5IHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUsIGRvY3VtZW50YXRpb24sIGFuZCBtYXliZSBldmVuIHNvbWUgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipORl9GTE9XX1RBQkxFIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBORl9GTE9XX1RBQkxFYC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyB0b28gZWFzeSB0byBtYWtlIGEgY2hhbmdlIGhlcmUgYW5kIGJyZWFrIHNvbWV0aGluZyB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHdpdGhvdXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuCgpMZXQmIzM5O3Mgc2Vl4oCmIHdoYXQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgcmVseSBvbiB0aGlzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgcGVyaGFwcyBuZXRmaWx0ZXIgbW9kdWxlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHVzZXItc3BhY2UgaW50ZXJmYWNlcyB0aGF0IGFyZSBsaW5rZWQgdG8gdGhpcyB0YWJsZT8gSSBuZWVkIHRvIGxvb2sgZm9yIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0byBmaW5kIHJlZmVyZW5jZXMgYW5kIHRoZW4gbW92ZSB0byBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIHdpdGggbmV0ZmlsdGVyIGludGVybmFscy4gR290dGEgYmUgbWV0aG9kaWNhbCBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVx0Ym9vbCBcJiMzNDtTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIGEgY29uY2lzZSBzdW1tYXJ5IGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6CgoqKkluaXRpYWwgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gaW5pdGlhbGx5IHplcm9pbmcgaW4gb24gdGhlIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiBJJiMzOTttIG5vdGluZyB0aGUgcHJlc2VuY2Ugb2YgYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGZsb3cgdGFibGUgYW5kIG9mZmxvYWQgY2FwYWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSB2ZXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgbG9naWNhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZz0zNj1jb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIGFuZCB0aGlua2luZyBhbG9uZyB0aGVzZSBsaW5lczoKCioqQ2hlY2tpbmcgYEJSSURHRWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBvZiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgYEJSSURHRWAgc3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGltcGFjdHMsIGlkZW50aWZ5aW5nIGFueSBsdXJraW5nIGNvbmZsaWN0cywgb3IgcGlucG9pbnRpbmcgYXJlYXMgd2hlcmUgd2UgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB1cHN0cmVhbSBjaGFuZ2VzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZvdW5kYXRpb25zIGFyZSBzb2xpZC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgd2Ugc3RhbmQsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgQlJJREdFYCBzeXN0ZW0gYmVmb3JlIEkgbW92ZSBvbi4gV2hhdCBkb2VzIHRoZSBkZXBlbmRlbmN5IHRyZWUgbG9vayBsaWtlPyBBcmUgd2UgcmVseWluZyBvbiBhbnkgbGlicmFyaWVzIHRoYXQgYXJlIGtub3duIHBhaW4gcG9pbnRzLCBvciB0aGF0IGFyZSBhYm91dCB0byByZWFjaCBlbmQtb2YtbGlmZT8gQSBxdWljayBkZXBlbmRlbmN5IGF1ZGl0IGlzIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA5CgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCcmlkZ2UgU3VwcG9ydCBmb3IgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGJyaWRnZSBzdXBwb3J0IGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgQlJJREdFYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvYnJpZGdlL0tjb25maWdgLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBmdW5jdGlvbmFsaXRpZXMgYW5kIGludGVncmF0aW9uIHdpdGggdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4KCk15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgLCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCwgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgLCBgYnJfZmlsbF9mb3J3YXJkX3BhdGhgLCBhbmQgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGAuIExldCYjMzk7cyB2ZXJpZnkgdGhhdCBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IGFoLCB5ZXMsIGl0IGlzLiBJdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGluY2x1ZGUgaXQgd2l0aGluIHRoZSBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBkZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBieSBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYC4gVGhlbiwgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgY2FsbGVkIGJ5IGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgLiBGaW5hbGx5LCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBpcyBpbnZva2VkIGJ5IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHNwZWNpZmljYWxseSB3aGVuIHRoZSByb3V0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQsIG9yIHJhdGhlciwgd2hlbiBgZmxvd3RhYmxlLSZndDt0eXBlLSZndDtmYW1pbHkgPT0gTkZQUk9UT19CUklER0VgLiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpcyB0aGUgZXZhbHVhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBuZnRfZmxvd19vZmZsb2FkYCBleHByZXNzaW9uLCB3aGljaCBpcyB1c2VkIHdpdGhpbiBuZnRhYmxlcy4KClNvLCB0aGUgY29kZSBpcyByZWFjaGFibGUsIGFuZCBpdCYjMzk7cyBmdW5jdGlvbmFsLiBUaGF0IG1lYW5zIGl0IGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhlIGJyaWRnZS1uZXRmaWx0ZXIgaW50ZXJhY3Rpb24gYW5kIGNhbiBiZSB0ZXN0ZWQuCgpMZXQmIzM5O3MgcHJlcGFyZSB0aGUgb3V0cHV0LiBUaGUgZnV6emluZyB0YXJnZXQgaXMgZGVmaW5pdGVseSB3b3J0aHdoaWxlLgoKSGVyZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSB0YXJnZXRpbmc6CiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgCiogICBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YAoqICAgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAKKiAgIGBuZl9mbG93X3J1bGVfYnJpZGdlYAoqICAgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYAoqICAgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGAKCkFuZCBoZXJlIGFyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZToKKiAgIGBORl9GTE9XX1RBQkxFYAoqICAgYE5GX0ZMT1dfVEFCTEVfSU5FVGAKKiAgIGBORlRfRkxPV19PRkZMT0FEYAoqICAgYEJSSURHRWAKKiAgIGBCUklER0VfVkxBTl9GSUxURVJJTkdgCgpNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBicmlkZ2UgdHJhZmZpYyBpbnRlcmFjdHMgd2l0aCBuZXRmaWx0ZXImIzM5O3MgZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbXBsZW1lbnRpbmcgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIHdpdGhpbiB0aGUgZmxvdyBvZmZsb2FkIGZyYW1ld29yaywgY291cGxlZCB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgYnJpZGdlIGZvcndhcmRpbmcgcGF0aCBmdW5jdGlvbnMuIEdpdmVuIHRoaXMgbGV2ZWwgb2YgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtIG1vZGlmaWNhdGlvbnMsIGNvbWJpbmVkIHdpdGggaXRzIGRpcmVjdCBhY2Nlc3NpYmlsaXR5IHZpYSBuZnRhYmxlcyBhbmQgcmVsZXZhbnQgYnJpZGdlIGNvbmZpZ3VyYXRpb25zLCB0aGlzIG1ha2VzIGl0IGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIHRob3JvdWdoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZmlsbF9icmlkZ2VfcGF0aCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfYnJpZGdlX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9icmlkZ2UmIzM0OywKICAgICYjMzQ7YnJfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2X2ZpbGxfYnJpZGdlX3BhdGgmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2JyaWRnZV9pbml0JiMzNDssCiAgICAmIzM0O25mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfYnJpZGdlJiMzNDssCiAgICAmIzM0O2JyX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJyaWRnZSBzdXBwb3J0IGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgdG8gaGFuZGxlIGJyaWRnZSBwYXRocyBpbiBmbG93IG9mZmxvYWQgYW5kIG1vZGlmaWVzIGV4aXN0aW5nIGJyaWRnZSBmb3J3YXJkIHBhdGggZnVuY3Rpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIGFuZCBicmlkZ2UgY29uZmlndXJhdGlvbiwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDoyNC40NTMxOTkyNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk5MTE0ODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfYnJpZGdlX3BhdGhcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdFwiLFxuICAgIFwibmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfYnJpZGdlXCIsXG4gICAgXCJicl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgaW4gZmxvdyBvZmZsb2FkIGFuZCBtb2RpZmllcyBleGlzdGluZyBicmlkZ2UgZm9yd2FyZCBwYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBhbmQgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDoyNC40NTMyMDUwODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTU3ODcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyMDVhNTI1YWQwY2Q2ZDQ0MTBkYTBjMzkxNWQzZTNjYWRiMTVkZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNjozMDoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5mZGVlNDQ2NWQ2MTI2MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0zNDIwLDYgKzM0MjAsOCBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTtcXG4gXFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbmluZGV4IDdiMjNiMjQ1YTVhODZhLi5hMTA5ZWRhNTI1MGM3OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbkBAIC0zMDUsNiArMzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gdm9pZCBmbG93X29mZmxvYWRfcm91dGVfaW5pdChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSk7XFxuIFxcbitpbnQgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpO1xcbitcXG4gaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuIHZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBib29sIGZvcmNlKTtcXG5AQCAtMzY4LDYgKzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTtcXG4gaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdGVudW0gZmxvd19ibG9ja19jb21tYW5kIGNtZCk7XFxuK2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4rXFx0XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4rXFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKTtcXG4gaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0XFx0XFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpO1xcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbmluZGV4IGU3ZjM0M2FiMjJkMzc5Li44OWY0NTI1YTcyNzlkNiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbkBAIC0zODUsMTYgKzM4NSwyNSBAQCBzdGF0aWMgaW50IGJyX2RlbF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KVxcbiBzdGF0aWMgaW50IGJyX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc3JjLCAqZHN0O1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmY7XFxuLVxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKmRzdDtcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xcbiBcXG4tXFx0aWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KGN0eC1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoY3R4LVxcdTAwM2VkZXYpKSB7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXY7XFxuK1xcbitcXHRcXHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KChzdHJ1Y3QgbmV0X2RldmljZSAqKWN0eC1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0aWYgKCFicl9kZXYpXFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRzcmMgPSBicl9wb3J0X2dldF9yY3UoY3R4LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRiciA9IG5ldGRldl9wcml2KGJyX2Rldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNyYyA9IE5VTEw7XFxuK1xcdFxcdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVxcdTAwM2VkZXYpO1xcbitcXHR9XFxuIFxcbi1cXHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIGN0eCwgcGF0aCk7XFxuK1xcdGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChiciwgc3JjLCBjdHgsIHBhdGgpO1xcbiBcXG4gXFx0ZiA9IGJyX2ZkYl9maW5kX3JjdShiciwgY3R4LVxcdTAwM2VkYWRkciwgcGF0aC1cXHUwMDNlYnJpZGdlLnZsYW5faWQpO1xcbiBcXHRpZiAoIWYpXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkNTVlYTk1MTZlM2UzNi4uMDBmNWI3MmZmNDJkZWEgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxcbkBAIC0xNjMwLDYgKzE2MzAsNyBAQCBib29sIGJyX3ZsYW5fY2FuX2VudGVyX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3VycixcXG4gXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpyYW5nZV9lbmQpO1xcbiBcXG4gdm9pZCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKTtcXG4gaW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuQEAgLTE3OTksNiArMTgwMCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5icF9nZXRfbnVtX3ZsYW5faW5mb3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbmluZGV4IDU1NjBhZmNhYWNhMzI3Li43MTUzMTQ5OWJjNzM1NiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXFxuQEAgLTE0NTAsNiArMTQ1MCw3IEBAIGludCBicl92bGFuX2dldF9wdmlkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgKnBfcHZpZClcXG4gRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9nZXRfcHZpZF9yY3UpO1xcbiBcXG4gdm9pZCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbiB7XFxuQEAgLTE0NjIsNyArMTQ2MywxMCBAQCB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9FTkFCTEVEKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0dmcgPSBicl92bGFuX2dyb3VwX3JjdShicik7XFxuK1xcdGlmIChwKVxcbitcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcXG4gXFxuIFxcdGlmIChpZHggXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgY3R4LVxcdTAwM2V2bGFuW2lkeF0ucHJvdG8gPT0gYnItXFx1MDAzZXZsYW5fcHJvdG8pIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5mNjY4NWMxZTQ3ODYwMSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTc1MCw0NCArNzUwLDg0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIFxcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhba107XFxuIH1cXG4gXFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbitzdGF0aWMgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5kZXZcXHQ9IGRldixcXG4tXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xcbi1cXHRzdGFjay1cXHUwMDNlbnVtX3BhdGhzID0gMDtcXG4tXFx0d2hpbGUgKGN0eC5kZXYgXFx1MDAyNlxcdTAwMjYgY3R4LmRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XFxuLVxcdFxcdGxhc3RfZGV2ID0gY3R4LmRldjtcXG4rXFx0d2hpbGUgKGN0eC1cXHUwMDNlZGV2IFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcXG4rXFx0XFx0bGFzdF9kZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4gXFx0XFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuIFxcdFxcdGlmICghcGF0aClcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0XFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XFxuLVxcdFxcdHJldCA9IGN0eC5kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBwYXRoKTtcXG4rXFx0XFx0cmV0ID0gY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXFx1MDAzZWRldikpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjdHguZGV2KVxcbitcXHRpZiAoIWN0eC1cXHUwMDNlZGV2KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuIFxcdGlmICghcGF0aClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRwYXRoLVxcdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XFxuLVxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC5kZXY7XFxuK1xcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitcXG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXYsICpicl9kZXY7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuK1xcbitcXHRzdGFjay1cXHUwMDNlbnVtX3BhdGhzID0gMDtcXG4rXFxuK1xcdGlmICghY3R4LVxcdTAwM2VkZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9wb3J0KGN0eC1cXHUwMDNlZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0YnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtXFx1MDAzZWRldik7XFxuK1xcdGlmICghYnJfZGV2IHx8ICFicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0bGFzdF9kZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuK1xcdGlmICghcGF0aClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XFxuK1xcdGlmIChicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKCFjdHgtXFx1MDAzZWRldiB8fCBXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVxcdTAwM2VkZXYpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihjdHgsIHN0YWNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9icmlkZ2VfcGF0aCk7XFxuK1xcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuK1xcdFxcdC5kZXZcXHQ9IGRldixcXG4rXFx0fTtcXG4rXFxuK1xcdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XFxuK1xcbitcXHRzdGFjay1cXHUwMDNlbnVtX3BhdGhzID0gMDtcXG4rXFxuK1xcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfY29tbW9uKFxcdTAwMjZjdHgsIHN0YWNrKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbiBcXG4gLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBhcyB3ZSBkb250IHRha2UgYSByZWZlcmVuY2UgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcXG5pbmRleCBiMGYxOTkxNzE5MzI0MS4uODBiMjM4MTk2ZjI5YjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmNcXG5AQCAtNjUsNiArNjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2JyaWRnZSA9IHtcXG4rXFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19CUklER0UsXFxuK1xcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxuK1xcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbitcXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfYnJpZGdlLFxcbitcXHQuZnJlZVxcdFxcdD0gbmZfZmxvd190YWJsZV9mcmVlLFxcbitcXHQuaG9va1xcdFxcdD0gbmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayxcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XFxuIFxcdC5mYW1pbHlcXHRcXHQ9IE5GUFJPVE9fSU5FVCxcXG4gXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5AQCAtOTcsNiArMTA3LDcgQEAgc3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfaW5ldF9tb2R1bGVfaW5pdCh2b2lkKVxcbiB7XFxuK1xcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XFxuIFxcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcXHUwMDI2Zmxvd3RhYmxlX2lwdjQpO1xcbiBcXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcXG4gXFx0bmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaW5ldCk7XFxuQEAgLTEwOSw2ICsxMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd19pbmV0X21vZHVsZV9leGl0KHZvaWQpXFxuIFxcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaW5ldCk7XFxuIFxcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaXB2Nik7XFxuIFxcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfaXB2NCk7XFxuK1xcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFxcdTAwMjZmbG93dGFibGVfYnJpZGdlKTtcXG4gfVxcbiBcXG4gbW9kdWxlX2luaXQobmZfZmxvd19pbmV0X21vZHVsZV9pbml0KTtcXG5AQCAtMTE4LDUgKzEzMCw2IEBAIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUGFibG8gTmVpcmEgQXl1c28gXFx1MDAzY3BhYmxvQG5ldGZpbHRlci5vcmdcXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVCk7XFxuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVDYpO1xcbitNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKEFGX0JSSURHRSk7XFxuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoMSk7IC8qIE5GUFJPVE9fSU5FVCAqL1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5pbmRleCAwMDJlYzE1ZDk4OGJkYi4uNTU2NmViZGE3YjdkMzAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5AQCAtNzQwLDYgKzc0MCwxOSBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4rXFx0XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4rXFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbit7XFxuK1xcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zmxvd19vZmZsb2FkX3JlZGlyZWN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX2JyaWRnZSk7XFxuK1xcbiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbiBcXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG5pbmRleCA5OGMwM2I0ODdmNTIxMS4uMmRlYjhlNGQ1MzI4YjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRsaW5rLmhcXHUwMDNlXFxuQEAgLTM1MCwzICszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRyZXR1cm4gLUVOT0VOVDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XFxuK1xcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpzcmNfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRzdF9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyICpzcmNfaGEsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyICpkc3RfaGEpXFxuK3tcXG4rXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdGggPSBmbG93LVxcdTAwM2V0dXBsZWhhc2g7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHt9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xcbitcXHRzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyBpbmZvID0ge307XFxuK1xcdGludCBpLCBqID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IHRoW2Rpcl0udHVwbGUuZW5jYXBfbnVtIC0gMTsgaSBcXHUwMDNlPSAwIDsgaS0tKSB7XFxuK1xcdFxcdGlmIChpbmZvLm51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdFxcdGlmICh0aFtkaXJdLnR1cGxlLmluX3ZsYW5faW5ncmVzcyBcXHUwMDI2IEJJVChpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpbmZvLmVuY2FwW2luZm8ubnVtX2VuY2Fwc10uaWQgPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLmlkO1xcbitcXHRcXHRpbmZvLmVuY2FwW2luZm8ubnVtX2VuY2Fwc10ucHJvdG8gPSB0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvO1xcbitcXHRcXHRpbmZvLm51bV9lbmNhcHMrKztcXG4rXFxuK1xcdFxcdGlmICh0aFtkaXJdLnR1cGxlLmVuY2FwW2ldLnByb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmIChjdHgubnVtX3ZsYW5zIFxcdTAwM2U9IE5FVF9ERVZJQ0VfUEFUSF9WTEFOX01BWClcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRjdHgudmxhbltjdHgubnVtX3ZsYW5zXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7XFxuK1xcdFxcdGN0eC52bGFuW2N0eC5udW1fdmxhbnNdLnByb3RvID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90bztcXG4rXFx0XFx0Y3R4Lm51bV92bGFucysrO1xcbitcXHR9XFxuK1xcdGN0eC5kZXYgPSBzcmNfZGV2O1xcbitcXHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBkc3RfaGEpO1xcbitcXG4rXFx0aWYgKGRldl9maWxsX2JyaWRnZV9wYXRoKFxcdTAwMjZjdHgsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRuZnRfZGV2X3BhdGhfaW5mbyhcXHUwMDI2c3RhY2ssIFxcdTAwMjZpbmZvLCBkc3RfaGEsIFxcdTAwMjZmdC1cXHUwMDNlZGF0YSk7XFxuK1xcbitcXHRpZiAoIWluZm8uaW5kZXYgfHwgaW5mby5pbmRldiAhPSBkc3RfZGV2KVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHR0aFshZGlyXS50dXBsZS5paWZpZHggPSBpbmZvLmluZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXHRmb3IgKGkgPSBpbmZvLm51bV9lbmNhcHMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSkge1xcbitcXHRcXHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XFxuK1xcdFxcdHRoWyFkaXJdLnR1cGxlLmVuY2FwW2pdLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcXG4rXFx0XFx0aWYgKGluZm8uaW5ncmVzc192bGFucyBcXHUwMDI2IEJJVChpKSlcXG4rXFx0XFx0XFx0dGhbIWRpcl0udHVwbGUuaW5fdmxhbl9pbmdyZXNzIHw9IEJJVChqKTtcXG4rXFx0XFx0aisrO1xcbitcXHR9XFxuK1xcdHRoWyFkaXJdLnR1cGxlLmVuY2FwX251bSA9IGluZm8ubnVtX2VuY2FwcztcXG4rXFxuK1xcdHRoW2Rpcl0udHVwbGUubXR1ID0gZHN0X2Rldi1cXHUwMDNlbXR1O1xcbitcXHRldGhlcl9hZGRyX2NvcHkodGhbZGlyXS50dXBsZS5vdXQuaF9zb3VyY2UsIHNyY19oYSk7XFxuK1xcdGV0aGVyX2FkZHJfY29weSh0aFtkaXJdLnR1cGxlLm91dC5oX2Rlc3QsIGRzdF9oYSk7XFxuK1xcdHRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdHRoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2LCAqb3V0X2RldjtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoID0gZXRoX2hkcihwa3QtXFx1MDAzZXNrYik7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlO1xcbitcXHRpbnQgZXJyLCBpID0gMDtcXG4rXFxuK1xcdGluX2RldiA9IG5mdF9pbihwa3QpO1xcbitcXHRpZiAoIWluX2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihpbl9kZXYsIGZ0KSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0b3V0X2RldiA9IG5mdF9vdXQocGt0KTtcXG4rXFx0aWYgKCFvdXRfZGV2IHx8ICFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KG91dF9kZXYsIGZ0KSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0dHVwbGUgPSAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcXG4rXFxuK1xcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChwa3QtXFx1MDAzZXNrYikpIHtcXG4rXFx0XFx0dHVwbGUtXFx1MDAzZWVuY2FwW2ldLmlkID0gc2tiX3ZsYW5fdGFnX2dldChwa3QtXFx1MDAzZXNrYik7XFxuK1xcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5wcm90byA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2V2bGFuX3Byb3RvO1xcbitcXHRcXHRpKys7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZXRoX2hkcihwa3QtXFx1MDAzZXNrYiktXFx1MDAzZWhfcHJvdG8pIHtcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF84MDIxUSk6IHtcXG4rXFx0XFx0c3RydWN0IHZsYW5faGRyICp2aGRyID0gKHN0cnVjdCB2bGFuX2hkciAqKShza2JfbWFjX2hlYWRlcihwa3QtXFx1MDAzZXNrYilcXG4rXFx0XFx0XFx0XFx0XFx0ICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcXG4rXFx0XFx0dHVwbGUtXFx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmhkci1cXHUwMDNlaF92bGFuX1RDSSk7XFxuK1xcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTtcXG4rXFx0XFx0aSsrO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOiB7XFxuK1xcdFxcdHN0cnVjdCBwcHBvZV9oZHIgKnBoZHIgPSAoc3RydWN0IHBwcG9lX2hkciAqKShza2JfbWFjX2hlYWRlcihwa3QtXFx1MDAzZXNrYilcXG4rXFx0XFx0XFx0XFx0XFx0ICArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XFxuK1xcbitcXHRcXHR0dXBsZS1cXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVxcdTAwM2VzaWQpO1xcbitcXHRcXHR0dXBsZS1cXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBodG9ucyhFVEhfUF9QUFBfU0VTKTtcXG4rXFx0XFx0aSsrO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHR9XFxuK1xcdHR1cGxlLVxcdTAwM2VlbmNhcF9udW0gPSBpO1xcbitcXG4rXFx0ZXJyID0gbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKGZsb3csIGZ0LCAhZGlyLCBvdXRfZGV2LCBpbl9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBldGgtXFx1MDAzZWhfZGVzdCwgZXRoLVxcdTAwM2VoX3NvdXJjZSk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKGZsb3csIGZ0LCBkaXIsIGluX2Rldiwgb3V0X2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGV0aC1cXHUwMDNlaF9zb3VyY2UsIGV0aC1cXHUwMDNlaF9kZXN0KTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXFxuaW5kZXggMzJiNDI4MTAzOGRkMzUuLjFhNWVlZjQ2ZjkyMmQwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG5AQCAtNTMsMTMgKzUzLDE0IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbiBcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VkYXRhO1xcbitcXHRib29sIHJvdXRpbmcgPSBmbG93dGFibGUtXFx1MDAzZXR5cGUtXFx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRTtcXG4gXFx0c3RydWN0IHRjcGhkciBfdGNwaCwgKnRjcGggPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSByb3V0ZSA9IHt9O1xcbiBcXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcXG4gXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4gXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcXG4gXFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0LCB0aG9mZjtcXG4gXFxuIFxcdGlmIChuZnRfZmxvd19vZmZsb2FkX3NraXAocGt0LVxcdTAwM2Vza2IsIG5mdF9wZihwa3QpKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTcwLDggKzcxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcbiBcXHRzd2l0Y2ggKGN0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pIHtcXG4gXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4tXFx0XFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXFx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXFxuLVxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKF90Y3BoKSwgXFx1MDAyNl90Y3BoKTtcXG4rXFx0XFx0dGhvZmYgPSBuZnRfdGhvZmYocGt0KTtcXG4rXFx0XFx0aWYgKHRob2ZmID09IDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cXHUwMDNlc2tiLCB0aG9mZiwgc2l6ZW9mKF90Y3BoKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2X3RjcGgpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cXHUwMDNlZmluIHx8IHRjcGgtXFx1MDAzZXJzdCB8fFxcbiBcXHRcXHRcXHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0xMDYsMTQgKzExMCwyMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcXG4tXFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG4rXFx0aWYgKHJvdXRpbmcpIHtcXG4rXFx0XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG4rXFx0fVxcbiBcXG4gXFx0ZmxvdyA9IGZsb3dfb2ZmbG9hZF9hbGxvYyhjdCk7XFxuIFxcdGlmICghZmxvdylcXG4gXFx0XFx0Z290byBlcnJfZmxvd19hbGxvYztcXG4gXFxuLVxcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFxcdTAwMjZyb3V0ZSk7XFxuK1xcdGlmIChyb3V0aW5nKVxcbitcXHRcXHRmbG93X29mZmxvYWRfcm91dGVfaW5pdChmbG93LCBcXHUwMDI2cm91dGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlmIChmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoZmxvdywgcGt0LCBkaXIsIHByaXYtXFx1MDAzZWZsb3d0YWJsZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9mbG93X2FkZDtcXG4rXFxuIFxcdGlmICh0Y3BoKVxcbiBcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gXFxuQEAgLTEyNyw4ICsxMzgsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4gZXJyX2Zsb3dfYWRkOlxcbiBcXHRmbG93X29mZmxvYWRfZnJlZShmbG93KTtcXG4gZXJyX2Zsb3dfYWxsb2M6XFxuLVxcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTtcXG4tXFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcXG4rXFx0aWYgKHJvdXRpbmcpIHtcXG4rXFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xcbitcXHRcXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xcbitcXHR9XFxuIGVycl9mbG93X3JvdXRlOlxcbiBcXHRjbGVhcl9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cyk7XFxuIG91dDpcXG5AQCAtMTQyLDcgKzE1NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fSVBWNCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JUFY2IFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBjdHgtXFx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXFxuK1xcdCAgICBjdHgtXFx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGN0eC1cXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fQlJJREdFKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cXHUwMDNlY2hhaW4sIGhvb2tfbWFzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjI1LjE2Mzc1MTgzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyODA1ODYxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJmbG93X29mZmxvYWRfYnJpZGdlX2luaXRcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aFwiLFxuICAgIFwibmZfZmxvd19ydWxlX2JyaWRnZVwiLFxuICAgIFwiYnJfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcImJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjA1YTUyNWFkMGNkNmQ0NDEwZGEwYzM5MTVkM2UzY2FkYjE1ZGVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNjozMDoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZmRlZTQ0NjVkNjEyNjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzQyMCw2ICszNDIwLDggQEAgdm9pZCBkZXZfcmVtb3ZlX29mZmxvYWQoc3RydWN0IHBhY2tldF9vZmZsb2FkICpwbyk7XG4gXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4rXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IDdiMjNiMjQ1YTVhODZhLi5hMTA5ZWRhNTI1MGM3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbkBAIC0zMDUsNiArMzA1LDExIEBAIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiB2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpO1xuIFxuK2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0XHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7XG4rXG4gaW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG4gdm9pZCBmbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgYm9vbCBmb3JjZSk7XG5AQCAtMzY4LDYgKzM3Myw5IEBAIHZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKTtcbiBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRlbnVtIGZsb3dfYmxvY2tfY29tbWFuZCBjbWQpO1xuK2ludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbitcdFx0XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuK1x0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7XG4gaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbiBcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZTdmMzQzYWIyMmQzNzkuLjg5ZjQ1MjVhNzI3OWQ2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuQEAgLTM4NSwxNiArMzg1LDI1IEBAIHN0YXRpYyBpbnQgYnJfZGVsX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpXG4gc3RhdGljIGludCBicl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbiB7XG4rXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzcmMsICpkc3Q7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmY7XG4tXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3Q7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XG4gXG4tXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQoY3R4LVx1MDAzZWRldikpXG4tXHRcdHJldHVybiAtMTtcbitcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSkge1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2O1xuK1xuK1x0XHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KChzdHJ1Y3QgbmV0X2RldmljZSAqKWN0eC1cdTAwM2VkZXYpO1xuK1x0XHRpZiAoIWJyX2RldilcbitcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRiciA9IG5ldGRldl9wcml2KGN0eC1cdTAwM2VkZXYpO1xuK1x0XHRzcmMgPSBicl9wb3J0X2dldF9yY3UoY3R4LVx1MDAzZWRldik7XG4rXHRcdGJyID0gbmV0ZGV2X3ByaXYoYnJfZGV2KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNyYyA9IE5VTEw7XG4rXHRcdGJyID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4rXHR9XG4gXG4tXHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIGN0eCwgcGF0aCk7XG4rXHRicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWQoYnIsIHNyYywgY3R4LCBwYXRoKTtcbiBcbiBcdGYgPSBicl9mZGJfZmluZF9yY3UoYnIsIGN0eC1cdTAwM2VkYWRkciwgcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9pZCk7XG4gXHRpZiAoIWYpXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDU1ZWE5NTE2ZTNlMzYuLjAwZjViNzJmZjQyZGVhIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMTYzMCw2ICsxNjMwLDcgQEAgYm9vbCBicl92bGFuX2Nhbl9lbnRlcl9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpyYW5nZV9lbmQpO1xuIFxuIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCk7XG4gaW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5AQCAtMTc5OSw2ICsxODAwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbmJwX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuaW5kZXggNTU2MGFmY2FhY2EzMjcuLjcxNTMxNDk5YmM3MzU2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl92bGFuLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXG5AQCAtMTQ1MCw2ICsxNDUwLDcgQEAgaW50IGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiAqcF9wdmlkKVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KTtcbiBcbiB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4ge1xuQEAgLTE0NjIsNyArMTQ2MywxMCBAQCB2b2lkIGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xuK1x0aWYgKHApXG4rXHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuK1x0ZWxzZVxuK1x0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiBcbiBcdGlmIChpZHggXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGN0eC1cdTAwM2V2bGFuW2lkeF0ucHJvdG8gPT0gYnItXHUwMDNldmxhbl9wcm90bykge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5mNjY4NWMxZTQ3ODYwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc1MCw0NCArNzUwLDg0IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gXHRyZXR1cm4gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiB9XG4gXG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4tXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbitzdGF0aWMgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbitcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuLVx0XHQuZGV2XHQ9IGRldixcbi1cdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xuLVx0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbi1cdHdoaWxlIChjdHguZGV2IFx1MDAyNlx1MDAyNiBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4tXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbitcdHdoaWxlIChjdHgtXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4rXHRcdGxhc3RfZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRcdGlmICghcGF0aClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xuLVx0XHRyZXQgPSBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgcGF0aCk7XG4rXHRcdHJldCA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4rXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0aWYgKCFjdHguZGV2KVxuK1x0aWYgKCFjdHgtXHUwMDNlZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4gXHRcdHJldHVybiAtMTtcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUO1xuLVx0cGF0aC1cdTAwM2VkZXYgPSBjdHguZGV2O1xuK1x0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4raW50IGRldl9maWxsX2JyaWRnZV9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4rXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpsYXN0X2RldiwgKmJyX2RldjtcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4rXG4rXHRzdGFjay1cdTAwM2VudW1fcGF0aHMgPSAwO1xuK1xuK1x0aWYgKCFjdHgtXHUwMDNlZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfcG9ydChjdHgtXHUwMDNlZGV2KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0YnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdSgoc3RydWN0IG5ldF9kZXZpY2UgKiljdHgtXHUwMDNlZGV2KTtcbitcdGlmICghYnJfZGV2IHx8ICFicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGxhc3RfZGV2ID0gY3R4LVx1MDAzZWRldjtcbitcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuK1x0aWYgKCFwYXRoKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbitcdGlmIChicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKCFjdHgtXHUwMDNlZGV2IHx8IFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXHUwMDNlZGV2KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aF9jb21tb24oY3R4LCBzdGFjayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2JyaWRnZV9wYXRoKTtcbitcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbitcdFx0LmRldlx0PSBkZXYsXG4rXHR9O1xuK1xuK1x0bWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTtcbitcbitcdHN0YWNrLVx1MDAzZW51bV9wYXRocyA9IDA7XG4rXG4rXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihcdTAwMjZjdHgsIHN0YWNrKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbiAvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCksIGFzIHdlIGRvbnQgdGFrZSBhIHJlZmVyZW5jZSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jXG5pbmRleCBiMGYxOTkxNzE5MzI0MS4uODBiMjM4MTk2ZjI5YjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jXG5AQCAtNjUsNiArNjUsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9icmlkZ2UgPSB7XG4rXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19CUklER0UsXG4rXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbitcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbitcdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfYnJpZGdlLFxuK1x0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG4rXHQuaG9va1x0XHQ9IG5mX2Zsb3dfb2ZmbG9hZF9pbmV0X2hvb2ssXG4rXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbit9O1xuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG4gXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JTkVULFxuIFx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5AQCAtOTcsNiArMTA3LDcgQEAgc3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X2luZXRfbW9kdWxlX2luaXQodm9pZClcbiB7XG4rXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2JyaWRnZSk7XG4gXHRuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoXHUwMDI2Zmxvd3RhYmxlX2lwdjQpO1xuIFx0bmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcbiBcdG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShcdTAwMjZmbG93dGFibGVfaW5ldCk7XG5AQCAtMTA5LDYgKzEyMCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X2luZXRfbW9kdWxlX2V4aXQodm9pZClcbiBcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pbmV0KTtcbiBcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY2KTtcbiBcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9pcHY0KTtcbitcdG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKFx1MDAyNmZsb3d0YWJsZV9icmlkZ2UpO1xuIH1cbiBcbiBtb2R1bGVfaW5pdChuZl9mbG93X2luZXRfbW9kdWxlX2luaXQpO1xuQEAgLTExOCw1ICsxMzAsNiBAQCBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiUGFibG8gTmVpcmEgQXl1c28gXHUwMDNjcGFibG9AbmV0ZmlsdGVyLm9yZ1x1MDAzZVwiKTtcbiBNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKEFGX0lORVQpO1xuIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfSU5FVDYpO1xuK01PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoQUZfQlJJREdFKTtcbiBNT0RVTEVfQUxJQVNfTkZfRkxPV1RBQkxFKDEpOyAvKiBORlBST1RPX0lORVQgKi9cbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5pbmRleCAwMDJlYzE1ZDk4OGJkYi4uNTU2NmViZGE3YjdkMzAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5AQCAtNzQwLDYgKzc0MCwxOSBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgbmZfZmxvd19ydWxlX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4rXHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbitcdFx0XHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4re1xuK1x0aWYgKG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24obmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGZsb3dfb2ZmbG9hZF9yZWRpcmVjdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3J1bGVfYnJpZGdlKTtcbitcbiBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIFx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi4yZGViOGU0ZDUzMjhiMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuQEAgLTM1MCwzICszNTEsMTI4IEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbitcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCxcbitcdFx0XHRcdCAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpzcmNfZGV2LFxuK1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkc3RfZGV2LFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGNoYXIgKnNyY19oYSxcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBjaGFyICpkc3RfaGEpXG4re1xuK1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdGggPSBmbG93LVx1MDAzZXR1cGxlaGFzaDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHt9O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbitcdHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIGluZm8gPSB7fTtcbitcdGludCBpLCBqID0gMDtcbitcbitcdGZvciAoaSA9IHRoW2Rpcl0udHVwbGUuZW5jYXBfbnVtIC0gMTsgaSBcdTAwM2U9IDAgOyBpLS0pIHtcbitcdFx0aWYgKGluZm8ubnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0aWYgKHRoW2Rpcl0udHVwbGUuaW5fdmxhbl9pbmdyZXNzIFx1MDAyNiBCSVQoaSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGluZm8uZW5jYXBbaW5mby5udW1fZW5jYXBzXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7XG4rXHRcdGluZm8uZW5jYXBbaW5mby5udW1fZW5jYXBzXS5wcm90byA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0ucHJvdG87XG4rXHRcdGluZm8ubnVtX2VuY2FwcysrO1xuK1xuK1x0XHRpZiAodGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90byA9PSBodG9ucyhFVEhfUF9QUFBfU0VTKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKGN0eC5udW1fdmxhbnMgXHUwMDNlPSBORVRfREVWSUNFX1BBVEhfVkxBTl9NQVgpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRjdHgudmxhbltjdHgubnVtX3ZsYW5zXS5pZCA9IHRoW2Rpcl0udHVwbGUuZW5jYXBbaV0uaWQ7XG4rXHRcdGN0eC52bGFuW2N0eC5udW1fdmxhbnNdLnByb3RvID0gdGhbZGlyXS50dXBsZS5lbmNhcFtpXS5wcm90bztcbitcdFx0Y3R4Lm51bV92bGFucysrO1xuK1x0fVxuK1x0Y3R4LmRldiA9IHNyY19kZXY7XG4rXHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBkc3RfaGEpO1xuK1xuK1x0aWYgKGRldl9maWxsX2JyaWRnZV9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgZHN0X2hhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKTtcbitcbitcdGlmICghaW5mby5pbmRldiB8fCBpbmZvLmluZGV2ICE9IGRzdF9kZXYpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHRoWyFkaXJdLnR1cGxlLmlpZmlkeCA9IGluZm8uaW5kZXYtXHUwMDNlaWZpbmRleDtcbitcdGZvciAoaSA9IGluZm8ubnVtX2VuY2FwcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0dGhbIWRpcl0udHVwbGUuZW5jYXBbal0uaWQgPSBpbmZvLmVuY2FwW2ldLmlkO1xuK1x0XHR0aFshZGlyXS50dXBsZS5lbmNhcFtqXS5wcm90byA9IGluZm8uZW5jYXBbaV0ucHJvdG87XG4rXHRcdGlmIChpbmZvLmluZ3Jlc3NfdmxhbnMgXHUwMDI2IEJJVChpKSlcbitcdFx0XHR0aFshZGlyXS50dXBsZS5pbl92bGFuX2luZ3Jlc3MgfD0gQklUKGopO1xuK1x0XHRqKys7XG4rXHR9XG4rXHR0aFshZGlyXS50dXBsZS5lbmNhcF9udW0gPSBpbmZvLm51bV9lbmNhcHM7XG4rXG4rXHR0aFtkaXJdLnR1cGxlLm10dSA9IGRzdF9kZXYtXHUwMDNlbXR1O1xuK1x0ZXRoZXJfYWRkcl9jb3B5KHRoW2Rpcl0udHVwbGUub3V0Lmhfc291cmNlLCBzcmNfaGEpO1xuK1x0ZXRoZXJfYWRkcl9jb3B5KHRoW2Rpcl0udHVwbGUub3V0LmhfZGVzdCwgZHN0X2hhKTtcbitcdHRoW2Rpcl0udHVwbGUub3V0LmlmaWR4ID0gaW5mby5vdXRkZXYtXHUwMDNlaWZpbmRleDtcbitcdHRoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0XHQgICAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2LCAqb3V0X2RldjtcbitcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGV0aF9oZHIocGt0LVx1MDAzZXNrYik7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZTtcbitcdGludCBlcnIsIGkgPSAwO1xuK1xuK1x0aW5fZGV2ID0gbmZ0X2luKHBrdCk7XG4rXHRpZiAoIWluX2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihpbl9kZXYsIGZ0KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0b3V0X2RldiA9IG5mdF9vdXQocGt0KTtcbitcdGlmICghb3V0X2RldiB8fCAhbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihvdXRfZGV2LCBmdCkpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHR1cGxlID0gIFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuK1xuK1x0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHBrdC1cdTAwM2Vza2IpKSB7XG4rXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gc2tiX3ZsYW5fdGFnX2dldChwa3QtXHUwMDNlc2tiKTtcbitcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4rXHRcdGkrKztcbitcdH1cbitcbitcdHN3aXRjaCAoZXRoX2hkcihwa3QtXHUwMDNlc2tiKS1cdTAwM2VoX3Byb3RvKSB7XG4rXHRjYXNlIGh0b25zKEVUSF9QXzgwMjFRKToge1xuK1x0XHRzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopKHNrYl9tYWNfaGVhZGVyKHBrdC1cdTAwM2Vza2IpXG4rXHRcdFx0XHRcdCArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XG4rXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmhkci1cdTAwM2VoX3ZsYW5fVENJKTtcbitcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4rXHRcdGkrKztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOiB7XG4rXHRcdHN0cnVjdCBwcHBvZV9oZHIgKnBoZHIgPSAoc3RydWN0IHBwcG9lX2hkciAqKShza2JfbWFjX2hlYWRlcihwa3QtXHUwMDNlc2tiKVxuK1x0XHRcdFx0XHQgICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcbitcbitcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4rXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gaHRvbnMoRVRIX1BfUFBQX1NFUyk7XG4rXHRcdGkrKztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHR9XG4rXHR0dXBsZS1cdTAwM2VlbmNhcF9udW0gPSBpO1xuK1xuK1x0ZXJyID0gbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoKGZsb3csIGZ0LCAhZGlyLCBvdXRfZGV2LCBpbl9kZXYsXG4rXHRcdFx0XHQgICAgICAgZXRoLVx1MDAzZWhfZGVzdCwgZXRoLVx1MDAzZWhfc291cmNlKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoZmxvdywgZnQsIGRpciwgaW5fZGV2LCBvdXRfZGV2LFxuK1x0XHRcdFx0ICAgICAgIGV0aC1cdTAwM2VoX3NvdXJjZSwgZXRoLVx1MDAzZWhfZGVzdCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuaW5kZXggMzJiNDI4MTAzOGRkMzUuLjFhNWVlZjQ2ZjkyMmQwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtNTMsMTMgKzUzLDE0IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4ge1xuIFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlID0gXHUwMDI2cHJpdi1cdTAwM2VmbG93dGFibGUtXHUwMDNlZGF0YTtcbitcdGJvb2wgcm91dGluZyA9IGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRTtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0Y3BoID0gTlVMTDtcbiBcdHN0cnVjdCBuZl9mbG93X3JvdXRlIHJvdXRlID0ge307XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuLVx0aW50IHJldDtcbitcdGludCByZXQsIHRob2ZmO1xuIFxuIFx0aWYgKG5mdF9mbG93X29mZmxvYWRfc2tpcChwa3QtXHUwMDNlc2tiLCBuZnRfcGYocGt0KSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTcwLDggKzcxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXG4gXHRzd2l0Y2ggKGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSkge1xuIFx0Y2FzZSBJUFBST1RPX1RDUDpcbi1cdFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXHUwMDNlc2tiLCBuZnRfdGhvZmYocGt0KSxcbi1cdFx0XHRcdFx0ICBzaXplb2YoX3RjcGgpLCBcdTAwMjZfdGNwaCk7XG4rXHRcdHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XG4rXHRcdGlmICh0aG9mZiA9PSAwKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIHRob2ZmLCBzaXplb2YoX3RjcGgpLFxuK1x0XHRcdFx0XHQgIFx1MDAyNl90Y3BoKTtcbiBcdFx0aWYgKHVubGlrZWx5KCF0Y3BoIHx8IHRjcGgtXHUwMDNlZmluIHx8IHRjcGgtXHUwMDNlcnN0IHx8XG4gXHRcdFx0ICAgICAhbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkpKVxuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTEwNiwxNCArMTEwLDIxIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuLVx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXHUwMDNlZmxvd3RhYmxlKSBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfZmxvd19yb3V0ZTtcbitcdGlmIChyb3V0aW5nKSB7XG4rXHRcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfZmxvd19yb3V0ZTtcbitcdH1cbiBcbiBcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xuIFx0aWYgKCFmbG93KVxuIFx0XHRnb3RvIGVycl9mbG93X2FsbG9jO1xuIFxuLVx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuK1x0aWYgKHJvdXRpbmcpXG4rXHRcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFx1MDAyNnJvdXRlKTtcbitcdGVsc2VcbitcdFx0aWYgKGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdChmbG93LCBwa3QsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX2Zsb3dfYWRkO1xuK1xuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuQEAgLTEyNyw4ICsxMzgsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBlcnJfZmxvd19hZGQ6XG4gXHRmbG93X29mZmxvYWRfZnJlZShmbG93KTtcbiBlcnJfZmxvd19hbGxvYzpcbi1cdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTtcbi1cdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7XG4rXHRpZiAocm91dGluZykge1xuK1x0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4rXHRcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7XG4rXHR9XG4gZXJyX2Zsb3dfcm91dGU6XG4gXHRjbGVhcl9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpO1xuIG91dDpcbkBAIC0xNDIsNyArMTU1LDggQEAgc3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjQgXHUwMDI2XHUwMDI2XG4gXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjYgXHUwMDI2XHUwMDI2XG4tXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXG4rXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQgXHUwMDI2XHUwMDI2XG4rXHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0JSSURHRSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0dXJuIG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtXHUwMDNlY2hhaW4sIGhvb2tfbWFzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDoyNS4xNjM3NTQzMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA3MzAzOTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQnJpZGdlIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIFNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQsIHdoaWNoIGRlZmluaXRlbHkgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgdGFyZ2V0LiBMZXQncyBkaWcgaW4uXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcy4gSSBzZWUgYGRldl9maWxsX2JyaWRnZV9wYXRoYCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBsb29rLCBhbmQgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYCBpbiBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgZ2V0cyBtb2RpZmllZC4gVGhlbiwgd2UgaGF2ZSBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBhbmQgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgIGluIHRoZSBuZXRmaWx0ZXIgc2lkZSwgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIHJlc3BlY3RpdmVseS4gSXQgYWxzbyByZWdpc3RlcnMgYGZsb3d0YWJsZV9icmlkZ2VgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jYC4gRmluYWxseSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSBgTkZQUk9UT19CUklER0VgLlxuXG5ZZXMsIHRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXJuZWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIExvb2tzIGxpa2U6XG5cbiogICBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgXG4qICAgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGBcbiogICBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYCAoc3RhdGljYWxseSBkZWZpbmVkKVxuKiAgIGBuZl9mbG93X3J1bGVfYnJpZGdlYFxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuIEkga25vdyB0aGUgY29kZSBpcyBzcHJlYWQgYWNyb3NzIG11bHRpcGxlIGZpbGVzOlxuXG4qICAgYGRldl9maWxsX2JyaWRnZV9wYXRoYCBsaXZlcyBpbiBgbmV0L2NvcmUvZGV2LmNgXG4qICAgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGAgbGl2ZXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgXG4qICAgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgIGxpdmVzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYFxuKiAgIGBmbG93dGFibGVfYnJpZGdlYCBsaXZlcyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuY2BcblxuVGltZSB0byB3aGlwIG91dCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgY29udHJvbGxpbmcgdGhpcy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgdG8gZW5zdXJlIEkgY2FuIGJ1aWxkIGEgZnV6emVyIHRoYXQncyByZWxldmFudCB0byB0aGUgd2lkZXN0IHNldCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDozNS4yMzY3OTQ4NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MzUxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfcGF0aFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NS1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjM1LjQzMTE1MDg2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODY2MTYxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Zsb3dfdGFibGVgIGluIHRoZSBOZXRmaWx0ZXIgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGgga2VybmVsIGRldmVsb3BtZW50LCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIHJlc2lkZS4gSXQnbGwgdGVsbCBtZSBob3cgYG5mX2Zsb3dfdGFibGVgIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBwb3NzaWJseSB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFNwZWNpZmljYWxseSwgSSdsbCBnbyBkaXJlY3RseSB0byB0aGUgYG5ldC9uZXRmaWx0ZXIvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0J3MgaW4gaXRzIE1ha2VmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgYnVpbGQgcHJvY2VzcyB3aWxsIGlsbHVtaW5hdGUgaXRzIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkIGZsYWdzLCBhbmQgb3ZlcmFsbCByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4gVGltZSB0byBjaGVjayB0aGF0IE1ha2VmaWxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzA6NDAuMzE3NzY5MjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzM1OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlLW9ianNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjQwLjQ1MTEzNDc0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzQ5NDgwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY29kZSBwb2ludHMgdG8gdGhlIG1hbmRhdG9yeSByZXF1aXJlbWVudCBvZiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBUaGF0J3MgdGhlIGNvcmUsIHRoZSBmb3VuZGF0aW9uYWwgc2V0dGluZy4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIHRoYW4ganVzdCB0aGF0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCBgbmZfZmxvd190YWJsZV9pbmV0Lm9gPyBJcyBpdCBhbHNvIG5lY2Vzc2FyeT8gVGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIGFzc29jaWF0ZWQgbW9kdWxlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBpbXBsaWNpdGx5IGJ1aWx0IHdpdGggdGhhdCwgb3IgaWYgaXQgcmVxdWlyZXMgaXRzIG93biBleHBsaWNpdCBjYWxsLCBvciBpdCBtYXkgbmVlZCBvdGhlciBvcHRpb25zLiBUaW1lIHRvIGFuYWx5emUgdGhlIGJ1aWxkIHN5c3RlbSBtb3JlIGNsb3NlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzA6NDUuMTg2MDg1NzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQyNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2luZXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDo0NS4zMzU1MTgwNzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5NTAyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCBtZSBzZWUuLi4gaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19ORl9GTE9XX1RBQkxFX0lORVRgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLCBJIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCdzIGp1bXBpbmcgdG8gbXkgbWluZCBpcyBhYm91dCBgbmZ0X2Zsb3dfb2ZmbG9hZC5vYC4gSXMgdGhpcyBtb2R1bGUncyBpbmNsdXNpb24gYWxzbyBlc3NlbnRpYWwgb3IgdGllZCB0byBzcGVjaWZpYyBmZWF0dXJlcyBJIGFtIHVzaW5nPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGZsb3cgdGFibGUgYW5kIHRoZSBvZmZsb2FkIGNvbXBvbmVudDsgZG8gdGhleSBib3RoIG5lZWQgdG8gYmUgcHJlc2VudCBhbmQgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwgZm9yIHRoaW5ncyB0byBmdW5jdGlvbiBwcm9wZXJseT8gTGV0J3MgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDo0OS45NzUwMjI3ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzUyNzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZmxvd19vZmZsb2FkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXFx0XFx0Kz0gbmZ0X2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcXHQrPSBuZnRfZmxvd19vZmZsb2FkLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVxcdFxcdCs9IG5mdF9saW1pdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMwOjUwLjEyMjU1NjE2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI1NTE2NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEknbSB3b3JraW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBORlRhYmxlcyBGbG93IE9mZmxvYWQgRGVwZW5kZW5jaWVzIGluIEJyaWRnZSBDb2RlKipcblxuQWxyaWdodCwgdGhlIHN5c3RlbSdzIHRlbGxpbmcgbWUgdGhhdCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBoZXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBicmlkZ2UgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBkZWx2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX2RldmljZS5jYCBhbmQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50czsgdGhleSdyZSB0aGUgY29yZSBvZiB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgYW5kIFZMQU4gaGFuZGxpbmcgcmVzcGVjdGl2ZWx5LCBzbyB0aGV5J3JlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gZmluZCB0aGUgaW50ZWdyYXRpb24sIG9yIGxhY2sgdGhlcmVvZiwgd2l0aCBuZnRhYmxlcyBvZmZsb2FkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIGluIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZSwgb3Igd2hldGhlciB0aGVyZSBuZWVkcyB0byBiZSBhIGhvb2sgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTMzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzA6NTYuNTQ4MDc0Njk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNDIxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfZGV2aWNlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQlJJREdFKSArPSBicmlkZ2Uub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtNy1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjg6YnJpZGdlLXlcXHQ6PSBici5vIGJyX2RldmljZS5vIGJyX2ZkYi5vIGJyX2ZvcndhcmQubyBicl9pZi5vIGJyX2lucHV0Lm8gXFxcXFxcbm5ldC9icmlkZ2UvTWFrZWZpbGUtOS1cXHRcXHRcXHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMDo1Ni42NjYxMjI5NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2OTI2NDE2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfQlJJREdFYCBpcyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGhlcmUuIFRoYXQncyBoYXJkbHkgc3VycHJpc2luZywgd2UncmUgZGVhbGluZyB3aXRoIGJyaWRnaW5nIGFmdGVyIGFsbC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWluZyBlbmFibGVkLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBicl92bGFuLmNgPyBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgbW9kdWxlIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBicmlkZ2luZyBmcmFtZXdvcmsuIElzIGl0IGEgY29yZSBjb21wb25lbnQ/IEEgc3VwcG9ydGluZyBtb2R1bGU/IEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMTowNy4zNTg3NjczMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzkwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZT0yMT1icmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXFxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSArPSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjA3LjQ0NzE2MjUxMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA3NjYzMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipCcmlkZ2VkIFZMQU4gRmlsdGVyaW5nIC0gRGlnZ2luZyBEZWVwZXIqKlxuXG5SaWdodCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QsIHBhcnRpY3VsYXJseSBob3cgdGhlIGtlcm5lbCBkZXRlcm1pbmVzIGlmIGEgcGFja2V0IHNob3VsZCBiZSBicmlkZ2VkIHdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGNvcmUgbG9naWMgbGlrZWx5IHJlc2lkZXMgaW4gc29tZXRoaW5nIGxpa2UgdGhlIGRldmljZSBwYXRoIGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtLlxuXG5MZXQncyBkaXZlIGludG8gYGRldl9maWxsX2JyaWRnZV9wYXRoYCB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl04oCZcyByZXNwb25zaWJsZSBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwYXRoIGEgcGFja2V0IHRha2VzIHRocm91Z2ggdGhlIGJyaWRnaW5nIGluZnJhc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuIExldCdzIHNlZSBob3cgdGhhdCBwYXRoLWJ1aWxkaW5nIGludGVyYWN0cyB3aXRoIFZMQU4gZmlsdGVyaW5nIGVuYWJsZWQuIFRoaXMgc2hvdWxkIGV4cG9zZSB0aGUgY3J1Y2lhbCBkZWNpc2lvbiBwb2ludHMgYW5kIGZpbHRlcmluZyBydWxlcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyB0aGUgVkxBTiB0YWcgaXMgY29uc2lkZXJlZCBkdXJpbmcgcGF0aCBkZXRlcm1pbmF0aW9uIGFuZCB3aGV0aGVyIGl04oCZcyB1c2VkIGluIGZpbHRlcmluZyBwYWNrZXRzIGRlc3RpbmVkIGZvciB0aGUgYnJpZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjExLjE1NDgyOTM5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyNTYzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2ZpbGxfYnJpZGdlX3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzUzPXN0YXRpYyBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg2LVxcbm5ldC9jb3JlL2Rldi5jOjc4NzppbnQgZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG5uZXQvY29yZS9kZXYuYy03ODgtXFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODE1LX1cXG5uZXQvY29yZS9kZXYuYzo4MTY6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfYnJpZGdlX3BhdGgpO1xcbm5ldC9jb3JlL2Rldi5jLTgxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6MTEuMjQ1MDg5OTM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTA0MzE3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEZsb3cgT2ZmbG9hZCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUgZG9lcyB0aGUgbWFnaWMgcmVhbGx5IGJlZ2luIGZvciB0aGUgZmxvdyBvZmZsb2FkIGJyaWRnZSBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSByb290IG9mIGhvdyB0aGlzIHRoaW5nIGdldHMgaW5pdGlhbGl6ZWQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgIGlzIHRoZSBmdW5jdGlvbiB0byBleGFtaW5lLiBTcGVjaWZpY2FsbHksIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIGluIHRoZSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AgZmlsZS4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhlIGJyaWRnZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgcmVzb3VyY2VzIGFyZSBzZXR1cCBmb3IgdGhlIGZsb3cgb2ZmbG9hZCBmZWF0dXJlLiBMZXQncyBzZWUgaG93IHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cyBhcmUgaG9va2VkIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjE0LjgzNTUyMzQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDc2MzUwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zNTU9c3RhdGljIGludCBuZnRfZGV2X2ZpbGxfYnJpZGdlX3BhdGgoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDE5OmludCBmbG93X29mZmxvYWRfYnJpZGdlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQyMC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NzctfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDc4OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjE1LjI0MzE2Mzc5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzc2MjY2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSwgdGhpbmtpbmcgb3V0IGxvdWQ6XG5cbioqRGl2aW5nIGludG8gbmZfZmxvd19ydWxlX2JyaWRnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmZfZmxvd19ydWxlX2JyaWRnZWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSdzIHJvbGUgaW4gdGhlIG9mZmxvYWQgcGF0aC4gU2luY2UgaXQncyBicmlkZ2UtcmVsYXRlZCwgSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFja2V0IHRyYXZlcnNlcyBhIGJyaWRnZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgcnVsZSBjcmVhdGlvbiwgbWF0Y2hpbmcsIGFuZCBldmljdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBicmlkZ2VkIGVudmlyb25tZW50LlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGJyaWRnZSBuZXRkZXZpY2Ugc3RydWN0dXJlLCBhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHBhY2tldHMgZ2V0IGZvcndhcmRlZCB0aHJvdWdoIHRoZSBmbG93IHRhYmxlLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyB0aGUgYnJpZGdlLXNwZWNpZmljIGluZm9ybWF0aW9uIChsaWtlIFZMQU4gSURzIG9yIE1BQyBhZGRyZXNzZXMpIGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBmbG93IGtleSBhbmQgcnVsZSBtYXRjaGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gdHJhY2UgaG93IHRoZSBwYWNrZXRzIGFyZSBnZXR0aW5nIHB1bnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlLiBJJ20gZ29pbmcgdG8gd2F0Y2ggdGhlIGRhdGEgcGF0aCBjbG9zZWx5LiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGhvb2tzIG9yIGNhbGxiYWNrcyB0byB0aGUgYnJpZGdlIGRyaXZlciBpdHNlbGY/IElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGNhbGxiYWNrcyBhcmUgZG9pbmcgYW5kIHdoZXJlIHRoZXkncmUgaW52b2tlZC4gQW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIEFQSSBhcmUgY3JpdGljYWwgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHNvZnR3YXJlIGlzLCBhbmQgaG93IGl0IGlzIGVuZm9yY2VkLiBGaW5hbGx5LCBsZXQncyBmaW5kIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBtYXliZSB0aGUgZGV2aWNlIGRyaXZlcnMnIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjIwLjYxOTQzMjUyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzE0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfcnVsZV9icmlkZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzQzOmludCBuZl9mbG93X3J1bGVfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc0NC1cXHRcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzU0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfcnVsZV9icmlkZ2UpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMToyMC43NDI3NTIyMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwMjE2MzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBNeSBpbml0aWFsIHRhcmdldCBsaXN0IGlzOiBgZGV2X2ZpbGxfYnJpZGdlX3BhdGhgLCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCwgYG5mX2Zsb3dfcnVsZV9icmlkZ2VgLCBhbmQgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAuIEknbSBhbHNvIGluY2x1ZGluZyBgYnJfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkYCBiZWNhdXNlIEkga25vdyB0aGVzZSB3ZXJlIHJlY2VudGx5IG1vZGlmaWVkLCBpbmNyZWFzaW5nIHRoZSBsaWtlbGlob29kIG9mIGludGVyZXN0aW5nIGJlaGF2aW9yLlxuXG5JJ20gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBmdW5jdGlvbnMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcyB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBhY2N1cmF0ZS4gYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZGVmaW5pdGVseSBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AsIGp1c3QgYXMgSSB0aG91Z2h0LiBJIGNhbiBjb25maXJtIGBicl9maWxsX2ZvcndhcmRfcGF0aGAgcmVzaWRlcyBpbiBgbmV0L2JyaWRnZS9icl9kZXZpY2UuY2AgYW5kIGBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWRgIGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIEFsbCBjaGVja3MgYXJlIGdvb2QuXG5cbk5vdywgZm9yIHRoZSBjb25maWd1cmF0aW9ucywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlc2UgaW4gcGxhY2Ugd2hlbiB0ZXN0aW5nOiBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBCUklER0VgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjI4LjU0NDkxODIwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzczMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjI4LjY0ODI5NzYyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk4MzQ5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6XG5cbioqRGVwZW5kZW5jaWVzIENoZWNrIGZvciBgTkZUX0ZMT1dfT0ZGTE9BRGAqKlxuXG5SaWdodCwgc28gYE5GVF9GTE9XX09GRkxPQURgLiBUaGF0J3MgYSBrZXkgZmVhdHVyZSwgYW5kIGJlZm9yZSBJIHN0YXJ0IGRvaW5nIGFueXRoaW5nIGVsc2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSB1bmRlcmx5aW5nIHBpZWNlcyBhcmUgaW4gcGxhY2UuIE5vIHNlbnNlIHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgYSBidWlsZCBsYXRlciBpZiBJIGNhbiBwcm9hY3RpdmVseSBpZGVudGlmeSBhbnkgbWlzc2luZyBsaW5rcy4gVGhpcyBtZWFucyBhIHRob3JvdWdoIGNoZWNrIG9mIGFsbCBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IG90aGVyIG1vZHVsZXMsIGxpYnJhcmllcywgb3Igc3lzdGVtIGNvbXBvbmVudHMgYE5GVF9GTE9XX09GRkxPQURgIHJlbGllcyBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBjb21waWxpbmc7IGl0J3MgYWJvdXQgcnVudGltZSBiZWhhdmlvciBhbmQgZW5zdXJpbmcgZXZlcnl0aGluZyBwbGF5cyBuaWNlbHkgdG9nZXRoZXIuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlLCBkb2N1bWVudGF0aW9uLCBhbmQgbWF5YmUgZXZlbiBzb21lIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6MzIuNDQ2NjQ5NTM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0Njk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjMyLjU1OTEyNTU4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4NDY2OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE5GX0ZMT1dfVEFCTEVgLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBtYXAgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgdG9vIGVhc3kgdG8gbWFrZSBhIGNoYW5nZSBoZXJlIGFuZCBicmVhayBzb21ldGhpbmcgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSB3aXRob3V0IGEgZnVsbCB1bmRlcnN0YW5kaW5nLlxuXG5MZXQncyBzZWXigKYgd2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyByZWx5IG9uIHRoaXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBwZXJoYXBzIG5ldGZpbHRlciBtb2R1bGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgdXNlci1zcGFjZSBpbnRlcmZhY2VzIHRoYXQgYXJlIGxpbmtlZCB0byB0aGlzIHRhYmxlPyBJIG5lZWQgdG8gbG9vayBmb3IgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1pZ2h0IG1ha2UuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0byBmaW5kIHJlZmVyZW5jZXMgYW5kIHRoZW4gbW92ZSB0byBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIHdpdGggbmV0ZmlsdGVyIGludGVybmFscy4gR290dGEgYmUgbWV0aG9kaWNhbCBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjM2LjIwNzU5NjI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1MjM3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6MzYuNDI4MTI3NTU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjQyMzY3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKkluaXRpYWwgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGluaXRpYWxseSB6ZXJvaW5nIGluIG9uIHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gSSdtIG5vdGluZyB0aGUgcHJlc2VuY2Ugb2YgYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmxvdyB0YWJsZSBhbmQgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IHZldCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBsb2dpY2FsbHkgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTY6MzE6NDAuNDUyMzY2MzEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3Mzg5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTM2PWNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMTo0MC42MjMxMTAzNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NzQ3MjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgYW5kIHRoaW5raW5nIGFsb25nIHRoZXNlIGxpbmVzOlxuXG4qKkNoZWNraW5nIGBCUklER0VgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhbmRzY2FwZSBvZiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgYEJSSURHRWAgc3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGltcGFjdHMsIGlkZW50aWZ5aW5nIGFueSBsdXJraW5nIGNvbmZsaWN0cywgb3IgcGlucG9pbnRpbmcgYXJlYXMgd2hlcmUgd2UgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB1cHN0cmVhbSBjaGFuZ2VzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZvdW5kYXRpb25zIGFyZSBzb2xpZC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgd2Ugc3RhbmQsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgQlJJREdFYCBzeXN0ZW0gYmVmb3JlIEkgbW92ZSBvbi4gV2hhdCBkb2VzIHRoZSBkZXBlbmRlbmN5IHRyZWUgbG9vayBsaWtlPyBBcmUgd2UgcmVseWluZyBvbiBhbnkgbGlicmFyaWVzIHRoYXQgYXJlIGtub3duIHBhaW4gcG9pbnRzLCBvciB0aGF0IGFyZSBhYm91dCB0byByZWFjaCBlbmQtb2YtbGlmZT8gQSBxdWljayBkZXBlbmRlbmN5IGF1ZGl0IGlzIG15IHN0YXJ0aW5nIHBvaW50IGhlcmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjQ0LjE3MDU4NTM0NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MTA0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cXG5uZXQvYnJpZGdlL0tjb25maWctNzctXFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNjozMTo0NC4zMDU2OTY1MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk2NjYzMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCcmlkZ2UgU3VwcG9ydCBmb3IgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGJyaWRnZSBzdXBwb3J0IGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgQlJJREdFYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvYnJpZGdlL0tjb25maWdgLCB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGZ1bmN0aW9uYWxpdGllcyBhbmQgaW50ZWdyYXRpb24gd2l0aCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGRldl9maWxsX2JyaWRnZV9wYXRoYCwgYGZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdGAsIGBuZl9mbG93X3J1bGVfYnJpZGdlYCwgYGJyX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX3B2aWRgLiBMZXQncyB2ZXJpZnkgdGhhdCBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IGFoLCB5ZXMsIGl0IGlzLiBJdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBpdCB3aXRoaW4gdGhlIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBkZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgZXhwb3J0ZWQgYW5kIGNhbGxlZCBieSBgbmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoYC4gVGhlbiwgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGAgaXMgY2FsbGVkIGJ5IGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgLiBGaW5hbGx5LCBgZmxvd19vZmZsb2FkX2JyaWRnZV9pbml0YCBpcyBpbnZva2VkIGJ5IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHNwZWNpZmljYWxseSB3aGVuIHRoZSByb3V0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQsIG9yIHJhdGhlciwgd2hlbiBgZmxvd3RhYmxlLVx1MDAzZXR5cGUtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFYC4gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgZXhwcmVzc2lvbiwgd2hpY2ggaXMgdXNlZCB3aXRoaW4gbmZ0YWJsZXMuXG5cblNvLCB0aGUgY29kZSBpcyByZWFjaGFibGUsIGFuZCBpdCdzIGZ1bmN0aW9uYWwuIFRoYXQgbWVhbnMgaXQgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBicmlkZ2UtbmV0ZmlsdGVyIGludGVyYWN0aW9uIGFuZCBjYW4gYmUgdGVzdGVkLlxuXG5MZXQncyBwcmVwYXJlIHRoZSBvdXRwdXQuIFRoZSBmdXp6aW5nIHRhcmdldCBpcyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuXG5cbkhlcmUgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEknbSB0YXJnZXRpbmc6XG4qICAgYGRldl9maWxsX2JyaWRnZV9wYXRoYFxuKiAgIGBmbG93X29mZmxvYWRfYnJpZGdlX2luaXRgXG4qICAgYG5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aGBcbiogICBgbmZfZmxvd19ydWxlX2JyaWRnZWBcbiogICBgYnJfZmlsbF9mb3J3YXJkX3BhdGhgXG4qICAgYGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZGBcblxuQW5kIGhlcmUgYXJlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlOlxuKiAgIGBORl9GTE9XX1RBQkxFYFxuKiAgIGBORl9GTE9XX1RBQkxFX0lORVRgXG4qICAgYE5GVF9GTE9XX09GRkxPQURgXG4qICAgYEJSSURHRWBcbiogICBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYFxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBicmlkZ2UgdHJhZmZpYyBpbnRlcmFjdHMgd2l0aCBuZXRmaWx0ZXIncyBmbG93IG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGFjaGlldmVkIGJ5IGltcGxlbWVudGluZyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgd2l0aGluIHRoZSBmbG93IG9mZmxvYWQgZnJhbWV3b3JrLCBjb3VwbGVkIHdpdGggbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBicmlkZ2UgZm9yd2FyZGluZyBwYXRoIGZ1bmN0aW9ucy4gR2l2ZW4gdGhpcyBsZXZlbCBvZiBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9ucywgY29tYmluZWQgd2l0aCBpdHMgZGlyZWN0IGFjY2Vzc2liaWxpdHkgdmlhIG5mdGFibGVzIGFuZCByZWxldmFudCBicmlkZ2UgY29uZmlndXJhdGlvbnMsIHRoaXMgbWFrZXMgaXQgYW4gZXhjZWxsZW50IHRhcmdldCBmb3IgdGhvcm91Z2ggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDksIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE2OjMxOjU0LjI3MjMzMDgwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjAwMzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJmbG93X29mZmxvYWRfYnJpZGdlX2luaXRcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9icmlkZ2VfcGF0aFwiLFxuICAgIFwibmZfZmxvd19ydWxlX2JyaWRnZVwiLFxuICAgIFwiYnJfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcImJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfcHZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYnJpZGdlIHN1cHBvcnQgZm9yIG5ldGZpbHRlciBmbG93IG9mZmxvYWQuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBoYW5kbGUgYnJpZGdlIHBhdGhzIGluIGZsb3cgb2ZmbG9hZCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgYnJpZGdlIGZvcndhcmQgcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgYW5kIGJyaWRnZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfYnJpZGdlX3BhdGhcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9icmlkZ2VfaW5pdFwiLFxuICAgIFwibmZ0X2Rldl9maWxsX2JyaWRnZV9wYXRoXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfYnJpZGdlXCIsXG4gICAgXCJicl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwiYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9wdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBicmlkZ2Ugc3VwcG9ydCBmb3IgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBicmlkZ2UgcGF0aHMgaW4gZmxvdyBvZmZsb2FkIGFuZCBtb2RpZmllcyBleGlzdGluZyBicmlkZ2UgZm9yd2FyZCBwYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBhbmQgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[1] Phase: Succeeded StartedAt: 2026-07-07 16:32:05 +0000 UTC FinishedAt: 2026-07-07 16:32:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 16:32:05 +0000 UTC FinishedAt: 2026-07-07 16:32:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2] Phase: Succeeded StartedAt: 2026-07-07 16:32:05 +0000 UTC FinishedAt: 2026-07-07 21:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 16:32:05 +0000 UTC FinishedAt: 2026-07-07 21:01:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 16:32:05 +0000 UTC FinishedAt: 2026-07-07 16:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 16:32:05 +0000 UTC FinishedAt: 2026-07-07 16:32:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl9b62/series-workflowl9b62-convert-artifact-1839985725/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 16:32:48 +0000 UTC FinishedAt: 2026-07-07 17:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 16:32:48 +0000 UTC FinishedAt: 2026-07-07 17:05:14 +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:*0e9744d0-8cfe-4653-8a6b-7536e2bda1de,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-workflowl9b62/series-workflowl9b62-convert-artifact-1839985725/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": "d495b2a8-9263-47c4-8214-3da859277f54", "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-workflowl9b62/series-workflowl9b62-build-action-2416254323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 16:32:48 +0000 UTC FinishedAt: 2026-07-07 17:05:03 +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:*0e9744d0-8cfe-4653-8a6b-7536e2bda1de,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-workflowl9b62/series-workflowl9b62-convert-artifact-1839985725/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": "d495b2a8-9263-47c4-8214-3da859277f54", "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-workflowl9b62/series-workflowl9b62-build-action-2416254323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 17:05:14 +0000 UTC FinishedAt: 2026-07-07 17:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 17:05:14 +0000 UTC FinishedAt: 2026-07-07 17:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 17:05:14 +0000 UTC FinishedAt: 2026-07-07 17:05:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 17:05:14 +0000 UTC FinishedAt: 2026-07-07 17:05:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl9b62/series-workflowl9b62-convert-artifact-2420844440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 17:05:36 +0000 UTC FinishedAt: 2026-07-07 17:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 17:05:36 +0000 UTC FinishedAt: 2026-07-07 17:07:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d495b2a8-9263-47c4-8214-3da859277f54,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-workflowl9b62/series-workflowl9b62-build-action-2416254323/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-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 17:07:43 +0000 UTC FinishedAt: 2026-07-07 17:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 17:07:43 +0000 UTC FinishedAt: 2026-07-07 17:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 17:07:43 +0000 UTC FinishedAt: 2026-07-07 17:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 17:07:43 +0000 UTC FinishedAt: 2026-07-07 17:57:50 +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:*0e9744d0-8cfe-4653-8a6b-7536e2bda1de,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-workflowl9b62/series-workflowl9b62-convert-artifact-2420844440/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": "cc7921e3-c09a-4183-a6bc-1bd7f980a977", "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-workflowl9b62/series-workflowl9b62-build-action-683573252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 17:07:43 +0000 UTC FinishedAt: 2026-07-07 17:57:40 +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:*0e9744d0-8cfe-4653-8a6b-7536e2bda1de,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-workflowl9b62/series-workflowl9b62-convert-artifact-2420844440/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": "cc7921e3-c09a-4183-a6bc-1bd7f980a977", "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-workflowl9b62/series-workflowl9b62-build-action-683573252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 17:57:50 +0000 UTC FinishedAt: 2026-07-07 17:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 17:57:50 +0000 UTC FinishedAt: 2026-07-07 17:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 17:57:50 +0000 UTC FinishedAt: 2026-07-07 17:59:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 17:57:50 +0000 UTC FinishedAt: 2026-07-07 17:59:49 +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:*cc7921e3-c09a-4183-a6bc-1bd7f980a977,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-workflowl9b62/series-workflowl9b62-build-action-683573252/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-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 17:59:59 +0000 UTC FinishedAt: 2026-07-07 21:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 17:59:59 +0000 UTC FinishedAt: 2026-07-07 21:01:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"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:*d495b2a8-9263-47c4-8214-3da859277f54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc7921e3-c09a-4183-a6bc-1bd7f980a977,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-workflowl9b62/series-workflowl9b62-build-action-2416254323/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-workflowl9b62/series-workflowl9b62-build-action-683573252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 17:59:59 +0000 UTC FinishedAt: 2026-07-07 18:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 17:59:59 +0000 UTC FinishedAt: 2026-07-07 18:00:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"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-workflowl9b62/series-workflowl9b62-convert-artifact-26001009/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 17:59:59 +0000 UTC FinishedAt: 2026-07-07 17:59:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 17:59:59 +0000 UTC FinishedAt: 2026-07-07 17:59:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 17:59:59 +0000 UTC FinishedAt: 2026-07-07 17:59:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 18:00:19 +0000 UTC FinishedAt: 2026-07-07 21:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9b62[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_bridge_path","flow_offload_bridge_init","nft_dev_fill_bridge_path","nf_flow_rule_bridge","br_fill_forward_path","br_vlan_fill_forward_path_pvid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"e56fe1cd-beb1-4f25-a865-486c9b500fe9","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 18:00:19 +0000 UTC FinishedAt: 2026-07-07 21:01:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d495b2a8-9263-47c4-8214-3da859277f54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc7921e3-c09a-4183-a6bc-1bd7f980a977,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-workflowl9b62/series-workflowl9b62-build-action-2416254323/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-workflowl9b62/series-workflowl9b62-build-action-683573252/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-workflowl9b62/series-workflowl9b62-convert-artifact-26001009/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,}