Name: series-workflowz6dkv Phase: Succeeded StartedAt: 2026-09-06 01:01:14 +0000 UTC FinishedAt: 2026-09-06 05:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[0] Phase: Succeeded StartedAt: 2026-09-06 01:01:14 +0000 UTC FinishedAt: 2026-09-06 01:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 01:01:14 +0000 UTC FinishedAt: 2026-09-06 01:51:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "e97621ac-6a13-46a9-892b-ef17934a0d3a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_scan_done", "___cfg80211_scan_done", "reg_leave_invalid_chans_wk", "reg_leave_invalid_nan_wk", "reg_check_chans_work", "cfg80211_ibss_joined", "__cfg80211_ibss_joined", "cfg80211_classify8021d", "__cfg80211_bss_update", "cfg80211_update_assoc_bss_entry", "cfg80211_stop_p2p_device", "cfg80211_process_wdev_events" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV9zY2FuX2RvbmUmIzM0OywKICAgICYjMzQ7X19fY2ZnODAyMTFfc2Nhbl9kb25lJiMzNDssCiAgICAmIzM0O3JlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drJiMzNDssCiAgICAmIzM0O3JlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayYjMzQ7LAogICAgJiMzNDtyZWdfY2hlY2tfY2hhbnNfd29yayYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9pYnNzX2pvaW5lZCYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX2lic3Nfam9pbmVkJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX2NsYXNzaWZ5ODAyMWQmIzM0OywKICAgICYjMzQ7X19jZmc4MDIxMV9ic3NfdXBkYXRlJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBwYWNrZXQgcGFyc2luZyBhY3Jvc3MgY2ZnODAyMTE6XG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxuMy4gSUJTUyBldmVudCBoYW5kbGluZzogUGFzc2VzIEJTUyByZWZlcmVuY2VzIGRpcmVjdGx5IHRvIGV2ZW50IHByb2Nlc3NpbmcgcmF0aGVyIHRoYW4gcmUtbG9va2luZyB0aGVtIHVwOyBhbGwgZXZlbnQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHByb3Blcmx5IG1hbmFnZWQuXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmM2NzE1ZTAxZWQwNzFiYjE2NDQxMTkzYjRjZDc1YzU0N2JkMmI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDE6NTA6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMjQ0LDkgJiM0MzsyNDQsOCBAQCB2b2lkIGNmZzgwMjExX3N0b3BfcDJwX2RldmljZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRyZGV2LVx1MDAzZW9wZW5jb3VudC0tO1xuIFxuIFx0aWYgKHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xuLVx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fFxuLVx0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSkpXG4mIzQzO1x0XHRpZiAoIXJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcbiBcdH1cbkBAIC02NDYsNiAmIzQzOzY0NSw4IEBAIHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlZGVzdHJveV93b3JrLCBjZmc4MDIxMV9kZXN0cm95X2lmYWNlX3drKTtcbiBcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZyZGV2LVx1MDAzZXNjaGVkX3NjYW5fc3RvcF93aywgY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wX3drKTtcbiBcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXNjaGVkX3NjYW5fcmVzX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHNfd2spO1xuJiM0MztcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZyZGV2LVx1MDAzZXJlZ19jaGVja19jaGFuc193aywgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2spO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxuIFx0XHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spO1xuQEAgLTEzNDUsNiAmIzQzOzEzNDYsNyBAQCB2b2lkIHdpcGh5X3VucmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZyZGV2LVx1MDAzZWRmc191cGRhdGVfY2hhbm5lbHNfd2spO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJkZXYtXHUwMDNlYmFja2dyb3VuZF9jYWNfZG9uZV93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlZGVzdHJveV93b3JrKTtcbiYjNDM7XHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlcmVnX2xlYXZlX25hbl93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VtZ210X3JlZ2lzdHJhdGlvbnNfdXBkYXRlX3drKTtcbkBAIC0xNzU4LDkgJiM0MzsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuIFx0XHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXNjYW5fcmVxIFx1MDAyNlx1MDAyNiByZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0XHQgICAgICFyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2Vub3RpZmllZCkpKVxuJiM0MztcdFx0XHRpZiAoIXJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4mIzQzO1x0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSlcbiBcdFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0XHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtMjQsNiAmIzQzOzI0LDE2IEBAXG4gc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQge1xuIFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvO1xuIFx0Ym9vbCBub3RpZmllZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuXG4mIzQzO1x0ICogcmRldl9zY2FuKCkgYW5kIGNmZzgwMjExX3NjYW5fZG9uZSgpXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBkcml2ZXJfb3ducztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNldCB3aGVuIGNmZzgwMjExIGlzIGRvbmUgd2l0aCB0aGUgcmVxdWVzdCBidXQgdGhlIGRyaXZlciBzdGlsbFxuJiM0MztcdCAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0XG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBzdGFsZTtcbiBcdC8qIG11c3QgYmUgbGFzdCAtIHZhcmlhYmxlIG1lbWJlcnMgKi9cbiBcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgcmVxO1xuIH07XG5AQCAtMTA0LDYgJiM0MzsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yaztcbiBcdHN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93aztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcbiYjNDM7XHRzdHJ1Y3Qgd2lwaHlfd29yayByZWdfY2hlY2tfY2hhbnNfd2s7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlZ19sZWF2ZV9uYW5fd2s7XG4gXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcmFkYXJfY2hhbmRlZjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drO1xuQEAgLTI4MCw4ICYjNDM7MjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHtcbiBcdFx0XHRib29sIGxvY2FsbHlfZ2VuZXJhdGVkO1xuIFx0XHR9IGRjO1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7XG4mIzQzO1x0XHRcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcztcbiBcdFx0fSBpajtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHR1OCBwZWVyX2FkZHJbRVRIX0FMRU5dO1xuQEAgLTM0NCw4ICYjNDM7MzU1LDcgQEAgaW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xuIGludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7XG4tdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi1cdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTtcbiYjNDM7dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7XG4gaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5AQCAtMTYsMjYgJiM0MzsxNiwxOCBAQFxuICNpbmNsdWRlIFwmIzM0O3JkZXYtb3BzLmhcJiMzNDtcbiBcbiBcbi12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXG4mIzQzO3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpXG4ge1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuICNlbmRpZlxuIFxuIFx0aWYgKFdBUk5fT04od2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAoIXdkZXYtXHUwMDNldS5pYnNzLnNzaWRfbGVuKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGNoYW5uZWwsIGJzc2lkLCBOVUxMLCAwLFxuLVx0XHRcdCAgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfSUJTUywgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbi1cbi1cdGlmIChXQVJOX09OKCFic3MpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpIHtcbiBcdFx0Y2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XG5AQCAtNDMsMTcgJiM0MzszNSwyMiBAQCB2b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuIFx0fVxuIFxuIFx0Y2ZnODAyMTFfaG9sZF9ic3MoYnNzX2Zyb21fcHViKGJzcykpO1xuJiM0MztcdC8qIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgZXZlbnQgaXMgdHJhbnNmZXJyZWQgdG8gY3VycmVudF9ic3MgKi9cbiBcdHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzID0gYnNzX2Zyb21fcHViKGJzcyk7XG4gXG4gXHRjZmc4MDIxMV91cGxvYWRfY29ubmVjdF9rZXlzKHdkZXYpO1xuIFxuLVx0bmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LVx1MDAzZXdpcGh5KSwgZGV2LCBic3NpZCxcbiYjNDM7XHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cdTAwM2Vic3NpZCxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7XG4mIzQzO1x0bWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3MtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiBcdHdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsIFx1MDAyNndycXUsIE5VTEwpO1xuICNlbmRpZlxuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO3B1dF9ic3M6XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBic3MpO1xuIH1cbiBcbiB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbkBAIC02Miw2ICYjNDM7NTksNyBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2O1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHR0cmFjZV9jZmc4MDIxMV9pYnNzX2pvaW5lZChkZXYsIGJzc2lkLCBjaGFubmVsKTtcbkBAIC02OSwxMyAmIzQzOzY3LDE5IEBAIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuIFx0aWYgKFdBUk5fT04oIWNoYW5uZWwpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuJiM0MztcdGlmIChXQVJOX09OKCFic3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGV2ID0ga3phbGxvY19vYmooKmV2LCBnZnApO1xuLVx0aWYgKCFldilcbiYjNDM7XHRpZiAoIWV2KSB7XG4mIzQzO1x0XHRjZmc4MDIxMV9wdXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGJzcyk7XG4gXHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRldi1cdTAwM2V0eXBlID0gRVZFTlRfSUJTU19KT0lORUQ7XG4tXHRtZW1jcHkoZXYtXHUwMDNlaWouYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7XG4tXHRldi1cdTAwM2Vpai5jaGFubmVsID0gY2hhbm5lbDtcbiYjNDM7XHRldi1cdTAwM2Vpai5ic3MgPSBic3M7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ3ZGV2LVx1MDAzZWV2ZW50X2xvY2ssIGZsYWdzKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXYtXHUwMDNlbGlzdCwgXHUwMDI2d2Rldi1cdTAwM2VldmVudF9saXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5pbmRleCA0Njg0OWZlOGQwYjM5Li5hZGNmZDAyNzhkYTMyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5AQCAtNDY0LDcgJiM0Mzs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0cmFjZV9yZGV2X3NjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmVxdWVzdCk7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IHRydWU7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VzY2FuKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIFx1MDAyNnJlcXVlc3QtXHUwMDNlcmVxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IGZhbHNlO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLjExNjY1ZTBhN2VmYzggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTIzNDUsNyAmIzQzOzIzNDUsNyBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRpZnR5cGUgPSB3ZGV2LVx1MDAzZWlmdHlwZTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZSAqL1xuLVx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldiB8fCAhbmV0aWZfcnVubmluZyh3ZGV2LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogTkFOIGRvZXNuJiMzOTt0IGhhdmUgbGlua3MsIGhhbmRsZSBpdCBzZXBhcmF0ZWx5ICovXG5AQCAtMjQ0NiwxOSAmIzQzOzI0NDYsNTIgQEAgc3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4mIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuJiM0MztcbiYjNDM7XHRyZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSxcbiYjNDM7XHRcdFx0ICAgIHJlZ19sZWF2ZV9uYW5fd2spO1xuJiM0MztcbiYjNDM7XHQvKiBzdG9wcGluZyBOQU4gY2xvc2VzIGl0cyBkYXRhIGludGVyZmFjZXMsIHdoaWNoIG5lZWRzIHRoZSBSVE5MICovXG4mIzQzO1x0cnRubF9sb2NrKCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdGJvb2wgdmFsaWQ7XG4gXG4tXHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXG4tXHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTtcbiYjNDM7XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeSlcbiYjNDM7XHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYpO1xuIFx0XHRpZiAoIXZhbGlkKVxuIFx0XHRcdGNmZzgwMjExX2xlYXZlKHJkZXYsIHdkZXYsIC0xKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuJiM0MztcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2lwaHktXHUwMDNlbXR4KTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGVhcmluZyBkb3duIE5BTiBuZWVkcyB0aGUgUlROTCBmb3IgY2xvc2luZyBOQU5fREFUQVxuJiM0MztcdFx0ICogaW50ZXJmYWNlcywgaGFuZGxlIHRoYXQgc2VwYXJhdGVseS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTilcbiYjNDM7XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjZmc4MDIxMV9sZWF2ZV9sb2NrZWQocmRldiwgd2RldiwgLTEpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuQEAgLTI0NjYsMTIgJiM0MzsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxuXCYjMzQ7KTtcbi1cdHJ0bmxfbG9jaygpO1xuIFxuLVx0Zm9yX2VhY2hfcmRldihyZGV2KVxuLVx0XHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRydG5sX3VubG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdClcbiYjNDM7XHRcdHdpcGh5X3dvcmtfcXVldWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgXHUwMDI2cmRldi1cdTAwM2VyZWdfY2hlY2tfY2hhbnNfd2spO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmggYi9uZXQvd2lyZWxlc3MvcmVnLmhcbmluZGV4IGZjMzFjNWY5YTYxYWIuLmM1ODcwNzllYWQ4ZmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuaFxuQEAgLTE3OCw2ICYjNDM7MTc4LDIyIEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpO1xuICAqL1xuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2sgLSBjaGVjayBpZiBjaGFubmVscyBhcmUgbm8gbG9uZ2VyIHVzYWJsZSBhbmQgbGVhdmVcbiYjNDM7ICogQHdpcGh5OiB0aGUgd2lwaHkgdG8gY2hlY2tcbiYjNDM7ICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxuJiM0MzsgKi9cbiYjNDM7dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZVxuJiM0MzsgKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFN0b3BwaW5nIGEgTkFOIGludGVyZmFjZSBuZWVkcyB0aGUgUlROTCwgc28gaXQgY2Fubm90IGJlIGRvbmUgZnJvbVxuJiM0MzsgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4mIzQzO1xuIGV4dGVybiBjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW107XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcbiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xMTE0LDYgJiM0MzsxMTE0LDIxIEBAIGludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxuJiM0MzsgKiBlLmcuIG1hYzgwMjExIG1heSBjYW5jZWwgaXQgYXN5bmNocm9ub3VzbHkgYW5kIHN0aWxsIHVzZSBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyZXEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChyZXEtXHUwMDNlZHJpdmVyX293bnMpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc3RhbGUgPSB0cnVlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtmcmVlKHJlcSk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgIGJvb2wgc2VuZF9tZXNzYWdlKVxuIHtcbkBAIC0xMTczLDEwICYjNDM7MTE4OCwxMCBAQCB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXG4gXHRkZXZfcHV0KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcbi1cdGtmcmVlKHJkZXYtXHUwMDNlaW50X3NjYW5fcmVxKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xuIFxuLVx0a2ZyZWUocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtXHUwMDNlc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VzY2FuX3JlcSA9IE5VTEw7XG4gXG4gXHRpZiAoIXNlbmRfbWVzc2FnZSlcbkBAIC0xMTk5LDYgJiM0MzsxMjE0LDE4IEBAIHZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIG9sZF9pbmZvID0gaW50cmVxLVx1MDAzZWluZm87XG4gXG4gXHR0cmFjZV9jZmc4MDIxMV9zY2FuX2RvbmUoaW50cmVxLCBpbmZvKTtcbiYjNDM7XG4mIzQzO1x0aW50cmVxLVx1MDAzZWRyaXZlcl9vd25zID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRyZXEtXHUwMDNlc3RhbGUpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgc2NhbiBpcyBhbHJlYWR5IGNvbXBsZXRlZCBhcyBmYXIgYXMgd2UmIzM5O3JlIGNvbmNlcm5lZCxcbiYjNDM7XHRcdCAqIGl0IHdhcyBqdXN0IGtlcHQgYXJvdW5kIGZvciB0aGUgZHJpdmVyIC0gZG9uZSBub3csIGZyZWUgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGtmcmVlKGludHJlcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2XG4gXHRcdGludHJlcSAhPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4gXG5AQCAtMjA1MCw2ICYjNDM7MjA3NywxMyBAQCBfX2NmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdGlmICghaGlkZGVuKVxuIFx0XHRcdFx0aGlkZGVuID0gcmJfZmluZF9ic3MocmRldiwgdG1wLFxuIFx0XHRcdFx0XHRcdCAgICAgQlNTX0NNUF9ISURFX05VTCk7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcbiYjNDM7XHRcdFx0ICogYmVhY29uIGRhdGEgY2FuIG5ldmVyIGJlIGZpbGxlZC91cGRhdGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGhpZGRlbiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFyY3VfYWNjZXNzX3BvaW50ZXIoaGlkZGVuLVx1MDAzZXB1Yi5iZWFjb25faWVzKSlcbiYjNDM7XHRcdFx0XHRoaWRkZW4gPSBOVUxMO1xuIFx0XHRcdGlmIChoaWRkZW4pIHtcbiBcdFx0XHRcdG5ldy1cdTAwM2VwdWIuaGlkZGVuX2JlYWNvbl9ic3MgPSBcdTAwMjZoaWRkZW4tXHUwMDNlcHViO1xuIFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWhpZGRlbl9saXN0LFxuQEAgLTM0NjgsMTEgJiM0MzszNTAyLDYgQEAgdm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRjYnNzLVx1MDAzZXB1Yi5jaGFubmVsID0gY2hhbjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLVx1MDAzZXB1Yi5jYXBhYmlsaXR5LFxuLVx0XHRcdFx0XHQgICAgIGJzcy1cdTAwM2VwdWIuY2hhbm5lbC1cdTAwM2ViYW5kLFxuLVx0XHRcdFx0XHQgICAgIHdkZXYtXHUwMDNlY29ubl9ic3NfdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChic3MgPT0gY2JzcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZjI0NjRkMmNlMGQ1YSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0xMDM5LDEyICYjNDM7MTAzOSwzMCBAQCB1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbi1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuLVx0XHRkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcF9oZHIoc2tiKSkgXHUwMDI2IDB4ZmM7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuJiM0MztcdFx0c3RydWN0IGlwaGRyIF9pcGg7XG4mIzQzO1xuJiM0MztcdFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuJiM0MztcdFx0XHRcdFx0IHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4mIzQzO1x0XHRpZiAoIWlwaClcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0ZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKSBcdTAwMjYgMHhmYztcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLVx0XHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2X2hkcihza2IpKSBcdTAwMjYgMHhmYztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1x0XHRzdHJ1Y3QgaXB2NmhkciBfaXA2aDtcbiYjNDM7XG4mIzQzO1x0XHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuJiM0MztcdFx0XHRcdFx0ICBzaXplb2YoKmlwNmgpLCBcdTAwMjZfaXA2aCk7XG4mIzQzO1x0XHRpZiAoIWlwNmgpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdGRzY3AgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpIFx1MDAyNiAweGZjO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIGh0b25zKEVUSF9QX01QTFNfVUMpOlxuIFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX01DKToge1xuIFx0XHRzdHJ1Y3QgbXBsc19sYWJlbCBtcGxzX3RtcCwgKm1wbHM7XG5AQCAtMTIxNyw4ICYjNDM7MTIzNSw3IEBAIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0XHRcdFx0XHRcdCFldi1cdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRVZFTlRfSUJTU19KT0lORUQ6XG4tXHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzaWQsXG4tXHRcdFx0XHRcdCAgICAgICBldi1cdTAwM2Vpai5jaGFubmVsKTtcbiYjNDM7XHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBFVkVOVF9TVE9QUEVEOlxuIFx0XHRcdC8qXG5AQCAtMjQ3NywxNiAmIzQzOzI0OTQsMTUgQEAgc3RhdGljIHZvaWQgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIG5ld19iZWFjb25faW50LFxuIFx0XHRpZiAod2Rldi1cdTAwM2V2YWxpZF9saW5rcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuJiM0MztcdFx0aWYgKCF3ZGV2X2JpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdC8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi9cbiBcdFx0aWYgKHJhZGlvX2lkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi1cdTAwM2VuZXRkZXYpIFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuLVxuLVx0XHRpZiAoIXdkZXZfYmkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghKmJlYWNvbl9pbnRfZ2NkKSB7XG4gXHRcdFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcbiBcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc2Nhbl9kb25lJiMzNDssCiAgICAmIzM0O19fX2NmZzgwMjExX3NjYW5fZG9uZSYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2smIzM0OywKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5zX3dvcmsmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfaWJzc19qb2luZWQmIzM0OywKICAgICYjMzQ7X19jZmc4MDIxMV9pYnNzX2pvaW5lZCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9jbGFzc2lmeTgwMjFkJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfYnNzX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N0b3BfcDJwX2RldmljZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiYzY3MTVlMDFlZDA3MWJiMTY0NDExOTNiNGNkNzVjNTQ3YmQyYjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMTo1MDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMjQ0LDkgJiM0MzsyNDQsOCBAQCB2b2lkIGNmZzgwMjExX3N0b3BfcDJwX2RldmljZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJcmRldi0mZ3Q7b3BlbmNvdW50LS07CiAKIAlpZiAocmRldi0mZ3Q7c2Nhbl9yZXEgJmFtcDsmYW1wOyByZGV2LSZndDtzY2FuX3JlcS0mZ3Q7cmVxLndkZXYgPT0gd2RldikgewotCQlpZiAoV0FSTl9PTighcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKLQkJCSAgICAoIXJkZXYtJmd0O2ludF9zY2FuX3JlcSB8fAotCQkJICAgICAhcmRldi0mZ3Q7aW50X3NjYW5fcmVxLSZndDtub3RpZmllZCkpKQomIzQzOwkJaWYgKCFyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7bm90aWZpZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgICghcmRldi0mZ3Q7aW50X3NjYW5fcmVxIHx8ICFyZGV2LSZndDtpbnRfc2Nhbl9yZXEtJmd0O25vdGlmaWVkKSkKIAkJCXJkZXYtJmd0O3NjYW5fcmVxLSZndDtpbmZvLmFib3J0ZWQgPSB0cnVlOwogCQlfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpOwogCX0KQEAgLTY0Niw2ICYjNDM7NjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsCiAJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7ZGVzdHJveV93b3JrLCBjZmc4MDIxMV9kZXN0cm95X2lmYWNlX3drKTsKIAl3aXBoeV93b3JrX2luaXQoJmFtcDtyZGV2LSZndDtzY2hlZF9zY2FuX3N0b3Bfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcF93ayk7CiAJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7c2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7CiYjNDM7CXdpcGh5X3dvcmtfaW5pdCgmYW1wO3JkZXYtJmd0O3JlZ19jaGVja19jaGFuc193aywgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2spOwomIzQzOwlJTklUX1dPUksoJmFtcDtyZGV2LSZndDtyZWdfbGVhdmVfbmFuX3drLCByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2spOwogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2ssCiAJCSAgY2ZnODAyMTFfcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93ayk7CiAJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7cHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spOwpAQCAtMTM0NSw2ICYjNDM7MTM0Niw3IEBAIHZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JkZXYtJmd0O2Rmc191cGRhdGVfY2hhbm5lbHNfd2spOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JkZXYtJmd0O2JhY2tncm91bmRfY2FjX2RvbmVfd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDtkZXN0cm95X3dvcmspOwomIzQzOwlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7cmVnX2xlYXZlX25hbl93ayk7CiAJZmx1c2hfd29yaygmYW1wO3JkZXYtJmd0O3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDtwcm9wYWdhdGVfY2FjX2RvbmVfd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDttZ210X3JlZ2lzdHJhdGlvbnNfdXBkYXRlX3drKTsKQEAgLTE3NTgsOSAmIzQzOzE3NjAsOSBAQCBzdGF0aWMgaW50IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCXdpcGh5X2xvY2soJmFtcDtyZGV2LSZndDt3aXBoeSk7CiAJCWNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd2Rldi0mZ3Q7aWZ0eXBlLCAtMSk7CiAJCWlmIChyZGV2LSZndDtzY2FuX3JlcSAmYW1wOyZhbXA7IHJkZXYtJmd0O3NjYW5fcmVxLSZndDtyZXEud2RldiA9PSB3ZGV2KSB7Ci0JCQlpZiAoV0FSTl9PTighcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKLQkJCQkgICAgKCFyZGV2LSZndDtpbnRfc2Nhbl9yZXEgfHwKLQkJCQkgICAgICFyZGV2LSZndDtpbnRfc2Nhbl9yZXEtJmd0O25vdGlmaWVkKSkpCiYjNDM7CQkJaWYgKCFyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7bm90aWZpZWQgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoIXJkZXYtJmd0O2ludF9zY2FuX3JlcSB8fAomIzQzOwkJCSAgICAgIXJkZXYtJmd0O2ludF9zY2FuX3JlcS0mZ3Q7bm90aWZpZWQpKQogCQkJCXJkZXYtJmd0O3NjYW5fcmVxLSZndDtpbmZvLmFib3J0ZWQgPSB0cnVlOwogCQkJX19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggYjQ2MTBmNjY4NWRjYi4uNjEzOGQyMDdjYWY0MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC0yNCw2ICYjNDM7MjQsMTYgQEAKIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50IHsKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIGluZm87CiAJYm9vbCBub3RpZmllZDsKJiM0MzsJLyoKJiM0MzsJICogc2V0IHdoaWxlIHRoZSByZXF1ZXN0IGlzIGhhbmRlZCB0byB0aGUgZHJpdmVyLCBpLmUuIGJldHdlZW4KJiM0MzsJICogcmRldl9zY2FuKCkgYW5kIGNmZzgwMjExX3NjYW5fZG9uZSgpCiYjNDM7CSAqLwomIzQzOwlib29sIGRyaXZlcl9vd25zOwomIzQzOwkvKgomIzQzOwkgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGwKJiM0MzsJICogb3ducyBpdCwgc28gdGhhdCBjZmc4MDIxMV9zY2FuX2RvbmUoKSBrbm93cyB0byBqdXN0IGZyZWUgaXQKJiM0MzsJICovCiYjNDM7CWJvb2wgc3RhbGU7CiAJLyogbXVzdCBiZSBsYXN0IC0gdmFyaWFibGUgbWVtYmVycyAqLwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgcmVxOwogfTsKQEAgLTEwNCw2ICYjNDM7MTE0LDggQEAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrOwogCXN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93azsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2NoZWRfc2Nhbl9yZXNfd2s7CiYjNDM7CXN0cnVjdCB3aXBoeV93b3JrIHJlZ19jaGVja19jaGFuc193azsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHJlZ19sZWF2ZV9uYW5fd2s7CiAKIAlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcmFkYXJfY2hhbmRlZjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93azsKQEAgLTI4MCw4ICYjNDM7MjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHsKIAkJCWJvb2wgbG9jYWxseV9nZW5lcmF0ZWQ7CiAJCX0gZGM7CiAJCXN0cnVjdCB7Ci0JCQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CiYjNDM7CQkJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCQl9IGlqOwogCQlzdHJ1Y3QgewogCQkJdTggcGVlcl9hZGRyW0VUSF9BTEVOXTsKQEAgLTM0NCw4ICYjNDM7MzU1LDcgQEAgaW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIHZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7CiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7Ci12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7CiYjNDM7dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvaWJzcy5jIGIvbmV0L3dpcmVsZXNzL2lic3MuYwppbmRleCBiMWQ3NDhiZGI1MDRlLi43ZjY3NzlkMzI2YjgxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9pYnNzLmMKQEAgLTE2LDI2ICYjNDM7MTYsMTggQEAKICNpbmNsdWRlICYjMzQ7cmRldi1vcHMuaCYjMzQ7CiAKIAotdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCiYjNDM7dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcykKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LSZndDtpZWVlODAyMTFfcHRyOwotCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVAogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKICNlbmRpZgogCiAJaWYgKFdBUk5fT04od2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKLQkJcmV0dXJuOwomIzQzOwkJZ290byBwdXRfYnNzOwogCiAJaWYgKCF3ZGV2LSZndDt1Lmlic3Muc3NpZF9sZW4pCi0JCXJldHVybjsKLQotCWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod2Rldi0mZ3Q7d2lwaHksIGNoYW5uZWwsIGJzc2lkLCBOVUxMLCAwLAotCQkJICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpOwotCi0JaWYgKFdBUk5fT04oIWJzcykpCi0JCXJldHVybjsKJiM0MzsJCWdvdG8gcHV0X2JzczsKIAogCWlmICh3ZGV2LSZndDt1Lmlic3MuY3VycmVudF9ic3MpIHsKIAkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LSZndDt1Lmlic3MuY3VycmVudF9ic3MpOwpAQCAtNDMsMTcgJiM0MzszNSwyMiBAQCB2b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAogCX0KIAogCWNmZzgwMjExX2hvbGRfYnNzKGJzc19mcm9tX3B1Yihic3MpKTsKJiM0MzsJLyogdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBldmVudCBpcyB0cmFuc2ZlcnJlZCB0byBjdXJyZW50X2JzcyAqLwogCXdkZXYtJmd0O3UuaWJzcy5jdXJyZW50X2JzcyA9IGJzc19mcm9tX3B1Yihic3MpOwogCiAJY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTsKIAotCW5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi0mZ3Q7d2lwaHkpLCBkZXYsIGJzc2lkLAomIzQzOwlubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtJmd0O3dpcGh5KSwgZGV2LCBic3MtJmd0O2Jzc2lkLAogCQkJCUdGUF9LRVJORUwpOwogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCiAJbWVtc2V0KCZhbXA7d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CiYjNDM7CW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzLSZndDtic3NpZCwgRVRIX0FMRU4pOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZhbXA7d3JxdSwgTlVMTCk7CiAjZW5kaWYKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO3B1dF9ic3M6CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2Rldi0mZ3Q7d2lwaHksIGJzcyk7CiB9CiAKIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLApAQCAtNjIsNiAmIzQzOzU5LDcgQEAgdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtJmd0O3dpcGh5KTsKIAlzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2OwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXRyYWNlX2NmZzgwMjExX2lic3Nfam9pbmVkKGRldiwgYnNzaWQsIGNoYW5uZWwpOwpAQCAtNjksMTMgJiM0Mzs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKIAlpZiAoV0FSTl9PTighY2hhbm5lbCkpCiAJCXJldHVybjsKIAomIzQzOwlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7CiYjNDM7CWlmIChXQVJOX09OKCFic3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWV2ID0ga3phbGxvY19vYmooKmV2LCBnZnApOwotCWlmICghZXYpCiYjNDM7CWlmICghZXYpIHsKJiM0MzsJCWNmZzgwMjExX3B1dF9ic3Mod2Rldi0mZ3Q7d2lwaHksIGJzcyk7CiAJCXJldHVybjsKJiM0MzsJfQogCiAJZXYtJmd0O3R5cGUgPSBFVkVOVF9JQlNTX0pPSU5FRDsKLQltZW1jcHkoZXYtJmd0O2lqLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwotCWV2LSZndDtpai5jaGFubmVsID0gY2hhbm5lbDsKJiM0MzsJZXYtJmd0O2lqLmJzcyA9IGJzczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7d2Rldi0mZ3Q7ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmFtcDtldi0mZ3Q7bGlzdCwgJmFtcDt3ZGV2LSZndDtldmVudF9saXN0KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKQEAgLTQ2NCw3ICYjNDM7NDY0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdHJhY2VfcmRldl9zY2FuKCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJlcXVlc3QpOwomIzQzOwlyZXF1ZXN0LSZndDtkcml2ZXJfb3ducyA9IHRydWU7CiAJcmV0ID0gcmRldi0mZ3Q7b3BzLSZndDtzY2FuKCZhbXA7cmRldi0mZ3Q7d2lwaHksICZhbXA7cmVxdWVzdC0mZ3Q7cmVxKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJlcXVlc3QtJmd0O2RyaXZlcl9vd25zID0gZmFsc2U7CiAJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCBhODMzNmJhZjg1ZGM2Li4xMTY2NWUwYTdlZmM4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC0yMzQ1LDcgJiM0MzsyMzQ1LDcgQEAgc3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogCWlmdHlwZSA9IHdkZXYtJmd0O2lmdHlwZTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZSAqLwotCWlmICghd2Rldi0mZ3Q7bmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKHdkZXYtJmd0O25ldGRldikpCiYjNDM7CWlmICghd2Rldl9ydW5uaW5nKHdkZXYpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qIE5BTiBkb2VzbiYjMzk7dCBoYXZlIGxpbmtzLCBoYW5kbGUgaXQgc2VwYXJhdGVseSAqLwpAQCAtMjQ0NiwxOSAmIzQzOzI0NDYsNTIgQEAgc3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7CiYjNDM7CiYjNDM7CXJkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLAomIzQzOwkJCSAgICByZWdfbGVhdmVfbmFuX3drKTsKJiM0MzsKJiM0MzsJLyogc3RvcHBpbmcgTkFOIGNsb3NlcyBpdHMgZGF0YSBpbnRlcmZhY2VzLCB3aGljaCBuZWVkcyB0aGUgUlROTCAqLwomIzQzOwlydG5sX2xvY2soKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHsKIAkJYm9vbCB2YWxpZDsKIAotCQlzY29wZWRfZ3VhcmQod2lwaHksIHdpcGh5KQotCQkJdmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTsKJiM0MzsJCWlmICh3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc2NvcGVkX2d1YXJkKHdpcGh5LCAmYW1wO3JkZXYtJmd0O3dpcGh5KQomIzQzOwkJCXZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2KTsKIAkJaWYgKCF2YWxpZCkKIAkJCWNmZzgwMjExX2xlYXZlKHJkZXYsIHdkZXYsIC0xKTsKIAl9CiYjNDM7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTsKJiM0MzsJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3dpcGh5LSZndDttdHgpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAocmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2RldikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGVhcmluZyBkb3duIE5BTiBuZWVkcyB0aGUgUlROTCBmb3IgY2xvc2luZyBOQU5fREFUQQomIzQzOwkJICogaW50ZXJmYWNlcywgaGFuZGxlIHRoYXQgc2VwYXJhdGVseS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHdkZXYtJmd0O2lmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4pCiYjNDM7CQkJc2NoZWR1bGVfd29yaygmYW1wO3JkZXYtJmd0O3JlZ19sZWF2ZV9uYW5fd2spOwomIzQzOwkJZWxzZQomIzQzOwkJCWNmZzgwMjExX2xlYXZlX2xvY2tlZChyZGV2LCB3ZGV2LCAtMSk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjQ2NiwxMiAmIzQzOzI0OTksMTMgQEAgc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAogCXByX2RlYnVnKCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcbiYjMzQ7KTsKLQlydG5sX2xvY2soKTsKIAotCWZvcl9lYWNoX3JkZXYocmRldikKLQkJcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoJmFtcDtyZGV2LSZndDt3aXBoeSk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAotCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsICZhbXA7Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KQomIzQzOwkJd2lwaHlfd29ya19xdWV1ZSgmYW1wO3JkZXYtJmd0O3dpcGh5LCAmYW1wO3JkZXYtJmd0O3JlZ19jaGVja19jaGFuc193ayk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5oIGIvbmV0L3dpcmVsZXNzL3JlZy5oCmluZGV4IGZjMzFjNWY5YTYxYWIuLmM1ODcwNzllYWQ4ZmIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvcmVnLmgKQEAgLTE3OCw2ICYjNDM7MTc4LDIyIEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpOwogICovCiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTsKIAomIzQzOy8qKgomIzQzOyAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drIC0gY2hlY2sgaWYgY2hhbm5lbHMgYXJlIG5vIGxvbmdlciB1c2FibGUgYW5kIGxlYXZlCiYjNDM7ICogQHdpcGh5OiB0aGUgd2lwaHkgdG8gY2hlY2sKJiM0MzsgKiBAd29yazogdGhlIHdvcmsgc3RydWN0CiYjNDM7ICovCiYjNDM7dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZQomIzQzOyAqIEB3b3JrOiB0aGUgd29yayBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFN0b3BwaW5nIGEgTkFOIGludGVyZmFjZSBuZWVkcyB0aGUgUlROTCwgc28gaXQgY2Fubm90IGJlIGRvbmUgZnJvbQomIzQzOyAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKCkgd2hpY2ggcnVucyB3aXRoIHRoZSB3aXBoeSBtdXRleCBoZWxkLgomIzQzOyAqLwomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7CiBleHRlcm4gY29uc3QgdTggc2hpcHBlZF9yZWdkYl9jZXJ0c1tdOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjsKIGV4dGVybiBjb25zdCB1OCBleHRyYV9yZWdkYl9jZXJ0c1tdOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC0xMTE0LDYgJiM0MzsxMTE0LDIxIEBAIGludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLAomIzQzOyAqIGUuZy4gbWFjODAyMTEgbWF5IGNhbmNlbCBpdCBhc3luY2hyb25vdXNseSBhbmQgc3RpbGwgdXNlIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKQomIzQzO3sKJiM0MzsJaWYgKCFyZXEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChyZXEtJmd0O2RyaXZlcl9vd25zKQomIzQzOwkJcmVxLSZndDtzdGFsZSA9IHRydWU7CiYjNDM7CWVsc2UKJiM0MzsJCWtmcmVlKHJlcSk7CiYjNDM7fQomIzQzOwogdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgYm9vbCBzZW5kX21lc3NhZ2UpCiB7CkBAIC0xMTczLDEwICYjNDM7MTE4OCwxMCBAQCB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAKIAlkZXZfcHV0KHdkZXYtJmd0O25ldGRldik7CiAKLQlrZnJlZShyZGV2LSZndDtpbnRfc2Nhbl9yZXEpOwomIzQzOwljZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi0mZ3Q7aW50X3NjYW5fcmVxKTsKIAlyZGV2LSZndDtpbnRfc2Nhbl9yZXEgPSBOVUxMOwogCi0Ja2ZyZWUocmRldi0mZ3Q7c2Nhbl9yZXEpOwomIzQzOwljZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi0mZ3Q7c2Nhbl9yZXEpOwogCXJkZXYtJmd0O3NjYW5fcmVxID0gTlVMTDsKIAogCWlmICghc2VuZF9tZXNzYWdlKQpAQCAtMTE5OSw2ICYjNDM7MTIxNCwxOCBAQCB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LAogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gb2xkX2luZm8gPSBpbnRyZXEtJmd0O2luZm87CiAKIAl0cmFjZV9jZmc4MDIxMV9zY2FuX2RvbmUoaW50cmVxLCBpbmZvKTsKJiM0MzsKJiM0MzsJaW50cmVxLSZndDtkcml2ZXJfb3ducyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoaW50cmVxLSZndDtzdGFsZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBzY2FuIGlzIGFscmVhZHkgY29tcGxldGVkIGFzIGZhciBhcyB3ZSYjMzk7cmUgY29uY2VybmVkLAomIzQzOwkJICogaXQgd2FzIGp1c3Qga2VwdCBhcm91bmQgZm9yIHRoZSBkcml2ZXIgLSBkb25lIG5vdywgZnJlZSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJa2ZyZWUoaW50cmVxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCVdBUk5fT04oaW50cmVxICE9IHJkZXYtJmd0O3NjYW5fcmVxICZhbXA7JmFtcDsKIAkJaW50cmVxICE9IHJkZXYtJmd0O2ludF9zY2FuX3JlcSk7CiAKQEAgLTIwNTAsNiAmIzQzOzIwNzcsMTMgQEAgX19jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCWlmICghaGlkZGVuKQogCQkJCWhpZGRlbiA9IHJiX2ZpbmRfYnNzKHJkZXYsIHRtcCwKIAkJCQkJCSAgICAgQlNTX0NNUF9ISURFX05VTCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBPbmx5IGdyb3VwIHdpdGggYW4gZW50cnkgd2l0aCBiZWFjb24gZGF0YSwgb3RoZXJ3aXNlCiYjNDM7CQkJICogYmVhY29uIGRhdGEgY2FuIG5ldmVyIGJlIGZpbGxlZC91cGRhdGVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChoaWRkZW4gJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhcmN1X2FjY2Vzc19wb2ludGVyKGhpZGRlbi0mZ3Q7cHViLmJlYWNvbl9pZXMpKQomIzQzOwkJCQloaWRkZW4gPSBOVUxMOwogCQkJaWYgKGhpZGRlbikgewogCQkJCW5ldy0mZ3Q7cHViLmhpZGRlbl9iZWFjb25fYnNzID0gJmFtcDtoaWRkZW4tJmd0O3B1YjsKIAkJCQlsaXN0X2FkZCgmYW1wO25ldy0mZ3Q7aGlkZGVuX2xpc3QsCkBAIC0zNDY4LDExICYjNDM7MzUwMiw2IEBAIHZvaWQgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeShzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCWNic3MtJmd0O3B1Yi5jaGFubmVsID0gY2hhbjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmYW1wO3JkZXYtJmd0O2Jzc19saXN0LCBsaXN0KSB7Ci0JCWlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLSZndDtwdWIuY2FwYWJpbGl0eSwKLQkJCQkJICAgICBic3MtJmd0O3B1Yi5jaGFubmVsLSZndDtiYW5kLAotCQkJCQkgICAgIHdkZXYtJmd0O2Nvbm5fYnNzX3R5cGUpKQotCQkJY29udGludWU7Ci0KIAkJaWYgKGJzcyA9PSBjYnNzKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IDNlNTg0ZDBjYTNlMjYuLmYyNDY0ZDJjZTBkNWEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtMTAzOSwxMiAmIzQzOzEwMzksMzAgQEAgdW5zaWduZWQgaW50IGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKLQljYXNlIGh0b25zKEVUSF9QX0lQKToKLQkJZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBfaGRyKHNrYikpICZhbXA7IDB4ZmM7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJCXN0cnVjdCBpcGhkciBfaXBoOwomIzQzOwomIzQzOwkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAomIzQzOwkJCQkJIHNpemVvZigqaXBoKSwgJmFtcDtfaXBoKTsKJiM0MzsJCWlmICghaXBoKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKSAmYW1wOyAweGZjOwogCQlicmVhazsKLQljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQlkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2X2hkcihza2IpKSAmYW1wOyAweGZjOwomIzQzOwl9CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoOwomIzQzOwkJc3RydWN0IGlwdjZoZHIgX2lwNmg7CiYjNDM7CiYjNDM7CQlpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAomIzQzOwkJCQkJICBzaXplb2YoKmlwNmgpLCAmYW1wO19pcDZoKTsKJiM0MzsJCWlmICghaXA2aCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWRzY3AgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpICZhbXA7IDB4ZmM7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKToKIAljYXNlIGh0b25zKEVUSF9QX01QTFNfTUMpOiB7CiAJCXN0cnVjdCBtcGxzX2xhYmVsIG1wbHNfdG1wLCAqbXBsczsKQEAgLTEyMTcsOCAmIzQzOzEyMzUsNyBAQCB2b2lkIGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAkJCQkJCSFldi0mZ3Q7ZGMubG9jYWxseV9nZW5lcmF0ZWQpOwogCQkJYnJlYWs7CiAJCWNhc2UgRVZFTlRfSUJTU19KT0lORUQ6Ci0JCQlfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtJmd0O25ldGRldiwgZXYtJmd0O2lqLmJzc2lkLAotCQkJCQkgICAgICAgZXYtJmd0O2lqLmNoYW5uZWwpOwomIzQzOwkJCV9fY2ZnODAyMTFfaWJzc19qb2luZWQod2Rldi0mZ3Q7bmV0ZGV2LCBldi0mZ3Q7aWouYnNzKTsKIAkJCWJyZWFrOwogCQljYXNlIEVWRU5UX1NUT1BQRUQ6CiAJCQkvKgpAQCAtMjQ3NywxNiAmIzQzOzI0OTQsMTUgQEAgc3RhdGljIHZvaWQgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIG5ld19iZWFjb25faW50LAogCQlpZiAod2Rldi0mZ3Q7dmFsaWRfbGlua3MpCiAJCQljb250aW51ZTsKIAomIzQzOwkJd2Rldl9iaSA9IGNmZzgwMjExX3dkZXZfYmkod2Rldik7CiYjNDM7CQlpZiAoIXdkZXZfYmkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi8KIAkJaWYgKHJhZGlvX2lkeCAmZ3Q7PSAwICZhbXA7JmFtcDsKIAkJICAgICEocmRldl9nZXRfcmFkaW9fbWFzayhyZGV2LCB3ZGV2LSZndDtuZXRkZXYpICZhbXA7IEJJVChyYWRpb19pZHgpKSkKIAkJCWNvbnRpbnVlOwogCi0JCXdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpOwotCi0JCWlmICghd2Rldl9iaSkKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghKmJlYWNvbl9pbnRfZ2NkKSB7CiAJCQkqYmVhY29uX2ludF9nY2QgPSB3ZGV2X2JpOwogCQkJY29udGludWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscywgYXMgYWx3YXlzLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgbmV0L3dpcmVsZXNzYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBgY2ZnODAyMTFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgYWxzbyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV2YWx1YXRpbmcgdGhlIHZ1bG5lcmFiaWxpdHkgcG90ZW50aWFsIG9mIHRoZSBwYXRjaC4gVGhlIGZpbGVzIHRvdWNoZWQgc3BhbiBhIGRlY2VudCBjaHVuayBvZiB0aGUgYGNmZzgwMjExYCBjb2RlLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiBGaXJzdCwgdGhlIHJlbW92YWwgb2YgYFdBUk5fT05gIGluIHNjYW4gYWJvcnQgaGFuZGxpbmcuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNpZ25hbCBvZiBwb3RlbnRpYWxseSByZWxheGVkIGVycm9yIGNoZWNrczsgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgYSBiaXQgdGhlcmUuIFNlY29uZCwgdGhlIGluaXRpYWxpemF0aW9uL2ZsdXNoaW5nIG9mIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgaW4gYHdpcGh5X25ld19ubWAgc3VnZ2VzdHMgY2hhbmdlcyB0byB3b3JrIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIHBsYWNlIHRvIHdhdGNoIGNsb3NlbHksIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIGNvbnRleHQuIFRoaXJkLCB0aGUgc2NhbiByZXF1ZXN0IGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMgYmVpbmcgb3ZlcmhhdWxlZCB3aXRoIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgZmxhZ3MuIFRoYXQgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2FpdGluZyB0byBoYXBwZW4uIFRoZSBsb2dpYyBhcm91bmQgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBzY2FuIHJlcXVlc3RzIGlzIG9mdGVuIHRyaWNreS4KClRoZSBmb3VydGggY2hhbmdlLCB3aGljaCBoYXMgdG8gZG8gd2l0aCBob3cgYGNmZzgwMjExX2Jzc2AgcmVmZXJlbmNlcyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgdGhlaXIgcmVsYXRlZCByZWZlcmVuY2UgY291bnRpbmcgYmVpbmcgdGlnaHRlbmVkLCBpcyBhbm90aGVyIGFyZWEgdG8gZm9jdXMgb24uIEZpZnRoLCB0aGUgY2hhbm5lbCBpbnZhbGlkYXRpb24gc3BsaXQgYW5kIHdvcmtxdWV1ZSBjaGFuZ2UgZnJvbSBSVE5MIGxvY2tpbmcgdG8gUkNVIGluIGByZWcuY2AgaXMgc2lnbmlmaWNhbnQuIFRoYXQmIzM5O3MgYSBnb29kIG1vdmUgdG8gaW1wcm92ZSBjb25jdXJyZW5jeSwgYnV0IGl0IGFsc28gb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHN1YnRsZSBpc3N1ZXMgaWYgbm90IGltcGxlbWVudGVkIHBlcmZlY3RseS4gVGhlIHVzZSBvZiBgd2Rldl9ydW5uaW5nKHdkZXYpYCBzdWdnZXN0cyBzb21lIHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgcnVudGltZSBzdGF0ZSBvZiBhIHdpcmVsZXNzIGRldmljZS4gU2l4dGggYW5kIHNldmVudGggdGhlIGNoYW5nZXMgaW4gYHNjYW4uY2AgYW5kIGB1dGlsLmNgIGxvb2sgbGlrZSBpbmNyZW1lbnRhbCBjaGFuZ2VzIHdpdGggcG90ZW50aWFsIGltcGFjdC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSBmdXp6IHRoaXMgd2l0aCBzeXprYWxsZXI/IFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGtub3csIGBjZmc4MDIxMWAsIGBtYWM4MDIxMWAsIGFuZCBhc3NvY2lhdGVkIGNvbXBvbmVudHMgYXJlIGluZGVlZCBmdXp6YWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgYG1hYzgwMjExX2h3c2ltYCBpbnRlcmZhY2UsIE5MODAyMTEsIGFuZCBzaW11bGF0ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyBhcmUgYWxsIGhlYXZpbHkgdXNlZCBpbiBzeXprYWxsZXIuIFRoYXQmIzM5O3MgYSBiaWcgcGx1cywgYnV0IGl0IGlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucy4KCk9rYXksIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgcnVubmluZyBzb21lIGdyZXBzIG9yIGNvZGUgaW5zcGVjdGlvbnMgdG8gY29uZmlybS4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBzaG90LCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRob3JvdWdobHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9mIENGRzgwMjExLiBXaGF0IGZlYXR1cmVzIHJlbHkgb24gaXQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuLCBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgSSBtaWdodCBvdmVybG9vaz8gQSBkZXRhaWxlZCByZXZpZXcgaGVyZSB3aWxsIGhlbHAgZW5zdXJlIHRoZSBlbnRpcmUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgYXMgZXhwZWN0ZWQgYW5kIGF2b2lkIGFueSBydW50aW1lIHN1cnByaXNlcyBsYXRlci4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gbmFpbGluZyBkb3duIGFsbCB0aGUgY29ubmVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHRyb3VibGVzaG9vdGluZyBwYXRoLCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcgc2V0dGluZ3MuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGhpZ2hlci1sZXZlbCBkcml2ZXJzLCBidXQgYSBtaXNjb25maWd1cmF0aW9uIHRoZXJlIGNvdWxkIGJlIHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZS4gQSBzaW1wbGUgb3ZlcnNpZ2h0IGluIHRoZSBzaW11bGF0aW9uIGVudmlyb25tZW50JiMzOTtzIGJ1aWxkIG9wdGlvbnMgY291bGQgZXhwbGFpbiB0aGUgb2RkIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGJ1dCBvbmUgdGhhdCBjb3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgYW5kIHBvdGVudGlhbCBoZWFkYWNoZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhbGwgc3F1YXJlZCBhd2F5IGJlZm9yZSBkaWdnaW5nIGRlZXBlci4gVGhhdCBoYXJkd2FyZSBzaW11bGF0aW9uIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gYmUgdmVyaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEFuYWx5c2lzIGZvciB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGluY2x1ZGUgYXMgRm9jdXNTeW1ib2xzIGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIHRoYXQgYXJlIGVpdGhlciBwdWJsaWMgb3Igb3RoZXJ3aXNlIHNpZ25pZmljYW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzLgoKRmlyc3QsIEkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQ6CgoqICAgYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWAKKiAgIGB3aXBoeV9uZXdfbm1gCiogICBgd2lwaHlfdW5yZWdpc3RlcmAKKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGAKKiAgIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYAoqICAgYGNmZzgwMjExX2lic3Nfam9pbmVkYAoqICAgYHJkZXZfc2NhbmAgKGlubGluZSkgLSBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBzY2FuLmNgIGZvciBjYWxsIHNpdGVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zLgoqICAgYHJlZ193ZGV2X2NoYW5fdmFsaWRgCiogICBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYAoqICAgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYAoqICAgYHJlZ19jaGVja19jaGFuc193b3JrYAoqICAgYGNmZzgwMjExX3B1dF9zY2FuX3JlcWAgKHN0YXRpYykgLSBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMgb25lLgoqICAgYF9fX2NmZzgwMjExX3NjYW5fZG9uZWAKKiAgIGBjZmc4MDIxMV9zY2FuX2RvbmVgCiogICBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYAoqICAgYGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlgCiogICBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAKKiAgIGBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzYAoqICAgYGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhYAoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZmlsdGVyIHRoaXMgbGlzdC4gSSYjMzk7bGwgZmxhZyB0aGUgc3RhdGljIG9uZXMsIGxpa2UgYGNmZzgwMjExX3B1dF9zY2FuX3JlcWAgYW5kIGByZWdfY2hlY2tfY2hhbnNfd29ya2AsIGFzIHBvdGVudGlhbGx5IGxlc3MgaW1wb3J0YW50IHVubGVzcyB0aGV5IGhhdmUgc2lnbmlmaWNhbnQgaW50ZXJuYWwgZGVwZW5kZW5jaWVzIG9yIGFyZSBjYWxsZWQgZnJvbSBvdXRzaWRlLiBUaGUgaW5saW5lIGByZGV2X3NjYW5gIHdpbGwgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgpOZXh0LCBJJiMzOTtsbCB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgc291cmNlIGZpbGVzIHRoZW1zZWx2ZXMgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGU6IGBzY2FuLmNgLCBgaWJzcy5jYCwgYHJlZy5jYCwgYHV0aWwuY2AsIGFuZCBgY29yZS5jYCBhcHBlYXIgdG8gYmUgdGhlIGtleSBhcmVhcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHNlZSB3aGF0IEkgbWlnaHQgYmUgbWlzc2luZy4KCkJhc2VkIG9uIHRoYXQsIGEgc21hbGxlciBzZXQgb2YgY2FuZGlkYXRlcyBlbWVyZ2VzIGFzIHBhcnRpY3VsYXJseSBjcml0aWNhbCB0byBoaWdobGlnaHQ6CgoqICAgYGNmZzgwMjExX3NjYW5fZG9uZWAKKiAgIGBfX19jZmc4MDIxMV9zY2FuX2RvbmVgCiogICBgY2ZnODAyMTFfc2NhbmAgKEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBpbiB0aGUgcGF0Y2ggc2NvcGUpCiogICBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYAoqICAgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYAoqICAgYHJlZ19jaGVja19jaGFuc193b3JrYCAvIGByZWdfY2hlY2tfY2hhbm5lbHNgCiogICBgY2ZnODAyMTFfaWJzc19qb2luZWRgCiogICBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAKKiAgIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYAoqICAgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAKKiAgIGBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5YAoqICAgYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWAKKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGAKCkZpbmFsbHksIEkmIzM5O2xsIGRvIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgZGVmaW5lZCB3aXRoaW4gdGhlIHVwZGF0ZWQgY29kZWJhc2UuIFRoYXQmIzM5O3MgdGhlIGxhc3QgdmVyaWZpY2F0aW9uIEkgbmVlZCB0byBtYWtlIGJlZm9yZSBJJiMzOTttIHNhdGlzZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBjZmc4MDIxMV9zY2FuX2RvbmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3NjYW4uYz0xMjAzPXZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKVxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTIwNy1cbm5ldC93aXJlbGVzcy9zY2FuLmM6MTIwODp2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMjA5LVx0XHRcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gKmluZm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgQW5vbWFsaWVzIGluIExlYXZlIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsZWF2ZSByZWdpc3RyYXRpb24gZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgbWlzc2luZyBvciBpbnZhbGlkIHZhbHVlcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgYXJvdW5kIGxlYXZlIHJlcXVlc3RzLiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiB0d28gc3BlY2lmaWMgdmFyaWFibGVzOiBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCBhbmQgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYC4gSSBzdXNwZWN0IHRoZXNlIHZhcmlhYmxlcyBhcmUga2V5IGluIGZsYWdnaW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGxlYXZlIGVudHJpZXMuIEkgZXhwZWN0IGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIHRvIGFkZHJlc3Mgd2Vla3Mgd2l0aCBtaXNzaW5nIG51bWVyaWNhbCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBhbmQgSSBhbHNvIGV4cGVjdCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgIHRvIGFkZHJlc3Mgd2Vla3Mgd2l0aCBpbmNvcnJlY3Qgb3IgbWlzc2luZyBjaGFubmVsIGluZm9ybWF0aW9uIHRpZWQgdG8gdGhlIGxlYXZlIHJlcXVlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGF0YSBhY3R1YWxseSB0ZWxscyB1cyBhYm91dCB0aGVzZSB2YXJpYWJsZXMuIFRoaXMgbmVlZHMgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdfbGVhdmVfaW52YWxpZF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz01NDg9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy02NDctXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2VzY2hlZF9zY2FuX3Jlc193aywgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzX3drKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjQ4Olx0d2lwaHlfd29ya19pbml0KFx1MDAyNnJkZXYtXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drLCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjY0OTpcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTY1MC1cdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2ssXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTIzMzc9c3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDQ4LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0NDk6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NTAte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc0LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0NzU6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc2LXtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmg9MTc5PXZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuaC0xODEtLyoqXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTgyOiAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drIC0gY2hlY2sgaWYgY2hhbm5lbHMgYXJlIG5vIGxvbmdlciB1c2FibGUgYW5kIGxlYXZlXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTgzLSAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oLTE4NS0gKi9cbm5ldC93aXJlbGVzcy9yZWcuaDoxODY6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7XG5uZXQvd2lyZWxlc3MvcmVnLmgtMTg3LVxubmV0L3dpcmVsZXNzL3JlZy5oLTE4OC0vKipcbm5ldC93aXJlbGVzcy9yZWcuaDoxODk6ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZVxubmV0L3dpcmVsZXNzL3JlZy5oLTE5MC0gKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oLTE5Mi0gKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cbm5ldC93aXJlbGVzcy9yZWcuaDoxOTM6ICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soKSB3aGljaCBydW5zIHdpdGggdGhlIHdpcGh5IG11dGV4IGhlbGQuXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTk0LSAqL1xubmV0L3dpcmVsZXNzL3JlZy5oOjE5NTp2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L3dpcmVsZXNzL3JlZy5oLTE5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBCU1MgVXBkYXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBCU1MgZW50cmllcyBhcmUgaGFuZGxlZCBpbiB0aGUgd2lyZWxlc3Mgc3RhY2ssIGVzcGVjaWFsbHkgY29uY2VybmluZyBhc3NvY2lhdGlvbiB1cGRhdGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWAuIFRoZXNlIGFyZSBjcml0aWNhbCBmb3IgbWFuYWdpbmcgdGhlIGluZm9ybWF0aW9uIGFib3V0IGFjY2VzcyBwb2ludHMgYW5kIGhvdyBvdXIgZGV2aWNlIGFzc29jaWF0ZXMgd2l0aCB0aGVtLCBzbyBJIHdhbnQgYSBjbGVhciBwaWN0dXJlLiBJJiMzOTttIGltYWdpbmluZyBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhcyB0aGUgZm91bmRhdGlvbmFsIGZ1bmN0aW9uLCB0aGUgbG93ZXItbGV2ZWwgd29ya2hvcnNlIHRoYXQgbGlrZWx5IGRvZXMgdGhlIGJ1bGsgb2YgdGhlIGRpcnR5IHdvcmsuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLCB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgQlNTIGVudHJ5IHdpdGggbmV3IGluZm9ybWF0aW9uLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgdGhpbmdzIGdldCBjb25jcmV0ZS4gRnJvbSB0aGVyZSBJJiMzOTttIGd1ZXNzaW5nIGBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5YCBwcm9iYWJseSBzaXRzIGEgbGV2ZWwgaGlnaGVyIGFuZCBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hhdCBuZWVkcyB1cGRhdGluZywgY2FsbHMgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAgYXMgbmVlZGVkLCBhbmQgcGVyaGFwcyBkZWFscyB3aXRoIG1vcmUgYXNzb2NpYXRpb24tc3BlY2lmaWMgbG9naWMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBjb25jdXJyZW50IGFjY2Vzcy4gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQgYW5kIGhvdyBhcmUgdGhvc2Ugc3RydWN0dXJlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgaWYgdGhlIHNhbWUgQlNTIGVudHJ5IGlzIGJlaW5nIHVwZGF0ZWQgZnJvbSBtdWx0aXBsZSBzb3VyY2VzPyBUaGVuIEkmIzM5O2xsIGhhdmUgdG8gc2VlIGlmIHRoZSBzZWNvbmQgZnVuY3Rpb24gbWFrZXMgYSBzZXBhcmF0ZSBjaGVjay4gSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NvY2lhdGlvbiBwcm9jZXNzIG9yIGEgcmVsYXRlZCBjb25uZWN0aW9uIHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBjb21lcyBmcm9tIHRoYXQgaXMgdXNlZCB0byB1cGRhdGUgdGhlIEJTUyBlbnRyeTogSXMgaXQgZnJvbSB0aGUgZmlybXdhcmUsIHRoZSBkcml2ZXIsIG9yIGZyb20gdGhlIHNjYW4gcmVzdWx0cz8gVGhlbiBJJiMzOTtsbCBjaGVjayBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgcmVndWxhdG9yeSBkYXRhYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZmc4MDIxMV9ic3NfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9zY2FuLmM9MjAzND1zdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjIwMzU6X19jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjAzNi1cdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MjE0NT1jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTIxNTEtXHRzcGluX2xvY2tfYmgoXHUwMDI2cmRldi1cdTAwM2Vic3NfbG9jayk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjIxNTI6XHRyZXMgPSBfX2NmZzgwMjExX2Jzc191cGRhdGUocmRldiwgdG1wLCBzaWduYWxfdmFsaWQsIHRzKTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjE1My1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MjMyNT1jZmc4MDIxMV9pbmZvcm1fc2luZ2xlX2Jzc19kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDM5LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xubmV0L3dpcmVsZXNzL3NjYW4uYzoyNDQwOlx0cmVzID0gX19jZmc4MDIxMV9ic3NfdXBkYXRlKHJkZXYsIFx1MDAyNnRtcCwgc2lnbmFsX3ZhbGlkLCB0cyk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTI0NDEtXHRpZiAoIXJlcylcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTI0NjItXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFx1MDAyNnJlcy1cdTAwM2VwdWIpO1xubmV0L3dpcmVsZXNzL3NjYW4uYzoyNDYzOlx0LyogX19jZmc4MDIxMV9ic3NfdXBkYXRlIGdpdmVzIHVzIGEgcmVmZXJlbmNlZCByZXN1bHQgKi9cbm5ldC93aXJlbGVzcy9zY2FuLmMtMjQ2NC1cdHJldHVybiBcdTAwMjZyZXMtXHUwMDNlcHViO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIyOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIDgwMi4xRCBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgY2ZnODAyMTEgZnJhbWV3b3JrLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBiZXR0aW5nIGl0IGhhbmRsZXMgY2xhc3NpZnlpbmcgdHJhZmZpYyBiYXNlZCBvbiB0aGUgODAyLjFEIHN0YW5kYXJkLCBwcm9iYWJseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgcHJpb3JpdHkgYml0cywgb3Igc29tZSBraW5kIG9mIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKSBkZXRlcm1pbmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQmIzM5O3MgZG9pbmcgdGhlIGNsYXNzaWZpY2F0aW9uLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBiaXR3aXNlIGNoZWNrPyBEb2VzIGl0IHV0aWxpemUgbG9va3VwIHRhYmxlcyBvciBzb21lIG1vcmUgY29tcGxleCBhbGdvcml0aG0/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8KCkkgc2hvdWxkIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyB0byB0aGlzIGZ1bmN0aW9uOiB3aGF0IGtpbmQgb2YgcGFja2V0IGluZm9ybWF0aW9uIGlzIGl0IHJlY2VpdmluZz8gSXMgaXQgdGhlIGVudGlyZSBFdGhlcm5ldCBmcmFtZSwganVzdCB0aGUgVkxBTiBoZWFkZXIsIG9yIHNvbWV0aGluZyBlbHNlPyBUaGVuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgb3V0cHV0cyBhcmUg4oCTIGlzIGl0IHJldHVybmluZyBhIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgYSBwcmlvcml0eSB2YWx1ZSwgb3IgbW9kaWZ5aW5nIHNvbWUga2luZCBvZiBpbnRlcm5hbCBzdGF0ZT8gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3Igd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyB1c2VkIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgc29tZSBkZWNlbnQgY29tbWVudHMgd2l0aGluIHRoZSBmdW5jdGlvbiBvciBzdXJyb3VuZGluZyBjb2RlIHRoYXQgd2lsbCBoZWxwLiBLbm93aW5nIHRoZSBpbnRlcm5hbHMgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFFvUyBmbG93LCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IGluIGFueSBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBtYWtlLCBvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfY2xhc3NpZnk4MDIxZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvdXRpbC5jPTEwMTI9RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYW1zZHVfdG9fODAyM3MpO1xuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMTAxNC0vKiBHaXZlbiBhIGRhdGEgZnJhbWUgZGV0ZXJtaW5lIHRoZSA4MDIuMXAvMWQgdGFnIHRvIHVzZS4gKi9cbm5ldC93aXJlbGVzcy91dGlsLmM6MTAxNTp1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMDE2LVx0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9xb3NfbWFwICpxb3NfbWFwKVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMTE2Ni19XG5uZXQvd2lyZWxlc3MvdXRpbC5jOjExNjc6RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKTtcbm5ldC93aXJlbGVzcy91dGlsLmMtMTE2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2AuIEkmIzM5O20gc3RhcnRpbmcgaGVyZSBiZWNhdXNlIHRoaXMgaXMgbGlrZWx5IHRoZSBjZW50cmFsIHBvaW50IGZvciBoYW5kbGluZyBhc3luY2hyb25vdXMgd2lyZWxlc3MgZGV2aWNlIGV2ZW50cyB3aXRoaW4gdGhlIGNmZzgwMjExIGNvcmUsIHJpZ2h0PyBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBldmVudHMgYXJlIHF1ZXVlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSBkZWxpdmVyZWQgdG8gdGhlIHJlbGV2YW50IHVzZXItc3BhY2UgY29tcG9uZW50cyBvciBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZsb3cuIEkgZXhwZWN0IGl0IHRvIGludm9sdmUgc29tZSBzb3J0IG9mIHdvcmtxdWV1ZSBvciB0YXNrbGV0IG1lY2hhbmlzbSwgY29uc2lkZXJpbmcgdGhlIG5lZWQgdG8gZGVjb3VwbGUgZXZlbnQgZ2VuZXJhdGlvbiBmcm9tIHRoZSBjb250ZXh0IHdoZXJlIHRoZSBldmVudCBvY2N1cnMuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IGNvbmN1cnJlbmN5IGlzIG1hbmFnZWQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgd2lyZWxlc3MgZGV2aWNlcy4gSXMgdGhlcmUgYSBsb2NrIHByb3RlY3RpbmcgdGhlIGV2ZW50IHF1ZXVlLCBhbmQgaWYgc28sIHdoYXQmIzM5O3MgaXRzIGdyYW51bGFyaXR5PyBXaGF0IGFib3V0IGV2ZW50IG9yZGVyaW5nPyBJcyB0aGVyZSBhIGd1YXJhbnRlZSBldmVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gYSBzcGVjaWZpYyBzZXF1ZW5jZSwgb3IgaXMgaXQgaGFuZGxlZCBpbiBhICYjMzQ7YmVzdCBlZmZvcnQmIzM0OyBzdHlsZT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGRpZmZlcmVudCBldmVudCB0eXBlcyAoZS5nLiwgc2NhbiByZXN1bHRzLCBjb25uZWN0aW9uIHN0YXR1cyB1cGRhdGVzLCByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzKSBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgaXMgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgZXZlbnRzLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBgd2lwaHlgIHN0cnVjdHVyZXMgY29tZSBpbnRvIHBsYXksIGFzIHRoaXMgaXMgdGhlIGNlbnRyYWwgZGF0YSBzdHJ1Y3R1cmUgaW4gY2ZnODAyMTEgdGhhdCByZXByZXNlbnRzIHRoZSB3aXJlbGVzcyBkZXZpY2UsIGFuZCBuZWVkcyB0byBiZSBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0xNDEwPXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NjQtXHQgKi9cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ2NTpcdGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMod2Rldik7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NjYtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD00ODE9dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dpcGh5X3dvcmtzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDgyLVx0XHRcdFx0ICBzdHJ1Y3Qgd2lwaHlfd29yayAqZW5kKTtcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDgzOnZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDg0LVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmM9MTE4MT12b2lkIGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyMDgtXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyMDk6dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyMTAte1xuLS1cbm5ldC93aXJlbGVzcy91dGlsLmM9MTI2NT12b2lkIGNmZzgwMjExX3Byb2Nlc3NfcmRldl9ldmVudHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMTI3MS1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyNzI6XHRcdGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMod2Rldik7XG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyNzMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGFgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGFgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGJlYWNvbiBpbnRlcnZhbCBkYXRhLCB3aGljaCBpcyBmdW5kYW1lbnRhbCBmb3IgV2ktRmkgY29tbXVuaWNhdGlvbiDigJMgZW5zdXJpbmcgZGV2aWNlcyBrbm93IHdoZW4gdG8gbGlzdGVuIGZvciBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgc3luY2hyb25pemUgdGhlaXIgdHJhbnNtaXNzaW9ucy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgYmVhY29uIGludGVydmFscywgRFRJTSBwZXJpb2RzLCBhbmQgcmVsYXRlZCBwYXJhbWV0ZXJzIGFyZSBpbnRlcmNvbm5lY3RlZCB3aXRoaW4gdGhlIGJyb2FkZXIgODAyLjExIGZyYW1ld29yay4gSSYjMzk7bSBpbW1lZGlhdGVseSBnb2luZyB0byBiZSBsb29raW5nIGZvcjoKCiogICAqKklucHV0IHBhcmFtZXRlcnM6KiogV2hhdCBkYXRhIGRvZXMgaXQgdGFrZSBhcyBpbnB1dD8gSSBleHBlY3QgdGhpbmdzIGxpa2UgY2hhbm5lbCBpbmZvcm1hdGlvbiwgc3VwcG9ydGVkIHJhdGVzLCBjYXBhYmlsaXRpZXMsIGFuZCBwb3RlbnRpYWxseSBzZXR0aW5ncyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgb3IgdmlydHVhbCBpbnRlcmZhY2VzIHRvIGJlIGNyaXRpY2FsLiBLbm93aW5nIHRoZSBpbnB1dCBjb250ZXh0IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYWxnb3JpdGhtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIG1lbnRhbGx5IHZhbGlkYXRlIHRoYXQgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cyBhcmUgY29ycmVjdGx5IHN1cHBsaWVkLgoqICAgKipDYWxjdWxhdGlvbnM6KiogV2hhdCBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBwZXJmb3JtZWQ/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGJlYWNvbiBpbnRlcnZhbCwgRFRJTSBwZXJpb2QsIGFuZCBvdGhlciByZWxhdGVkIGZpZWxkcyBhcmUgY2FsY3VsYXRlZCBhbmQgcG9wdWxhdGVkLCBhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgZGVyaXZlZCBmcm9tIGFueSBleHRlcm5hbCBjb25maWd1cmF0aW9uLiBBbHNvLCBhbnkgb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb25zIHdpbGwgYmUgaW4gbXkgZm9jdXMuCiogICAqKkVycm9yIGhhbmRsaW5nL0VkZ2UgY2FzZXM6KiogV2hhdCBkb2VzIGl0IGRvIGluIGFub21hbG91cyBzaXR1YXRpb25zPyBGb3IgZXhhbXBsZSwgd2hhdCBoYXBwZW5zIGlmIHRoZSBpbnB1dCBpcyBpbmNvbnNpc3RlbnQsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIHVuc3VwcG9ydGVkIHJhdGUgY29tYmluYXRpb24/IEhvdyBkb2VzIGl0IGhhbmRsZSB6ZXJvIHZhbHVlcyBvciB1bnJlYXNvbmFibGUgcmVxdWVzdHMgZm9yIGludGVydmFscz8gSG93IHJvYnVzdCBpcyB0aGUgbG9naWMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbmFsIG9yIHVuZXhwZWN0ZWQgaW5wdXQ/CiogICAqKlJldHVybiB2YWx1ZXMvU2lkZSBlZmZlY3RzOioqIFdoYXQgZG9lcyBpdCByZXR1cm4gb3IgbW9kaWZ5PyBJIGFzc3VtZSBpdCBtaWdodCBiZSByZXR1cm5pbmcgdGhlIGNhbGN1bGF0ZWQgYmVhY29uIGRhdGEgaW4gYSBzcGVjaWZpYyBzdHJ1Y3R1cmUuIEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIG9uIGFueSBnbG9iYWwgdmFyaWFibGVzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggYW55IG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIgb3Iga2VybmVsPwoqICAgKipPcHRpbWl6YXRpb24gR29hbHM6KiogSXMgdGhlcmUgYW55IHdvcmsgZG9uZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbj8KCkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBjb3JlIGxvZ2ljIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3Igb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJJiMzOTtsbCBwcm9iYWJseSBzdGVwIHRocm91Z2ggdGhlIGNvZGUgbWVudGFsbHksIG9yIHdpdGggYSBkZWJ1Z2dlciwgaWYgbmVlZGVkLCBtYWtpbmcgbm90ZXMgb24gYW55dGhpbmcgdGhhdCBzZWVtcyBub24tb2J2aW91cyBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBkZWJ1Z2dpbmcgYW55IHdpcmVsZXNzIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3V0aWwuYz0yNDYwPXN0YXRpYyBpbnQgY2ZnODAyMTFfd2Rldl9iaShzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMjQ3Ny1cbm5ldC93aXJlbGVzcy91dGlsLmM6MjQ3ODpzdGF0aWMgdm9pZCBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgbmV3X2JlYWNvbl9pbnQsXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTI0NzktXHRcdFx0XHQgICAgICAgdTMyICpiZWFjb25faW50X2djZCxcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jPTI1MjU9aW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMS1cdCAqIHRvIGNmZzgwMjExX2NoZWNrX2NvbWJpbmF0aW9ucygpLCBpbiB3aGljaCBjYXNlIHdlJiMzOTtsbCB2YWxpZGF0ZSBtb3JlXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjI1MzI6XHQgKiB0aHJvdWdoIHRoZSBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YSgpIGNhbGwgYW5kIGNvZGUgaW5cbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMy1cdCAqIGNmZzgwMjExX2l0ZXJfY29tYmluYXRpb25zKCkuXG4tLVxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNTQyPWludCBjZmc4MDIxMV9pdGVyX2NvbWJpbmF0aW9ucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMjU3MC1cdCAqL1xubmV0L3dpcmVsZXNzL3V0aWwuYzoyNTcxOlx0Y2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEod2lwaHksIHBhcmFtcy1cdTAwM2VuZXdfYmVhY29uX2ludCxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjU3Mi1cdFx0XHRcdCAgIFx1MDAyNmJlYWNvbl9pbnRfZ2NkLCBcdTAwMjZiZWFjb25faW50X2RpZmZlcmVudCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MTAKCQkJCQkJCW91dHB1dDogMzc1CgkJCQkJCQl0aG91Z2h0czogMTIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQcm9wb3NlZCBjZmc4MDIxMSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsIHdpdGhpbiB0aGUgYGNmZzgwMjExYCBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSB3aGVyZSB0aGlzIGNvZGUgaXMgY2FsbGVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGNmZzgwMjExX2l0ZXJfY29tYmluYXRpb25zYCBhbmQgb3RoZXIgY2FsbGVycyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGVuIEkmIzM5O2xsIG1ldGljdWxvdXNseSByZXZpZXcgdGhlIGNoYW5nZXMgdGhpcyBwYXRjaCBtYWtlcy4KCkZpcnN0LCB3aXRoaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCB0aGUgcGF0Y2ggcmVtb3ZlcyBzb21lIGBXQVJOX09OYCBjaGVja3MgaW4gYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWAgYW5kIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGAgLSBwcm9iYWJseSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHNlZSB3aHkgdGhlc2UgY2hlY2tzIHdlcmUgZGVlbWVkIHVubmVjZXNzYXJ5LiBJdCBhbHNvIGluaXRpYWxpemVzIGFuZCBmbHVzaGVzIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgaW4gdGhlIHJlZ2lzdGVyZWQgZGV2aWNlIGxpZmVjeWNsZS4KCmBuZXQvd2lyZWxlc3MvY29yZS5oYCBzaG93cyBzdHJ1Y3QgY2hhbmdlczogYWRkaW5nIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgdG8gYGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnRgLCBhbmQgYWRkaW5nIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdGhlIGBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZWAgc3RydWN0LiBBbHNvLCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiBmb3IgYGlqYCBub3cgaG9sZHMgYSBgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzYC4KCmBuZXQvd2lyZWxlc3MvaWJzcy5jYCBtb2RpZmllcyBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAgYW5kIGBjZmc4MDIxMV9pYnNzX2pvaW5lZGAgcmVsYXRlZCB0byBCU1MgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwYXNzaW5nIGEgQlNTIHBvaW50ZXIgYWNyb3NzIGV2ZW50cy4KCmBuZXQvd2lyZWxlc3MvcmRldi1vcHMuaGAgaGFzIHRoZSBgcmRldl9zY2FuYCBmdW5jdGlvbiBzZXR0aW5nIGBkcml2ZXJfb3duc2AgdG8gdHJ1ZSwgYW5kIGNsZWFyaW5nIGl0IG9uIGVycm9yLgoKYG5ldC93aXJlbGVzcy9yZWcuY2AgaW50cm9kdWNlcyBhc3luYyB3b3JrZXJzIGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgIGZvciByZWd1bGF0b3J5IGNoYW5uZWwvTkFOIGxlYXZlcywgYW5kIGByZWdfY2hlY2tfY2hhbnNfd29ya2AgdG8gcXVldWUgYHJlZ19jaGVja19jaGFuc193a2AgZm9yIGFsbCByZGV2cyB1bmRlciBSQ1UuIEl0IGFsc28gdXNlcyBgd2Rldl9ydW5uaW5nKHdkZXYpYCBpbiBgcmVnX3dkZXZfY2hhbl92YWxpZGAuCgpgbmV0L3dpcmVsZXNzL3NjYW4uY2AgY29uY2VybnMgaXRzZWxmIHdpdGggdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2Ygc2NhbiByZXF1ZXN0cyB2aWEgYHN0YWxlYCBhbmQgYGRyaXZlcl9vd25zYCBpbiBgY2ZnODAyMTFfcHV0X3NjYW5fcmVxYCwgYF9fX2NmZzgwMjExX3NjYW5fZG9uZWAsIGFuZCBgY2ZnODAyMTFfc2Nhbl9kb25lYC4gVGhlIHBhdGNoIGFsc28gdmFsaWRhdGVzIGJlYWNvbiBkYXRhIGZvciBoaWRkZW4gQlNTIHZpYSBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhbmQgc2ltcGxpZmllcyBhIGNoZWNrIGluIGBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5YC4KCkZpbmFsbHksIGBuZXQvd2lyZWxlc3MvdXRpbC5jYCB1c2VzIGBza2JfaGVhZGVyX3BvaW50ZXJgIHNhZmVseSBhY2Nlc3MgcGFja2V0IGhlYWRlcnMgaW4gYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgLCBoYW5kbGVzIGFuIHVwZGF0ZWQgYEVWRU5UX0lCU1NfSk9JTkVEYCB3aXRoIHRoZSBCU1MgcG9pbnRlciBpbiBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2AsIGFuZCBmaXhlcyBiZWFjb24gaW50ZXJ2YWwgY2FsY3VsYXRpb24gaW4gYGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdpdGhpbiBhIGZ1enppbmcgY29udGV4dCBsaWtlIFFFTVUgYW5kIHN5emthbGxlci4gU2luY2UgYGNmZzgwMjExYCBpcyB0aGUgY29yZSwgYW5kIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIG5sODAyMTEgc29ja2V0cywgbWFjODAyMTEvbWFjODAyMTFfaHdzaW0sIHdpcmVsZXNzIGV4dGVuc2lvbnMsIHBhY2tldCBzb2NrZXRzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBpcyBrbm93biB0byB0YXJnZXQgbmw4MDIxMSBleHRlbnNpdmVseS4KCk5leHQsIHRoZSBjb25maWd1cmF0aW9ucyBhcmUga2V5LiBXZSBuZWVkIGBDRkc4MDIxMWAsIG9idmlvdXNseS4gV2UgYWxzbyBuZWVkIGBNQUM4MDIxMV9IV1NJTWAgYW5kIG9yIGBOTDgwMjExYC4gSSYjMzk7bGwgY29uZmlybSB0aGF0IGBDRkc4MDIxMWAgZG9lc24mIzM5O3QgcmVxdWlyZSBhbnl0aGluZyBlbHNlLCBidXQgSSBzYXcgYSBtZW50aW9uIG9mIGBDRkc4MDIxMV9XRVhUYCBpbiBgaWJzcy5jYCwgc28gSSYjMzk7bGwgaW5jbHVkZSBpdC4gU28sIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgc2hvdWxkIGJlIHRoZSBjb25maWd1cmF0aW9ucyB0byBpbmNsdWRlLgoKTm93IGZvciB0aGUgdGFyZ2V0ZWQgc3ltYm9sczogV2Ugc2hvdWxkIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIG1vZGlmaWVkIG9yIG5ld2x5IGltcGxlbWVudGVkIGZ1bmN0aW9uczogYGNmZzgwMjExX3NjYW5fZG9uZWAsIGBfX19jZmc4MDIxMV9zY2FuX2RvbmVgLCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgLCBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCwgYHJlZ19jaGVja18KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3NjYW5fZG9uZSYjMzQ7LAogICAgJiMzNDtfX19jZmc4MDIxMV9zY2FuX2RvbmUmIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2smIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfbmFuX3drJiMzNDssCiAgICAmIzM0O3JlZ19jaGVja19jaGFuc193b3JrJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX2lic3Nfam9pbmVkJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfaWJzc19qb2luZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfY2xhc3NpZnk4MDIxZCYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX2Jzc191cGRhdGUmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2UmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc2Nhbl9kb25lJiMzNDssCiAgICAmIzM0O19fX2NmZzgwMjExX3NjYW5fZG9uZSYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2smIzM0OywKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5zX3dvcmsmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfaWJzc19qb2luZWQmIzM0OywKICAgICYjMzQ7X19jZmc4MDIxMV9pYnNzX2pvaW5lZCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9jbGFzc2lmeTgwMjFkJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfYnNzX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N0b3BfcDJwX2RldmljZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBwYWNrZXQgcGFyc2luZyBhY3Jvc3MgY2ZnODAyMTE6XG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxuMy4gSUJTUyBldmVudCBoYW5kbGluZzogUGFzc2VzIEJTUyByZWZlcmVuY2VzIGRpcmVjdGx5IHRvIGV2ZW50IHByb2Nlc3NpbmcgcmF0aGVyIHRoYW4gcmUtbG9va2luZyB0aGVtIHVwOyBhbGwgZXZlbnQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHByb3Blcmx5IG1hbmFnZWQuXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmM2NzE1ZTAxZWQwNzFiYjE2NDQxMTkzYjRjZDc1YzU0N2JkMmI2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDE6NTA6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBkMTMzMTBmZWY2OTFhLi42NjgzODBkZWVjN2RhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTI0NCw5ICYjNDM7MjQ0LDggQEAgdm9pZCBjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJkZXYtJmd0O29wZW5jb3VudC0tOwogCiAJaWYgKHJkZXYtJmd0O3NjYW5fcmVxICZhbXA7JmFtcDsgcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O3JlcS53ZGV2ID09IHdkZXYpIHsKLQkJaWYgKFdBUk5fT04oIXJkZXYtJmd0O3NjYW5fcmVxLSZndDtub3RpZmllZCAmYW1wOyZhbXA7Ci0JCQkgICAgKCFyZGV2LSZndDtpbnRfc2Nhbl9yZXEgfHwKLQkJCSAgICAgIXJkZXYtJmd0O2ludF9zY2FuX3JlcS0mZ3Q7bm90aWZpZWQpKSkKJiM0MzsJCWlmICghcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIXJkZXYtJmd0O2ludF9zY2FuX3JlcSB8fCAhcmRldi0mZ3Q7aW50X3NjYW5fcmVxLSZndDtub3RpZmllZCkpCiAJCQlyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7aW5mby5hYm9ydGVkID0gdHJ1ZTsKIAkJX19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTsKIAl9CkBAIC02NDYsNiAmIzQzOzY0NSw4IEBAIHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LAogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O2Rlc3Ryb3lfd29yaywgY2ZnODAyMTFfZGVzdHJveV9pZmFjZV93ayk7CiAJd2lwaHlfd29ya19pbml0KCZhbXA7cmRldi0mZ3Q7c2NoZWRfc2Nhbl9zdG9wX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Bfd2spOwogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O3NjaGVkX3NjYW5fcmVzX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHNfd2spOwomIzQzOwl3aXBoeV93b3JrX2luaXQoJmFtcDtyZGV2LSZndDtyZWdfY2hlY2tfY2hhbnNfd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7cmVnX2xlYXZlX25hbl93aywgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKTsKIAlJTklUX1dPUksoJmFtcDtyZGV2LSZndDtwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLAogCQkgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spOwogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O3Byb3BhZ2F0ZV9jYWNfZG9uZV93aywgY2ZnODAyMTFfcHJvcGFnYXRlX2NhY19kb25lX3drKTsKQEAgLTEzNDUsNiAmIzQzOzEzNDYsNyBAQCB2b2lkIHdpcGh5X3VucmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtyZGV2LSZndDtkZnNfdXBkYXRlX2NoYW5uZWxzX3drKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtyZGV2LSZndDtiYWNrZ3JvdW5kX2NhY19kb25lX3drKTsKIAlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7ZGVzdHJveV93b3JrKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3JkZXYtJmd0O3JlZ19sZWF2ZV9uYW5fd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDtwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drKTsKIAlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7cHJvcGFnYXRlX2NhY19kb25lX3drKTsKIAlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7bWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7CkBAIC0xNzU4LDkgJiM0MzsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCQl3aXBoeV9sb2NrKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwogCQljZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtJmd0O2lmdHlwZSwgLTEpOwogCQlpZiAocmRldi0mZ3Q7c2Nhbl9yZXEgJmFtcDsmYW1wOyByZGV2LSZndDtzY2FuX3JlcS0mZ3Q7cmVxLndkZXYgPT0gd2RldikgewotCQkJaWYgKFdBUk5fT04oIXJkZXYtJmd0O3NjYW5fcmVxLSZndDtub3RpZmllZCAmYW1wOyZhbXA7Ci0JCQkJICAgICghcmRldi0mZ3Q7aW50X3NjYW5fcmVxIHx8Ci0JCQkJICAgICAhcmRldi0mZ3Q7aW50X3NjYW5fcmVxLSZndDtub3RpZmllZCkpKQomIzQzOwkJCWlmICghcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgKCFyZGV2LSZndDtpbnRfc2Nhbl9yZXEgfHwKJiM0MzsJCQkgICAgICFyZGV2LSZndDtpbnRfc2Nhbl9yZXEtJmd0O25vdGlmaWVkKSkKIAkJCQlyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7aW5mby5hYm9ydGVkID0gdHJ1ZTsKIAkJCV9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtMjQsNiAmIzQzOzI0LDE2IEBACiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7CiAJc3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvOwogCWJvb2wgbm90aWZpZWQ7CiYjNDM7CS8qCiYjNDM7CSAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuCiYjNDM7CSAqIHJkZXZfc2NhbigpIGFuZCBjZmc4MDIxMV9zY2FuX2RvbmUoKQomIzQzOwkgKi8KJiM0MzsJYm9vbCBkcml2ZXJfb3duczsKJiM0MzsJLyoKJiM0MzsJICogc2V0IHdoZW4gY2ZnODAyMTEgaXMgZG9uZSB3aXRoIHRoZSByZXF1ZXN0IGJ1dCB0aGUgZHJpdmVyIHN0aWxsCiYjNDM7CSAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0CiYjNDM7CSAqLwomIzQzOwlib29sIHN0YWxlOwogCS8qIG11c3QgYmUgbGFzdCAtIHZhcmlhYmxlIG1lbWJlcnMgKi8KIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHJlcTsKIH07CkBAIC0xMDQsNiAmIzQzOzExNCw4IEBAIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yazsKIAlzdHJ1Y3Qgd2lwaHlfd29yayBzY2hlZF9zY2FuX3N0b3Bfd2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkX3NjYW5fcmVzX3drOwomIzQzOwlzdHJ1Y3Qgd2lwaHlfd29yayByZWdfY2hlY2tfY2hhbnNfd2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZWdfbGVhdmVfbmFuX3drOwogCiAJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHJhZGFyX2NoYW5kZWY7CiAJc3RydWN0IHdvcmtfc3RydWN0IHByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2s7CkBAIC0yODAsOCAmIzQzOzI5Miw3IEBAIHN0cnVjdCBjZmc4MDIxMV9ldmVudCB7CiAJCQlib29sIGxvY2FsbHlfZ2VuZXJhdGVkOwogCQl9IGRjOwogCQlzdHJ1Y3QgewotCQkJdTggYnNzaWRbRVRIX0FMRU5dOwotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwomIzQzOwkJCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKIAkJfSBpajsKIAkJc3RydWN0IHsKIAkJCXU4IHBlZXJfYWRkcltFVEhfQUxFTl07CkBAIC0zNDQsOCAmIzQzOzM1NSw3IEBAIGludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpOwogaW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpOwotdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwomIzQzO3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOwogaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmMKaW5kZXggYjFkNzQ4YmRiNTA0ZS4uN2Y2Nzc5ZDMyNmI4MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvaWJzcy5jCkBAIC0xNiwyNiAmIzQzOzE2LDE4IEBACiAjaW5jbHVkZSAmIzM0O3JkZXYtb3BzLmgmIzM0OwogCiAKLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQomIzQzO3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKLQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAjZW5kaWYKIAogCWlmIChXQVJOX09OKHdkZXYtJmd0O2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCi0JCXJldHVybjsKJiM0MzsJCWdvdG8gcHV0X2JzczsKIAogCWlmICghd2Rldi0mZ3Q7dS5pYnNzLnNzaWRfbGVuKQotCQlyZXR1cm47Ci0KLQlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCwKLQkJCSAgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfSUJTUywgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKLQotCWlmIChXQVJOX09OKCFic3MpKQotCQlyZXR1cm47CiYjNDM7CQlnb3RvIHB1dF9ic3M7CiAKIAlpZiAod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKSB7CiAJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKTsKQEAgLTQzLDE3ICYjNDM7MzUsMjIgQEAgdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKIAl9CiAKIAljZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7CiYjNDM7CS8qIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgZXZlbnQgaXMgdHJhbnNmZXJyZWQgdG8gY3VycmVudF9ic3MgKi8KIAl3ZGV2LSZndDt1Lmlic3MuY3VycmVudF9ic3MgPSBic3NfZnJvbV9wdWIoYnNzKTsKIAogCWNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMod2Rldik7CiAKLQlubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtJmd0O3dpcGh5KSwgZGV2LCBic3NpZCwKJiM0MzsJbmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LSZndDt3aXBoeSksIGRldiwgYnNzLSZndDtic3NpZCwKIAkJCQlHRlBfS0VSTkVMKTsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVAogCW1lbXNldCgmYW1wO3dycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOwomIzQzOwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0mZ3Q7YnNzaWQsIEVUSF9BTEVOKTsKIAl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmYW1wO3dycXUsIE5VTEwpOwogI2VuZGlmCiYjNDM7CXJldHVybjsKJiM0MzsKJiM0MztwdXRfYnNzOgomIzQzOwljZmc4MDIxMV9wdXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBic3MpOwogfQogCiB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKQEAgLTYyLDYgJiM0Mzs1OSw3IEBAIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtJmd0O2llZWU4MDIxMV9wdHI7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LSZndDt3aXBoeSk7CiAJc3RydWN0IGNmZzgwMjExX2V2ZW50ICpldjsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl0cmFjZV9jZmc4MDIxMV9pYnNzX2pvaW5lZChkZXYsIGJzc2lkLCBjaGFubmVsKTsKQEAgLTY5LDEzICYjNDM7NjcsMTkgQEAgdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCiAJaWYgKFdBUk5fT04oIWNoYW5uZWwpKQogCQlyZXR1cm47CiAKJiM0MzsJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LSZndDt3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpOwomIzQzOwlpZiAoV0FSTl9PTighYnNzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlldiA9IGt6YWxsb2Nfb2JqKCpldiwgZ2ZwKTsKLQlpZiAoIWV2KQomIzQzOwlpZiAoIWV2KSB7CiYjNDM7CQljZmc4MDIxMV9wdXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBic3MpOwogCQlyZXR1cm47CiYjNDM7CX0KIAogCWV2LSZndDt0eXBlID0gRVZFTlRfSUJTU19KT0lORUQ7Ci0JbWVtY3B5KGV2LSZndDtpai5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQlldi0mZ3Q7aWouY2hhbm5lbCA9IGNoYW5uZWw7CiYjNDM7CWV2LSZndDtpai5ic3MgPSBic3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3dkZXYtJmd0O2V2ZW50X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7ZXYtJmd0O2xpc3QsICZhbXA7d2Rldi0mZ3Q7ZXZlbnRfbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLmFkY2ZkMDI3OGRhMzIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCkBAIC00NjQsNyAmIzQzOzQ2NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCByZGV2X3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXRyYWNlX3JkZXZfc2NhbigmYW1wO3JkZXYtJmd0O3dpcGh5LCByZXF1ZXN0KTsKJiM0MzsJcmVxdWVzdC0mZ3Q7ZHJpdmVyX293bnMgPSB0cnVlOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7c2NhbigmYW1wO3JkZXYtJmd0O3dpcGh5LCAmYW1wO3JlcXVlc3QtJmd0O3JlcSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXF1ZXN0LSZndDtkcml2ZXJfb3ducyA9IGZhbHNlOwogCXRyYWNlX3JkZXZfcmV0dXJuX2ludCgmYW1wO3JkZXYtJmd0O3dpcGh5LCByZXQpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggYTgzMzZiYWY4NWRjNi4uMTE2NjVlMGE3ZWZjOCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtMjM0NSw3ICYjNDM7MjM0NSw3IEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAlpZnR5cGUgPSB3ZGV2LSZndDtpZnR5cGU7CiAKIAkvKiBtYWtlIHN1cmUgdGhlIGludGVyZmFjZSBpcyBhY3RpdmUgKi8KLQlpZiAoIXdkZXYtJmd0O25ldGRldiB8fCAhbmV0aWZfcnVubmluZyh3ZGV2LSZndDtuZXRkZXYpKQomIzQzOwlpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKiBOQU4gZG9lc24mIzM5O3QgaGF2ZSBsaW5rcywgaGFuZGxlIGl0IHNlcGFyYXRlbHkgKi8KQEAgLTI0NDYsMTkgJiM0MzsyNDQ2LDUyIEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSkKJiM0Mzt2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpOwomIzQzOwomIzQzOwlyZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwKJiM0MzsJCQkgICAgcmVnX2xlYXZlX25hbl93ayk7CiYjNDM7CiYjNDM7CS8qIHN0b3BwaW5nIE5BTiBjbG9zZXMgaXRzIGRhdGEgaW50ZXJmYWNlcywgd2hpY2ggbmVlZHMgdGhlIFJUTkwgKi8KJiM0MzsJcnRubF9sb2NrKCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiAJCWJvb2wgdmFsaWQ7CiAKLQkJc2NvcGVkX2d1YXJkKHdpcGh5LCB3aXBoeSkKLQkJCXZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7CiYjNDM7CQlpZiAod2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNjb3BlZF9ndWFyZCh3aXBoeSwgJmFtcDtyZGV2LSZndDt3aXBoeSkKJiM0MzsJCQl2YWxpZCA9IHJlZ193ZGV2X2NoYW5fdmFsaWQoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2Rldik7CiAJCWlmICghdmFsaWQpCiAJCQljZmc4MDIxMV9sZWF2ZShyZGV2LCB3ZGV2LCAtMSk7CiAJfQomIzQzOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt3aXBoeS0mZ3Q7bXR4KTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRlYXJpbmcgZG93biBOQU4gbmVlZHMgdGhlIFJUTkwgZm9yIGNsb3NpbmcgTkFOX0RBVEEKJiM0MzsJCSAqIGludGVyZmFjZXMsIGhhbmRsZSB0aGF0IHNlcGFyYXRlbHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh3ZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKQomIzQzOwkJCXNjaGVkdWxlX3dvcmsoJmFtcDtyZGV2LSZndDtyZWdfbGVhdmVfbmFuX3drKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljZmc4MDIxMV9sZWF2ZV9sb2NrZWQocmRldiwgd2RldiwgLTEpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTI0NjYsMTIgJiM0MzsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAKIAlwcl9kZWJ1ZygmIzM0O1ZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXG4mIzM0Oyk7Ci0JcnRubF9sb2NrKCk7CiAKLQlmb3JfZWFjaF9yZGV2KHJkZXYpCi0JCXJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAKLQlydG5sX3VubG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCAmYW1wO2NmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkKJiM0MzsJCXdpcGh5X3dvcmtfcXVldWUoJmFtcDtyZGV2LSZndDt3aXBoeSwgJmFtcDtyZGV2LSZndDtyZWdfY2hlY2tfY2hhbnNfd2spOwomIzQzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCBmYzMxYzVmOWE2MWFiLi5jNTg3MDc5ZWFkOGZiIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC0xNzgsNiAmIzQzOzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTsKICAqLwogdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZCk7CiAKJiM0MzsvKioKJiM0MzsgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayAtIGNoZWNrIGlmIGNoYW5uZWxzIGFyZSBubyBsb25nZXIgdXNhYmxlIGFuZCBsZWF2ZQomIzQzOyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrCiYjNDM7ICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdAomIzQzOyAqLwomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGUKJiM0MzsgKiBAd29yazogdGhlIHdvcmsgc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb20KJiM0MzsgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOwogZXh0ZXJuIGNvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc2hpcHBlZF9yZWdkYl9jZXJ0c19sZW47CiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCmluZGV4IDllOTM0YjE4NWUzNDEuLmNhYTljNjQ5NWYyMGMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMTExNCw2ICYjNDM7MTExNCwyMSBAQCBpbnQgY2ZnODAyMTFfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgdGhlIHNjYW4gcmVxdWVzdCwgYnV0IGZyZWUgaXQgb25seSBpZiB0aGUgZHJpdmVyIGlzIGFsc28gZG9uZSwKJiM0MzsgKiBlLmcuIG1hYzgwMjExIG1heSBjYW5jZWwgaXQgYXN5bmNocm9ub3VzbHkgYW5kIHN0aWxsIHVzZSBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBjZmc4MDIxMV9wdXRfc2Nhbl9yZXEoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKnJlcSkKJiM0Mzt7CiYjNDM7CWlmICghcmVxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocmVxLSZndDtkcml2ZXJfb3ducykKJiM0MzsJCXJlcS0mZ3Q7c3RhbGUgPSB0cnVlOwomIzQzOwllbHNlCiYjNDM7CQlrZnJlZShyZXEpOwomIzQzO30KJiM0MzsKIHZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgIGJvb2wgc2VuZF9tZXNzYWdlKQogewpAQCAtMTE3MywxMCAmIzQzOzExODgsMTAgQEAgdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCiAJZGV2X3B1dCh3ZGV2LSZndDtuZXRkZXYpOwogCi0Ja2ZyZWUocmRldi0mZ3Q7aW50X3NjYW5fcmVxKTsKJiM0MzsJY2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtJmd0O2ludF9zY2FuX3JlcSk7CiAJcmRldi0mZ3Q7aW50X3NjYW5fcmVxID0gTlVMTDsKIAotCWtmcmVlKHJkZXYtJmd0O3NjYW5fcmVxKTsKJiM0MzsJY2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtJmd0O3NjYW5fcmVxKTsKIAlyZGV2LSZndDtzY2FuX3JlcSA9IE5VTEw7CiAKIAlpZiAoIXNlbmRfbWVzc2FnZSkKQEAgLTExOTksNiAmIzQzOzEyMTQsMTggQEAgdm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCwKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIG9sZF9pbmZvID0gaW50cmVxLSZndDtpbmZvOwogCiAJdHJhY2VfY2ZnODAyMTFfc2Nhbl9kb25lKGludHJlcSwgaW5mbyk7CiYjNDM7CiYjNDM7CWludHJlcS0mZ3Q7ZHJpdmVyX293bnMgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGludHJlcS0mZ3Q7c3RhbGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgc2NhbiBpcyBhbHJlYWR5IGNvbXBsZXRlZCBhcyBmYXIgYXMgd2UmIzM5O3JlIGNvbmNlcm5lZCwKJiM0MzsJCSAqIGl0IHdhcyBqdXN0IGtlcHQgYXJvdW5kIGZvciB0aGUgZHJpdmVyIC0gZG9uZSBub3csIGZyZWUgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWtmcmVlKGludHJlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlXQVJOX09OKGludHJlcSAhPSByZGV2LSZndDtzY2FuX3JlcSAmYW1wOyZhbXA7CiAJCWludHJlcSAhPSByZGV2LSZndDtpbnRfc2Nhbl9yZXEpOwogCkBAIC0yMDUwLDYgJiM0MzsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQlpZiAoIWhpZGRlbikKIAkJCQloaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsCiAJCQkJCQkgICAgIEJTU19DTVBfSElERV9OVUwpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogT25seSBncm91cCB3aXRoIGFuIGVudHJ5IHdpdGggYmVhY29uIGRhdGEsIG90aGVyd2lzZQomIzQzOwkJCSAqIGJlYWNvbiBkYXRhIGNhbiBuZXZlciBiZSBmaWxsZWQvdXBkYXRlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGlkZGVuICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tJmd0O3B1Yi5iZWFjb25faWVzKSkKJiM0MzsJCQkJaGlkZGVuID0gTlVMTDsKIAkJCWlmIChoaWRkZW4pIHsKIAkJCQluZXctJmd0O3B1Yi5oaWRkZW5fYmVhY29uX2JzcyA9ICZhbXA7aGlkZGVuLSZndDtwdWI7CiAJCQkJbGlzdF9hZGQoJmFtcDtuZXctJmd0O2hpZGRlbl9saXN0LApAQCAtMzQ2OCwxMSAmIzQzOzM1MDIsNiBAQCB2b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAljYnNzLSZndDtwdWIuY2hhbm5lbCA9IGNoYW47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmFtcDtyZGV2LSZndDtic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoIWNmZzgwMjExX2Jzc190eXBlX21hdGNoKGJzcy0mZ3Q7cHViLmNhcGFiaWxpdHksCi0JCQkJCSAgICAgYnNzLSZndDtwdWIuY2hhbm5lbC0mZ3Q7YmFuZCwKLQkJCQkJICAgICB3ZGV2LSZndDtjb25uX2Jzc190eXBlKSkKLQkJCWNvbnRpbnVlOwotCiAJCWlmIChic3MgPT0gY2JzcykKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCAzZTU4NGQwY2EzZTI2Li5mMjQ2NGQyY2UwZDVhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTEwMzksMTIgJiM0MzsxMDM5LDMwIEBAIHVuc2lnbmVkIGludCBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKHN0cnVjdCBza19idWZmICpza2IsCiAJfQogCiAJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUCk6Ci0JCWRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcihza2IpKSAmYW1wOyAweGZjOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQKTogewomIzQzOwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiYjNDM7CQlzdHJ1Y3QgaXBoZHIgX2lwaDsKJiM0MzsKJiM0MzsJCWlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKJiM0MzsJCQkJCSBzaXplb2YoKmlwaCksICZhbXA7X2lwaCk7CiYjNDM7CQlpZiAoIWlwaCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgJmFtcDsgMHhmYzsKIAkJYnJlYWs7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKLQkJZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSkgJmFtcDsgMHhmYzsKJiM0MzsJfQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyIF9pcDZoOwomIzQzOwomIzQzOwkJaXA2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKJiM0MzsJCQkJCSAgc2l6ZW9mKCppcDZoKSwgJmFtcDtfaXA2aCk7CiYjNDM7CQlpZiAoIWlwNmgpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQlkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKSAmYW1wOyAweGZjOwogCQlicmVhazsKJiM0MzsJfQogCWNhc2UgaHRvbnMoRVRIX1BfTVBMU19VQyk6CiAJY2FzZSBodG9ucyhFVEhfUF9NUExTX01DKTogewogCQlzdHJ1Y3QgbXBsc19sYWJlbCBtcGxzX3RtcCwgKm1wbHM7CkBAIC0xMjE3LDggJiM0MzsxMjM1LDcgQEAgdm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCiAJCQkJCQkhZXYtJmd0O2RjLmxvY2FsbHlfZ2VuZXJhdGVkKTsKIAkJCWJyZWFrOwogCQljYXNlIEVWRU5UX0lCU1NfSk9JTkVEOgotCQkJX19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LSZndDtuZXRkZXYsIGV2LSZndDtpai5ic3NpZCwKLQkJCQkJICAgICAgIGV2LSZndDtpai5jaGFubmVsKTsKJiM0MzsJCQlfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtJmd0O25ldGRldiwgZXYtJmd0O2lqLmJzcyk7CiAJCQlicmVhazsKIAkJY2FzZSBFVkVOVF9TVE9QUEVEOgogCQkJLyoKQEAgLTI0NzcsMTYgJiM0MzsyNDk0LDE1IEBAIHN0YXRpYyB2b2lkIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBuZXdfYmVhY29uX2ludCwKIAkJaWYgKHdkZXYtJmd0O3ZhbGlkX2xpbmtzKQogCQkJY29udGludWU7CiAKJiM0MzsJCXdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpOwomIzQzOwkJaWYgKCF3ZGV2X2JpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQkvKiBza2lwIHdkZXZzIG5vdCBhY3RpdmUgb24gdGhlIGdpdmVuIHdpcGh5IHJhZGlvICovCiAJCWlmIChyYWRpb19pZHggJmd0Oz0gMCAmYW1wOyZhbXA7CiAJCSAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi0mZ3Q7bmV0ZGV2KSAmYW1wOyBCSVQocmFkaW9faWR4KSkpCiAJCQljb250aW51ZTsKIAotCQl3ZGV2X2JpID0gY2ZnODAyMTFfd2Rldl9iaSh3ZGV2KTsKLQotCQlpZiAoIXdkZXZfYmkpCi0JCQljb250aW51ZTsKLQogCQlpZiAoISpiZWFjb25faW50X2djZCkgewogCQkJKmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTsKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBkaWZmLgoKSSYjMzk7bSBzZWVpbmcgYSBudW1iZXIgb2YgY2hhbmdlcywgYW5kIG15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyB0aGUgd2lyZWxlc3MgY29yZSBpcyBiZWluZyB0b3VjaGVkIGhlYXZpbHkuIFRoZSBtb3N0IGludGVyZXN0aW5nIGFyZWFzIGFyZSBsaWtlbHkgdGhvc2UgdGhhdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBhc3BlY3RzOgoKMS4gICoqRGF0YSBTdHJ1Y3R1cmUgQ2hhbmdlczoqKiBUaGUgYWRkaXRpb24gb2YgYGRyaXZlcl9vd25zYCwgYHN0YWxlYCwgYHJlZ19jaGVja19jaGFuc193a2AsIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdmFyaW91cyBzdHJ1Y3RzIGlzIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBhcmUgcG9zc2libGUuIFRoZSBjaGFuZ2VzIHRvIGBjZmc4MDIxMV9ldmVudGAgYW5kIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHRoZSBhbGxvY2F0aW9uIG9mIGBic3NgIGFuZCB0aGUgcmVmZXJlbmNlIGhhbmRsaW5nLiBBbnkgdGltZSBhIGBic3NgIGlzIG1hbmlwdWxhdGVkLCBJJiMzOTttIGFscmVhZHkgY2F1dGlvdXMuCgoyLiAgKipXb3JrcXVldWUgSW50cm9kdWN0aW9uczoqKiBUaGUgaW50cm9kdWN0aW9uIG9mIHdvcmtxdWV1ZXMgKGByZWdfY2hlY2tfY2hhbnNfd2tgLCBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYCkgYWx3YXlzIGRlbWFuZHMgc2NydXRpbnkuIFdvcmtxdWV1ZXMgb2Z0ZW4gaW52b2x2ZSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhbmQgY2FuIGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIExvY2tpbmcgaW1wcm92ZW1lbnRzIGFyZSBnb29kLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXkgYXJlIGNvcnJlY3QgYW5kIHJvYnVzdC4KCjMuICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEkgbmVlZCB0byBjbG9zZWx5IGludmVzdGlnYXRlIGBjZmc4MDIxMV9wdXRfc2Nhbl9yZXFgICh3aXRoIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWApIGFuZCBlbnN1cmUgc2NhbiByZXF1ZXN0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHksIGF2b2lkaW5nIG1lbW9yeSBsZWFrcyBvciBkb3VibGUtZnJlZXMuCgo0LiAgKipgc2tiX2hlYWRlcl9wb2ludGVyYCBVc2FnZToqKiBUaGUgdXNhZ2Ugb2YgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW4gYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgIGlzIGEgcHJpbWUgc3VzcGVjdC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBwYXJ0aWN1bGFybHkgc2luY2UgaXQgaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20gdGhlIFNLQi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzIHByb3Blcmx5IHNpemVkIGFuZCB0aGF0IHRoZSBjb3B5IGRvZXNuJiMzOTt0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBTS0IsIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy4gSSBrbm93IHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBkZXRhaWxzLiBIb3dldmVyLCBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgYWZ0ZXIgdGhlIGBza2JfaGVhZGVyX3BvaW50ZXJgIGNhbGwuIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBsb29rIGF0IGxpbmUgMTAzOSBpbiBgbmV0L3dpcmVsZXNzL3V0aWwuY2AuIFRoaXMgaXMgbXkgcHJpbWFyeSBhcmVhIG9mIGNvbmNlcm4gYmVjYXVzZSBpdCBpcyB0b3VjaGluZyBtZW1vcnkuCgo1LiAqKldBUk5fT04gcmVtb3ZhbHM6KiogV2hpbGUgdGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgcmVtb3ZpbmcgYFdBUk5fT05gIHN0YXRlbWVudHMgaXMgYWxzbyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhdHRlbnRpb24uIFdBUk5fT04gc3RhdGVtZW50cyBhcmUgZ2VuZXJhbGx5IHRoZXJlIGZvciBhIHJlYXNvbiwgbmFtZWx5IHRvIHN0b3AgdGhpbmdzIGZyb20gcHJvY2VlZGluZyB0aGF0IHRoZSBkZXZlbG9wZXIgZGlkbiYjMzk7dCBleHBlY3QgdG8gaGFwcGVuLiBXaXRob3V0IGl0LCB5b3UgYXJlIG1vcmUgbGlrZWx5IHRvIHJ1biBpbnRvIHVuZGVmaW5lZCBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZXNlIGFyZWFzLiBJIHdpbGwgc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIEJhc2VkIG9uIG15IGZpbmRpbmdzIGZyb20gdGhpcyBtb3JlIGluLWRlcHRoIGFuYWx5c2lzLCBJIHdpbGwgbWFrZSB0aGUgZmluYWwgZGVjaXNpb24gYWJvdXQgc3Bpbm5pbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy91dGlsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzA6XHRcdH1cbjEwMzE6XHRcbjEwMzI6XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4xMDMzOlx0XHRcdHZsYW5fcHJpb3JpdHkgPSAoc2tiX3ZsYW5fdGFnX2dldChza2IpIFx1MDAyNiBWTEFOX1BSSU9fTUFTSylcbjEwMzQ6XHRcdFx0XHRcdTAwM2VcdTAwM2UgVkxBTl9QUklPX1NISUZUO1xuMTAzNTpcdFx0XHRpZiAodmxhbl9wcmlvcml0eSBcdTAwM2UgMCkge1xuMTAzNjpcdFx0XHRcdHJldCA9IHZsYW5fcHJpb3JpdHk7XG4xMDM3Olx0XHRcdFx0Z290byBvdXQ7XG4xMDM4Olx0XHRcdH1cbjEwMzk6XHRcdH1cbjEwNDA6XHRcbjEwNDE6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4xMDQyOlx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xuMTA0MzpcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbjEwNDQ6XHRcdFx0c3RydWN0IGlwaGRyIF9pcGg7XG4xMDQ1Olx0XG4xMDQ2Olx0XHRcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcbjEwNDc6XHRcdFx0XHRcdFx0IHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4xMDQ4Olx0XHRcdGlmICghaXBoKVxuMTA0OTpcdFx0XHRcdHJldHVybiAwO1xuMTA1MDpcdFxuMTA1MTpcdFx0XHRkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcGgpIFx1MDAyNiAweGZjO1xuMTA1MjpcdFx0XHRicmVhaztcbjEwNTM6XHRcdH1cbjEwNTQ6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHtcbjEwNTU6XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmg7XG4xMDU2Olx0XHRcdHN0cnVjdCBpcHY2aGRyIF9pcDZoO1xuMTA1NzpcdFxuMTA1ODpcdFx0XHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuMTA1OTpcdFx0XHRcdFx0XHQgIHNpemVvZigqaXA2aCksIFx1MDAyNl9pcDZoKTtcbjEwNjA6XHRcdFx0aWYgKCFpcDZoKVxuMTA2MTpcdFx0XHRcdHJldHVybiAwO1xuMTA2MjpcdFxuMTA2MzpcdFx0XHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKSBcdTAwMjYgMHhmYztcbjEwNjQ6XHRcdFx0YnJlYWs7XG4xMDY1Olx0XHR9XG4xMDY2Olx0XHRjYXNlIGh0b25zKEVUSF9QX01QTFNfVUMpOlxuMTA2NzpcdFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX01DKToge1xuMTA2ODpcdFx0XHRzdHJ1Y3QgbXBsc19sYWJlbCBtcGxzX3RtcCwgKm1wbHM7XG4xMDY5Olx0XG4xMDcwOlx0XHRcdG1wbHMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkciksXG4xMDcxOlx0XHRcdFx0XHRcdCAgc2l6ZW9mKCptcGxzKSwgXHUwMDI2bXBsc190bXApO1xuMTA3MjpcdFx0XHRpZiAoIW1wbHMpXG4xMDczOlx0XHRcdFx0cmV0dXJuIDA7XG4xMDc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgY29kZSBtb2RpZmljYXRpb25zLiBGaXJzdCwgcmVnYXJkaW5nIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCwgSSBub3RpY2VkIGEgY2hhbmdlIGluIGhvdyB0aGUgSVAgaGVhZGVyIGlzIGFjY2Vzc2VkLiBQcmV2aW91c2x5LCBpdCByZWxpZWQgb24gZGlyZWN0IGFjY2VzcyB2aWEgYGlwX2hkcihza2IpYCBhbmQgYGlwdjZfaGRyKHNrYilgLiBOb3csIGl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW5zdGVhZC4gVGhlIHJhdGlvbmFsZSBzZWVtcyBzb3VuZCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyYCBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQgb3IgdGhlIGhlYWRlciBoYXNuJiMzOTt0IGJlZW4gcHVsbGVkIHlldC4gVGhpcyByZXBsYWNlbWVudCBhbGlnbnMgd2l0aCB0aGUgYXBwcm9hY2ggdXNlZCBpbiB0aGUgTVBMUyBzY2VuYXJpbywgZW1wbG95aW5nIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZvciBzYWZlIGNvcHlpbmcgb3IgcmVmZXJlbmNpbmcgb2YgZGF0YSB3aXRoaW4gdGhlIHNrYiwgd2l0aCBsZW5ndGggdmFsaWRhdGlvbi4gR29vZCBjYXRjaCwgbWl0aWdhdGluZyBwb3RlbnRpYWwgY3Jhc2hlcyBkdWUgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgSUJTUyBqb2luIHByb2Nlc3MsIHNwZWNpZmljYWxseSBgY2ZnODAyMTFfaWJzc19qb2luZWRgIGFuZCBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAuIEluIGBjZmc4MDIxMV9pYnNzX2pvaW5lZGAsIHRoZSB1c2Ugb2YgYGt6YWxsb2Nfb2JqYCBlbnN1cmVzIGEgemVyb2VkIGFsbG9jYXRpb24gZm9yIHRoZSBldmVudCBzdHJ1Y3R1cmUuIFRoaXMgaXMgZm9sbG93ZWQgYnkgYXNzaWduaW5nIHRoZSBldmVudCB0eXBlIGFuZCBCU1MgcG9pbnRlci4gVGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAgaW52b2x2ZXMgc2VuZGluZyB0aGUgSUJTUyBCU1NJRCBhbmQgY29weWluZyBpdCB0byBhIGB3cnF1YCBzdHJ1Y3R1cmUuIFRoZSBCU1NJRCwgY3JpdGljYWwgaGVyZSwgaXMgc291cmNlZCBmcm9tIHRoZSBgY2ZnODAyMTFfYnNzYCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHBvcHVsYXRlZCBkdXJpbmcgQlNTIGNyZWF0aW9uIG9yIGRpc2NvdmVyeS4gRXZlcnl0aGluZyBzZWVtcyBzdHJhaWdodGZvcndhcmQgaW4gdGVybXMgb2YgZGF0YSBmbG93LgoKRmluYWxseSwgSSYjMzk7bGwgdHJhY2UgdGhlIHNjYW4gcmVxdWVzdCBsaWZlY3ljbGUuIFRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludGAgaXMgaW5pdGlhdGVkIGluIGBjZmc4MDIxMV9zY2FuYCBhbmQgYG5sODAyMTFfdHJpZ2dlcl9zY2FuYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgZXhhY3QgYWxsb2NhdGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZSBpcyBtYW5hZ2VkIHRocm91Z2hvdXQgaXRzIGxpZmV0aW1lLCBpbmNsdWRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBgZHJpdmVyX293bnNgIGFuZCBgc3RhbGVgIHN0YXRlcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipzY2FuX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byB0aGUgU2NhbiBSZXF1ZXN0IEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50YCBzdHJ1Y3R1cmVzLCBvciBzcGVjaWZpY2FsbHkgdGhlIGBzY2FuX3JlcWAgaW5zdGFuY2VzLCBhcmUgYmVpbmcgYWxsb2NhdGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL3NjYW4uY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYyBzdXJyb3VuZGluZyB3aXJlbGVzcyBzY2FubmluZywgc28gSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiB0aGVyZS4gSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiB0aGF0IGZpbGUgZm9yIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscywgc3VjaCBhcyBga21hbGxvY2AsIGBremFsbG9jYCwgb3IgYW55IGN1c3RvbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtIG1pZ2h0IGVtcGxveS4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgc3BlY2lmaWMgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIG9yIHBvb2xzIGluIHBsYWNlIGZvciB0aGlzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCB0cmFjZSBob3cgdGhlc2UgYHNjYW5fcmVxYCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgcG9wdWxhdGVkLCBhbmQgdWx0aW1hdGVseSByZWxlYXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Nhbl9yZXEuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmM9MjI5PXZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0NS1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MjQ2Olx0aWYgKHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDctXHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjQ4LVx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNDk6XHRcdFx0cmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yNTAtXHRcdF9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzA5PXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NjEtXHRcdGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd2Rldi1cdTAwM2VpZnR5cGUsIC0xKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTc2MjpcdFx0aWYgKHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzYzLVx0XHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NjUtXHRcdFx0ICAgICAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzY2Olx0XHRcdFx0cmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzY3LVx0XHRcdF9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMTI3Mj1zdGF0aWMgaW50IG5sODAyMTFfdHJpZ2dlcl9zY2FuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTUwMy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTE1MDQ6XHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gcmVxdWVzdDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTE1MDUtXHRlcnIgPSBjZmc4MDIxMV9zY2FuKHJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTE1MTUtIG91dF9mcmVlOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMTUxNjpcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSBOVUxMO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTUxNy1cdGtmcmVlKHJlcXVlc3QpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTE5NjU9c3RhdGljIGludCBubDgwMjExX3N0YXJ0X3NjaGVkX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTgyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMTk4MzpcdHNjaGVkX3NjYW5fcmVxID0gbmw4MDIxMV9wYXJzZV9zY2hlZF9zY2FuKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTg0LVx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VhdHRycyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTk0LVx0aWYgKHdhbnRfbXVsdGkgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNld2lwaHkubWF4X3NjaGVkX3NjYW5fcmVxcyBcdTAwM2UgMSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTE5OTU6XHRcdHNjaGVkX3NjYW5fcmVxLVx1MDAzZXJlcWlkID0gY2ZnODAyMTFfYXNzaWduX2Nvb2tpZShyZGV2KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTE5OTYtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIwMDE6XHRzY2hlZF9zY2FuX3JlcS1cdTAwM2VkZXYgPSBkZXY7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDAyOlx0c2NoZWRfc2Nhbl9yZXEtXHUwMDNld2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIwMDQtXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU09DS0VUX09XTkVSXSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIwMDU6XHRcdHNjaGVkX3NjYW5fcmVxLVx1MDAzZW93bmVyX25scG9ydGlkID0gaW5mby1cdTAwM2VzbmRfcG9ydGlkO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwNi1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIwNjg3PXN0YXRpYyBpbnQgbmw4MDIxMV9hZGRfc2Nhbl9yZXEoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjg5LXtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2OTA6XHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxID0gcmRldi1cdTAwM2VzY2FuX3JlcTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2OTEtXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjMxMjc9c3RhdGljIGludCBubDgwMjExX25ldGxpbmtfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMxNDYtXHRcdFx0XHRcdGxpc3QpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMxNDc6XHRcdFx0aWYgKHNjaGVkX3NjYW5fcmVxLVx1MDAzZW93bmVyX25scG9ydGlkID09IG5vdGlmeS1cdTAwM2Vwb3J0aWQpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMxNDg6XHRcdFx0XHRzY2hlZF9zY2FuX3JlcS1cdTAwM2VubF9vd25lcl9kZWFkID0gdHJ1ZTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMxNDktXHRcdFx0XHR3aXBoeV93b3JrX3F1ZXVlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYz04NDQ9c3RhdGljIGludCBjZmc4MDIxMV9zY2FuXzZnaHooc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtODQ5LVx0aW50IG5fY2hhbm5lbHMsIGNvdW50ID0gMCwgZXJyO1xubmV0L3dpcmVsZXNzL3NjYW4uYzo4NTA6XHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxdWVzdCwgKnJkZXZfcmVxID0gcmRldi1cdTAwM2VzY2FuX3JlcTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtODUxLVx0TElTVF9IRUFEKGNvbG9jX2FwX2xpc3QpO1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA0NS1cdGlmIChyZXF1ZXN0LVx1MDAzZXJlcS5uX2NoYW5uZWxzKSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEwNDY6XHRcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpvbGQgPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA0Ny1cbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA0ODpcdFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSByZXF1ZXN0O1xubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDQ5LVxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA1NC1cdFx0aWYgKCFmaXJzdF9wYXJ0IFx1MDAyNlx1MDAyNiAhV0FSTl9PTighb2xkKSlcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA1NTpcdFx0XHRyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2VpbmZvID0gb2xkLVx1MDAzZWluZm87XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNTYtXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDU4LVx0XHRpZiAoZXJyKSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEwNTk6XHRcdFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBvbGQ7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNjAtXHRcdFx0a2ZyZWUocmVxdWVzdCk7XG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMDcyPWludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNzQtXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxdWVzdDtcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA3NTpcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpyZGV2X3JlcSA9IHJkZXYtXHUwMDNlc2Nhbl9yZXE7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNzYtXHR1MzIgbl9jaGFubmVscyA9IDAsIGlkeCwgaTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMTItXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExMTM6XHRyZGV2LVx1MDAzZWludF9zY2FuX3JlcSA9IHJlcXVlc3Q7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMTQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTExMzI9dm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE5MS1cdGNmZzgwMjExX3B1dF9zY2FuX3JlcShyZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExOTI6XHRyZGV2LVx1MDAzZWludF9zY2FuX3JlcSA9IE5VTEw7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExOTMtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExOTQtXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VzY2FuX3JlcSk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExOTU6XHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE5Ni1cbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTEyMDg9dm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCxcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTAte1xubmV0L3dpcmVsZXNzL3NjYW4uYzoxMjExOlx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKmludHJlcSA9XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTItXHRcdGNvbnRhaW5lcl9vZihyZXF1ZXN0LCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCwgcmVxKTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTEzOTY9aW50IF9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTE0MDItXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjE0MDM6XHRzY2hlZF9zY2FuX3JlcSA9IGNmZzgwMjExX2ZpbmRfc2NoZWRfc2Nhbl9yZXEocmRldiwgcmVxaWQpO1xubmV0L3dpcmVsZXNzL3NjYW4uYy0xNDA0LVx0aWYgKCFzY2hlZF9zY2FuX3JlcSlcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM1NjY9aW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMzU3MS1cdHN0cnVjdCB3aXBoeSAqd2lwaHk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1NzI6XHRzdHJ1Y3QgaXdfc2Nhbl9yZXEgKndyZXEgPSBOVUxMO1xubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTczLVx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKmNyZXE7XG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNjk0LVx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM2OTU6XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSBjcmVxO1xubmV0L3dpcmVsZXNzL3NjYW4uYy0zNjk2LVx0XHRlcnIgPSByZGV2X3NjYW4ocmRldiwgY3JlcSk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM2OTctXHRcdGlmIChlcnIpIHtcbm5ldC93aXJlbGVzcy9zY2FuLmM6MzY5ODpcdFx0XHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzY5OS1cdFx0XHQvKiBjcmVxIHdpbGwgYmUgZnJlZWQgYmVsb3cgKi9cbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmM9NjQ9c3RhdGljIGludCBjZmc4MDIxMV9jb25uX3NjYW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTMxLVxubmV0L3dpcmVsZXNzL3NtZS5jOjEzMjpcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSByZXF1ZXN0O1xubmV0L3dpcmVsZXNzL3NtZS5jLTEzMy1cbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5LVx0fSBlbHNlIHtcbm5ldC93aXJlbGVzcy9zbWUuYzoxNDA6XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSBOVUxMO1xubmV0L3dpcmVsZXNzL3NtZS5jLTE0MS1cdFx0a2ZyZWUocmVxdWVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzk5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFNjYW4gUmVxdWVzdCBBbGxvY2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBzY2FuIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aGVuIHRyaWdnZXJlZCB2aWEgYG5sODAyMTFfdHJpZ2dlcl9zY2FuYCBvciBkaXJlY3RseSB0aHJvdWdoIGBjZmc4MDIxMV9zY2FuYC4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGNvbnRlbnRpb24uCgpJJiMzOTtsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYG5sODAyMTEuY2AsIGFuZCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTEzMDAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBraW5kcyBvZiBhbGxvY2F0aW9ucyBoYXBwZW4sIHNvIGhvcGVmdWxseSwgdGhlIGNyZWF0aW9uIG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmlnaHQgdGhlcmUgaW4gZnJvbnQgb2YgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyB0aGUgc2NhbiBpbml0aWF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzMDA6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTMwMTpcdFx0XHRzY2FuX2ZyZXFzID0gaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRX0tIWl07XG4xMTMwMjpcdFx0XHRzY2FuX2ZyZXFzX2toeiA9IHRydWU7XG4xMTMwMzpcdFx0fSBlbHNlIGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSlcbjExMzA0Olx0XHRcdHNjYW5fZnJlcXMgPSBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXTtcbjExMzA1Olx0XG4xMTMwNjpcdFx0aWYgKHNjYW5fZnJlcXMpIHtcbjExMzA3Olx0XHRcdG5fY2hhbm5lbHMgPSB2YWxpZGF0ZV9zY2FuX2ZyZXFzKHNjYW5fZnJlcXMpO1xuMTEzMDg6XHRcdFx0aWYgKCFuX2NoYW5uZWxzKVxuMTEzMDk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzEwOlx0XHR9IGVsc2Uge1xuMTEzMTE6XHRcdFx0bl9jaGFubmVscyA9IGllZWU4MDIxMV9nZXRfbnVtX3N1cHBvcnRlZF9jaGFubmVscyh3aXBoeSk7XG4xMTMxMjpcdFx0fVxuMTEzMTM6XHRcbjExMzE0Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pXG4xMTMxNTpcdFx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApXG4xMTMxNjpcdFx0XHRcdG5fc3NpZHMmIzQzOyYjNDM7O1xuMTEzMTc6XHRcbjExMzE4Olx0XHRpZiAobl9zc2lkcyBcdTAwM2Ugd2lwaHktXHUwMDNlbWF4X3NjYW5fc3NpZHMpXG4xMTMxOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzIwOlx0XG4xMTMyMTpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSlcbjExMzIyOlx0XHRcdGllX2xlbiA9IG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSUVdKTtcbjExMzIzOlx0XHRlbHNlXG4xMTMyNDpcdFx0XHRpZV9sZW4gPSAwO1xuMTEzMjU6XHRcbjExMzI2Olx0XHRpZiAoaWVfbGVuIFx1MDAzZSB3aXBoeS1cdTAwM2VtYXhfc2Nhbl9pZV9sZW4pXG4xMTMyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzI4Olx0XG4xMTMyOTpcdFx0c2l6ZSA9IHN0cnVjdF9zaXplKHJlcXVlc3QsIHJlcS5jaGFubmVscywgbl9jaGFubmVscyk7XG4xMTMzMDpcdFx0c3NpZHNfb2Zmc2V0ID0gc2l6ZTtcbjExMzMxOlx0XHRzaXplID0gc2l6ZV9hZGQoc2l6ZSwgYXJyYXlfc2l6ZShzaXplb2YoKnJlcXVlc3QtXHUwMDNlcmVxLnNzaWRzKSwgbl9zc2lkcykpO1xuMTEzMzI6XHRcdGllX29mZnNldCA9IHNpemU7XG4xMTMzMzpcdFx0c2l6ZSA9IHNpemVfYWRkKHNpemUsIGllX2xlbik7XG4xMTMzNDpcdFx0cmVxdWVzdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4xMTMzNTpcdFx0aWYgKCFyZXF1ZXN0KVxuMTEzMzY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTMzNzpcdFxuMTEzMzg6XHRcdGlmIChuX3NzaWRzKVxuMTEzMzk6XHRcdFx0cmVxdWVzdC1cdTAwM2VyZXEuc3NpZHMgPSAodm9pZCAqKXJlcXVlc3QgJiM0Mzsgc3NpZHNfb2Zmc2V0O1xuMTEzNDA6XHRcdHJlcXVlc3QtXHUwMDNlcmVxLm5fc3NpZHMgPSBuX3NzaWRzO1xuMTEzNDE6XHRcdGlmIChpZV9sZW4pXG4xMTM0MjpcdFx0XHRyZXF1ZXN0LVx1MDAzZXJlcS5pZSA9ICh2b2lkICopcmVxdWVzdCAmIzQzOyBpZV9vZmZzZXQ7XG4xMTM0MzpcdFxuMTEzNDQ6XHRcdGkgPSAwO1xuMTEzNDU6XHRcdGlmIChzY2FuX2ZyZXFzKSB7XG4xMTM0NjpcdFx0XHQvKiB1c2VyIHNwZWNpZmllZCwgYmFpbCBvdXQgaWYgY2hhbm5lbCBub3QgZm91bmQgKi9cbjExMzQ3Olx0XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgc2Nhbl9mcmVxcywgdG1wKSB7XG4xMTM0ODpcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbjExMzQ5Olx0XHRcdFx0aW50IGZyZXEgPSBubGFfZ2V0X3UzMihhdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MzMKCQkJCQkJCW91dHB1dDogMjkyCgkJCQkJCQl0aG91Z2h0czogOTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIElkZW50aWZpZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhlIGNvcmUgZm9jdXMgb2YgdGhpcyBwYXRjaCBzZXJpZXMgaXMgb24gaGFyZGVuaW5nIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBhcm91bmQgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgc2FmZXR5LCBhbmQgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgdGhlIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2gsIGRlc3BpdGUgdGhpcyBiZWluZyBhIGtlcm5lbCBjb2RlIHJldmlldyBhbmQgbm90IGEgZnV6emluZyBleGVyY2lzZS4KCkZpcnN0LCBJIG5vdGUgdGhlIHVzZSBvZiBga3phbGxvY2AgZm9yIHRoZSBgcmVxdWVzdGAgc3RydWN0dXJlLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgYGRyaXZlcl9vd25zYCBhbmQgYHN0YWxlYCB0byBmYWxzZSAoMCksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5zdXJpbmcgYSBrbm93biBzdGF0ZS4gVGhlbiwgSSBleGFtaW5lZCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc2l0aW9uIGZyb20gYGlqYCB0byBgYnNzYCBpbiBgY2ZnODAyMTFfaWJzc19qb2luZWRgLiBUaGUgYGt6YWxsb2NgIGFsbG9jYXRpb24gYW5kIHN1YnNlcXVlbnQgYXNzaWdubWVudCAoYGV2LSZndDtpai5ic3MgPSBic3M7YCkgc2hvdWxkLCBpbiBwcmluY2lwbGUsIHByZXZlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGUgc3Vic2VxdWVudCB1c2FnZSBpbiBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2Agc2VlbXMgc2FmZSBnaXZlbiB0aGlzIGluaXRpYWxpemF0aW9uLgoKSSB0aGVuIGxvb2tlZCBhdCB0aGUgd29ya3F1ZXVlIGNoYW5nZXMgaW4gYHJlZy5jYCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gYGNmZzgwMjExX2xlYXZlYCBjYWxscy4gVGhlIHVzZSBvZiBgd2lwaHlfd29ya19pbml0YCBhbmQgYElOSVRfV09SS2AgY291cGxlZCB3aXRoIHRoZSBjaGVja3Mgd2l0aGluIGByZWdfd2Rldl9jaGFuX3ZhbGlkYCBzdWdnZXN0cyB0aGUgaW50ZW50aW9uIGlzIHRvIGF2b2lkIGxvY2tpbmcgaW52ZXJzaW9ucy4gVGhlIGNvbW1lbnRzIGFib3V0IExPQ0tERVAgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgcmVpbmZvcmNlIHRoaXMuIEkgc2VlIHRoaXMgYXMgYSBzdGFuZGFyZCBhcHByb2FjaCB0byBhdm9pZCBkZWFkbG9ja3M7IHRoaXMgaXMgbW9yZSBhbiBpc3N1ZSBmb3IgTE9DS0RFUCBhbmQgbGVzcyBhIEtNU0FOIGNvbmNlcm4uCgpUaGUgcmVtb3ZhbCBvZiB0aGUgYFdBUk5fT04oLi4uKWAgd3JhcHBlciBpbiBgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlYCBhbmQgYGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsYCBpcyBtb3N0bHkgYSBjb3NtZXRpYyBjaGFuZ2UsIGJ1dCBJIHN0aWxsIHRha2UgdGhlIHRpbWUgdG8gY29uc2lkZXIgdGhlIGNvbmRpdGlvbiB3aXRoaW4uCgpUaGUgc2NhbiByZXF1ZXN0IHJlZmVyZW5jZSBtYW5hZ2VtZW50IGluIGBzY2FuLmNgIGFuZCBgcmRldi1vcHMuaGAgaXMgcHJvbWlzaW5nLCBhcyB0aGV5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlLiBLQVNBTiBpcyB0aGUgcmVsZXZhbnQgdG9vbCBoZXJlLgoKVGhlIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCBjaGFuZ2UgdXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaXMgYSBnb29kIHByYWN0aWNlLiBVc2luZyBgc2tiX2hlYWRlcl9wb2ludGVyYCB0byBoYW5kbGUgcGFja2V0IGRhdGEgcmVkdWNlcyB0aGUgcmlzayBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBkYXRhIGxlYWtzLCB3aGljaCBhcmUgcHJpbWFyaWx5IGhhbmRsZWQgYnkgS0FTQU4uCgpGaW5hbGx5LCB0aGUgQlNTIGhhbmRsaW5nIGNoYW5nZXMgKGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWApIGFwcGVhciB0byBiZSBtaW5vciByZWZpbmVtZW50cyByZWdhcmRpbmcgZGF0YSBhY2Nlc3MgYW5kIHJlZHVuZGFudCBjaGVja3MuIGByY3VfYWNjZXNzX3BvaW50ZXJgIGlzIHByb3Blcmx5IHVzZWQsIGFkZHJlc3NpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuCgpOb3csIHRvIGV4cGxpY2l0bHkgYWRkcmVzcyB0aGUgS01TQU4gcXVlc3Rpb25zOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgaW5mby1sZWFrcy4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBga3phbGxvY2AgaXMgdXNlZCBhbmQgbG9jYWwgdmFyaWFibGVzIGFyZSB3ZWxsIGhhbmRsZWQuCgozLiAgKipBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyoqIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwcmVzZW50LgoKNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLCBgc2tiX2hlYWRlcl9wb2ludGVyYCBpcyB1c2VkIGNvcnJlY3RseSBhbmQgZGVmZW5zaXZlbHkuCgpHaXZlbiB0aGlzIHRob3JvdWdoIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gY29uY2VybnMuIEFsbCBpZGVudGlmaWVkIGlzc3VlcyByZWxhdGUgdG8gY29uY3VycmVuY3ksIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBib3VuZGFyeSBjaGVja3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgYXJlIHByZXNlbnQuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBhcyBhbHdheXMsIHRvIGJlIGNlcnRhaW4sIGFuZCB0aGVuIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBwYWNrZXQgcGFyc2luZyBhY3Jvc3MgY2ZnODAyMTE6XG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxuMy4gSUJTUyBldmVudCBoYW5kbGluZzogUGFzc2VzIEJTUyByZWZlcmVuY2VzIGRpcmVjdGx5IHRvIGV2ZW50IHByb2Nlc3NpbmcgcmF0aGVyIHRoYW4gcmUtbG9va2luZyB0aGVtIHVwOyBhbGwgZXZlbnQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHByb3Blcmx5IG1hbmFnZWQuXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgcGFja2V0IHBhcnNpbmcgYWNyb3NzIGNmZzgwMjExOlxuMS4gU2NhbiByZXF1ZXN0IHRyYWNraW5nIChkcml2ZXJfb3ducy9zdGFsZSk6IEZpeGVzIHVzZS1hZnRlci1mcmVlIGFuZCBwcmVtYXR1cmUgZnJlZXMgb2Ygc2NhbiByZXF1ZXN0cyBhY3Jvc3MgZHJpdmVyIGNhbmNlbGxhdGlvbiBwYXRocy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIFVBRiBpc3N1ZXMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHNjYW4gcmVxdWVzdCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jLCBzbyBhbGwgbmV3IHN0cnVjdCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4yLiBSZWd1bGF0b3J5IHdvcmtxdWV1ZSBzcGxpdDogU29sdmVzIGxvY2sgb3JkZXJpbmcvZGVhZGxvY2tzIGJldHdlZW4gcnRubF9sb2NrIGFuZCB3aXBoeSBtdXRleCBkdXJpbmcgcmVndWxhdG9yeSBpbnRlcmZhY2UgdGVhcmRvd24uIFRoaXMgZmFsbHMgc3RyaWN0bHkgdW5kZXIgTE9DS0RFUC5cbjMuIElCU1MgZXZlbnQgaGFuZGxpbmc6IFBhc3NlcyBCU1MgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBldmVudCBwcm9jZXNzaW5nIHJhdGhlciB0aGFuIHJlLWxvb2tpbmcgdGhlbSB1cDsgYWxsIGV2ZW50IHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB2aWEga3phbGxvY19vYmogYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpcyBwcm9wZXJseSBtYW5hZ2VkLlxuNC4gUGFja2V0IGNsYXNzaWZpY2F0aW9uIChza2JfaGVhZGVyX3BvaW50ZXIpOiBGaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBub24tbGluZWFyIHNrYnMgYnkgc2FmZWx5IGNoZWNraW5nIGhlYWRlciBsZW5ndGhzIHdpdGggc2tiX2hlYWRlcl9wb2ludGVyLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVycmVhZHMgYXJlIGNhdWdodCBieSBLQVNBTi5cbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyBLQVNBTiBhbmQgTE9DS0RFUCBmdWxseSBjb3ZlciB0aGUgcmlza3MgaW4gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6MTYuOTkxNTI0ODE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NDI0NzkwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc2Nhbl9kb25lXCIsXG4gICAgXCJfX19jZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tcIixcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJjZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiX19jZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICAgIFwiX19jZmc4MDIxMV9ic3NfdXBkYXRlXCIsXG4gICAgXCJjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5XCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VcIixcbiAgICBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgbGlmZXRpbWUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHBhY2tldCBwYXJzaW5nIGFjcm9zcyBjZmc4MDIxMTpcXG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4yLiBSZWd1bGF0b3J5IHdvcmtxdWV1ZSBzcGxpdDogU29sdmVzIGxvY2sgb3JkZXJpbmcvZGVhZGxvY2tzIGJldHdlZW4gcnRubF9sb2NrIGFuZCB3aXBoeSBtdXRleCBkdXJpbmcgcmVndWxhdG9yeSBpbnRlcmZhY2UgdGVhcmRvd24uIFRoaXMgZmFsbHMgc3RyaWN0bHkgdW5kZXIgTE9DS0RFUC5cXG4zLiBJQlNTIGV2ZW50IGhhbmRsaW5nOiBQYXNzZXMgQlNTIHJlZmVyZW5jZXMgZGlyZWN0bHkgdG8gZXZlbnQgcHJvY2Vzc2luZyByYXRoZXIgdGhhbiByZS1sb29raW5nIHRoZW0gdXA7IGFsbCBldmVudCBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXMgcHJvcGVybHkgbWFuYWdlZC5cXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjE2Ljk5MTUzMTUxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MDM5MzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJjNjcxNWUwMWVkMDcxYmIxNjQ0MTE5M2I0Y2Q3NWM1NDdiZDJiNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAwMTo1MDoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcXG5AQCAtMjQ0LDkgKzI0NCw4IEBAIHZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0cmRldi1cXHUwMDNlb3BlbmNvdW50LS07XFxuIFxcbiBcXHRpZiAocmRldi1cXHUwMDNlc2Nhbl9yZXEgXFx1MDAyNlxcdTAwMjYgcmRldi1cXHUwMDNlc2Nhbl9yZXEtXFx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT04oIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHxcXG4tXFx0XFx0XFx0ICAgICAhcmRldi1cXHUwMDNlaW50X3NjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCkpKVxcbitcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHwgIXJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQpKVxcbiBcXHRcXHRcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcXG4gXFx0XFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcXG4gXFx0fVxcbkBAIC02NDYsNiArNjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlZGVzdHJveV93b3JrLCBjZmc4MDIxMV9kZXN0cm95X2lmYWNlX3drKTtcXG4gXFx0d2lwaHlfd29ya19pbml0KFxcdTAwMjZyZGV2LVxcdTAwM2VzY2hlZF9zY2FuX3N0b3Bfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcF93ayk7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlc2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7XFxuK1xcdHdpcGh5X3dvcmtfaW5pdChcXHUwMDI2cmRldi1cXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drLCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayk7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlcmVnX2xlYXZlX25hbl93aywgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZyZGV2LVxcdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxcbiBcXHRcXHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnJkZXYtXFx1MDAzZXByb3BhZ2F0ZV9jYWNfZG9uZV93aywgY2ZnODAyMTFfcHJvcGFnYXRlX2NhY19kb25lX3drKTtcXG5AQCAtMTM0NSw2ICsxMzQ2LDcgQEAgdm9pZCB3aXBoeV91bnJlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cmRldi1cXHUwMDNlZGZzX3VwZGF0ZV9jaGFubmVsc193ayk7XFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cmRldi1cXHUwMDNlYmFja2dyb3VuZF9jYWNfZG9uZV93ayk7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnJkZXYtXFx1MDAzZWRlc3Ryb3lfd29yayk7XFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNnJkZXYtXFx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xcbiBcXHRmbHVzaF93b3JrKFxcdTAwMjZyZGV2LVxcdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drKTtcXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2cmRldi1cXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drKTtcXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2cmRldi1cXHUwMDNlbWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7XFxuQEAgLTE3NTgsOSArMTc2MCw5IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0d2lwaHlfbG9jayhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbiBcXHRcXHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXFx1MDAzZWlmdHlwZSwgLTEpO1xcbiBcXHRcXHRpZiAocmRldi1cXHUwMDNlc2Nhbl9yZXEgXFx1MDAyNlxcdTAwMjYgcmRldi1cXHUwMDNlc2Nhbl9yZXEtXFx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcXG4tXFx0XFx0XFx0aWYgKFdBUk5fT04oIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHxcXG4tXFx0XFx0XFx0XFx0ICAgICAhcmRldi1cXHUwMDNlaW50X3NjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCkpKVxcbitcXHRcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHxcXG4rXFx0XFx0XFx0ICAgICAhcmRldi1cXHUwMDNlaW50X3NjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCkpXFxuIFxcdFxcdFxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xcbiBcXHRcXHRcXHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXFxuaW5kZXggYjQ2MTBmNjY4NWRjYi4uNjEzOGQyMDdjYWY0MSAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbkBAIC0yNCw2ICsyNCwxNiBAQFxcbiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7XFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gaW5mbztcXG4gXFx0Ym9vbCBub3RpZmllZDtcXG4rXFx0LypcXG4rXFx0ICogc2V0IHdoaWxlIHRoZSByZXF1ZXN0IGlzIGhhbmRlZCB0byB0aGUgZHJpdmVyLCBpLmUuIGJldHdlZW5cXG4rXFx0ICogcmRldl9zY2FuKCkgYW5kIGNmZzgwMjExX3NjYW5fZG9uZSgpXFxuK1xcdCAqL1xcbitcXHRib29sIGRyaXZlcl9vd25zO1xcbitcXHQvKlxcbitcXHQgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGxcXG4rXFx0ICogb3ducyBpdCwgc28gdGhhdCBjZmc4MDIxMV9zY2FuX2RvbmUoKSBrbm93cyB0byBqdXN0IGZyZWUgaXRcXG4rXFx0ICovXFxuK1xcdGJvb2wgc3RhbGU7XFxuIFxcdC8qIG11c3QgYmUgbGFzdCAtIHZhcmlhYmxlIG1lbWJlcnMgKi9cXG4gXFx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCByZXE7XFxuIH07XFxuQEAgLTEwNCw2ICsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrO1xcbiBcXHRzdHJ1Y3Qgd2lwaHlfd29yayBzY2hlZF9zY2FuX3N0b3Bfd2s7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcXG4rXFx0c3RydWN0IHdpcGh5X3dvcmsgcmVnX2NoZWNrX2NoYW5zX3drO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVnX2xlYXZlX25hbl93aztcXG4gXFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiByYWRhcl9jaGFuZGVmO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93aztcXG5AQCAtMjgwLDggKzI5Miw3IEBAIHN0cnVjdCBjZmc4MDIxMV9ldmVudCB7XFxuIFxcdFxcdFxcdGJvb2wgbG9jYWxseV9nZW5lcmF0ZWQ7XFxuIFxcdFxcdH0gZGM7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdHU4IGJzc2lkW0VUSF9BTEVOXTtcXG4tXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsO1xcbitcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XFxuIFxcdFxcdH0gaWo7XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdHU4IHBlZXJfYWRkcltFVEhfQUxFTl07XFxuQEAgLTM0NCw4ICszNTUsNyBAQCBpbnQgX19jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xcbiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTtcXG4tdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7XFxuK3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpO1xcbiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvaWJzcy5jIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuY1xcbisrKyBiL25ldC93aXJlbGVzcy9pYnNzLmNcXG5AQCAtMTYsMjYgKzE2LDE4IEBAXFxuICNpbmNsdWRlIFxcXCJyZGV2LW9wcy5oXFxcIlxcbiBcXG4gXFxuLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXFxuK3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpXFxuIHtcXG4gXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4tXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG4gXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbiAjZW5kaWZcXG4gXFxuIFxcdGlmIChXQVJOX09OKHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0Z290byBwdXRfYnNzO1xcbiBcXG4gXFx0aWYgKCF3ZGV2LVxcdTAwM2V1Lmlic3Muc3NpZF9sZW4pXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGJzcyA9IGNmZzgwMjExX2dldF9ic3Mod2Rldi1cXHUwMDNld2lwaHksIGNoYW5uZWwsIGJzc2lkLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XFxuLVxcbi1cXHRpZiAoV0FSTl9PTighYnNzKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRnb3RvIHB1dF9ic3M7XFxuIFxcbiBcXHRpZiAod2Rldi1cXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKSB7XFxuIFxcdFxcdGNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi1cXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKTtcXG5AQCAtNDMsMTcgKzM1LDIyIEBAIHZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXFxuIFxcdH1cXG4gXFxuIFxcdGNmZzgwMjExX2hvbGRfYnNzKGJzc19mcm9tX3B1Yihic3MpKTtcXG4rXFx0LyogdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBldmVudCBpcyB0cmFuc2ZlcnJlZCB0byBjdXJyZW50X2JzcyAqL1xcbiBcXHR3ZGV2LVxcdTAwM2V1Lmlic3MuY3VycmVudF9ic3MgPSBic3NfZnJvbV9wdWIoYnNzKTtcXG4gXFxuIFxcdGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMod2Rldik7XFxuIFxcbi1cXHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXFx1MDAzZXdpcGh5KSwgZGV2LCBic3NpZCxcXG4rXFx0bmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LVxcdTAwM2V3aXBoeSksIGRldiwgYnNzLVxcdTAwM2Vic3NpZCxcXG4gXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbiBcXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLVxcdG1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTtcXG4rXFx0bWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3MtXFx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XFxuIFxcdHdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsIFxcdTAwMjZ3cnF1LCBOVUxMKTtcXG4gI2VuZGlmXFxuK1xcdHJldHVybjtcXG4rXFxuK3B1dF9ic3M6XFxuK1xcdGNmZzgwMjExX3B1dF9ic3Mod2Rldi1cXHUwMDNld2lwaHksIGJzcyk7XFxuIH1cXG4gXFxuIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxcbkBAIC02Miw2ICs1OSw3IEBAIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxcbiBcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtXFx1MDAzZXdpcGh5KTtcXG4gXFx0c3RydWN0IGNmZzgwMjExX2V2ZW50ICpldjtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0dHJhY2VfY2ZnODAyMTFfaWJzc19qb2luZWQoZGV2LCBic3NpZCwgY2hhbm5lbCk7XFxuQEAgLTY5LDEzICs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4gXFx0aWYgKFdBUk5fT04oIWNoYW5uZWwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtXFx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0ICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xcbitcXHRpZiAoV0FSTl9PTighYnNzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXYgPSBremFsbG9jX29iaigqZXYsIGdmcCk7XFxuLVxcdGlmICghZXYpXFxuK1xcdGlmICghZXYpIHtcXG4rXFx0XFx0Y2ZnODAyMTFfcHV0X2Jzcyh3ZGV2LVxcdTAwM2V3aXBoeSwgYnNzKTtcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRldi1cXHUwMDNldHlwZSA9IEVWRU5UX0lCU1NfSk9JTkVEO1xcbi1cXHRtZW1jcHkoZXYtXFx1MDAzZWlqLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pO1xcbi1cXHRldi1cXHUwMDNlaWouY2hhbm5lbCA9IGNoYW5uZWw7XFxuK1xcdGV2LVxcdTAwM2Vpai5ic3MgPSBic3M7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d2Rldi1cXHUwMDNlZXZlbnRfbG9jaywgZmxhZ3MpO1xcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZldi1cXHUwMDNlbGlzdCwgXFx1MDAyNndkZXYtXFx1MDAzZWV2ZW50X2xpc3QpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXFxuaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxcbisrKyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXFxuQEAgLTQ2NCw3ICs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHR0cmFjZV9yZGV2X3NjYW4oXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCByZXF1ZXN0KTtcXG4rXFx0cmVxdWVzdC1cXHUwMDNlZHJpdmVyX293bnMgPSB0cnVlO1xcbiBcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZXNjYW4oXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBcXHUwMDI2cmVxdWVzdC1cXHUwMDNlcmVxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmVxdWVzdC1cXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcXG4gXFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcXG5pbmRleCBhODMzNmJhZjg1ZGM2Li4xMTY2NWUwYTdlZmM4IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xcbkBAIC0yMzQ1LDcgKzIzNDUsNyBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuIFxcdGlmdHlwZSA9IHdkZXYtXFx1MDAzZWlmdHlwZTtcXG4gXFxuIFxcdC8qIG1ha2Ugc3VyZSB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZSAqL1xcbi1cXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldiB8fCAhbmV0aWZfcnVubmluZyh3ZGV2LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKiBOQU4gZG9lc24ndCBoYXZlIGxpbmtzLCBoYW5kbGUgaXQgc2VwYXJhdGVseSAqL1xcbkBAIC0yNDQ2LDE5ICsyNDQ2LDUyIEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuIFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XFxuLVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbitcXG4rXFx0cmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsXFxuK1xcdFxcdFxcdCAgICByZWdfbGVhdmVfbmFuX3drKTtcXG4rXFxuK1xcdC8qIHN0b3BwaW5nIE5BTiBjbG9zZXMgaXRzIGRhdGEgaW50ZXJmYWNlcywgd2hpY2ggbmVlZHMgdGhlIFJUTkwgKi9cXG4rXFx0cnRubF9sb2NrKCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0Ym9vbCB2YWxpZDtcXG4gXFxuLVxcdFxcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXFxuLVxcdFxcdFxcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XFxuK1xcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KVxcbitcXHRcXHRcXHR2YWxpZCA9IHJlZ193ZGV2X2NoYW5fdmFsaWQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2KTtcXG4gXFx0XFx0aWYgKCF2YWxpZClcXG4gXFx0XFx0XFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xcbiBcXHR9XFxuK1xcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbitcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2d2lwaHktXFx1MDAzZW10eCk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRlYXJpbmcgZG93biBOQU4gbmVlZHMgdGhlIFJUTkwgZm9yIGNsb3NpbmcgTkFOX0RBVEFcXG4rXFx0XFx0ICogaW50ZXJmYWNlcywgaGFuZGxlIHRoYXQgc2VwYXJhdGVseS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbitcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZyZGV2LVxcdTAwM2VyZWdfbGVhdmVfbmFuX3drKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjZmc4MDIxMV9sZWF2ZV9sb2NrZWQocmRldiwgd2RldiwgLTEpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5AQCAtMjQ2NiwxMiArMjQ5OSwxMyBAQCBzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcXFxuXFxcIik7XFxuLVxcdHJ0bmxfbG9jaygpO1xcbiBcXG4tXFx0Zm9yX2VhY2hfcmRldihyZGV2KVxcbi1cXHRcXHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRydG5sX3VubG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KVxcbitcXHRcXHR3aXBoeV93b3JrX3F1ZXVlKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXJlZ19jaGVja19jaGFuc193ayk7XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5oIGIvbmV0L3dpcmVsZXNzL3JlZy5oXFxuaW5kZXggZmMzMWM1ZjlhNjFhYi4uYzU4NzA3OWVhZDhmYiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmhcXG4rKysgYi9uZXQvd2lyZWxlc3MvcmVnLmhcXG5AQCAtMTc4LDYgKzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcXG4gICovXFxuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xcbiBcXG4rLyoqXFxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drIC0gY2hlY2sgaWYgY2hhbm5lbHMgYXJlIG5vIGxvbmdlciB1c2FibGUgYW5kIGxlYXZlXFxuKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXFxuKyAqIEB3b3JrOiB0aGUgd29yayBzdHJ1Y3RcXG4rICovXFxuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xcbitcXG4rLyoqXFxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGVcXG4rICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxcbisgKlxcbisgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cXG4rICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soKSB3aGljaCBydW5zIHdpdGggdGhlIHdpcGh5IG11dGV4IGhlbGQuXFxuKyAqL1xcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitcXG4gZXh0ZXJuIGNvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcXG4gZXh0ZXJuIGNvbnN0IHU4IGV4dHJhX3JlZ2RiX2NlcnRzW107XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbkBAIC0xMTE0LDYgKzExMTQsMjEgQEAgaW50IGNmZzgwMjExX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxcbisgKiBlLmcuIG1hYzgwMjExIG1heSBjYW5jZWwgaXQgYXN5bmNocm9ub3VzbHkgYW5kIHN0aWxsIHVzZSBpdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxcbit7XFxuK1xcdGlmICghcmVxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAocmVxLVxcdTAwM2Vkcml2ZXJfb3ducylcXG4rXFx0XFx0cmVxLVxcdTAwM2VzdGFsZSA9IHRydWU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a2ZyZWUocmVxKTtcXG4rfVxcbitcXG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHQgICBib29sIHNlbmRfbWVzc2FnZSlcXG4ge1xcbkBAIC0xMTczLDEwICsxMTg4LDEwIEBAIHZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFxuIFxcdGRldl9wdXQod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuLVxcdGtmcmVlKHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcSk7XFxuK1xcdGNmZzgwMjExX3B1dF9zY2FuX3JlcShyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEpO1xcbiBcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xcbiBcXG4tXFx0a2ZyZWUocmRldi1cXHUwMDNlc2Nhbl9yZXEpO1xcbitcXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cXHUwMDNlc2Nhbl9yZXEpO1xcbiBcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcSA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoIXNlbmRfbWVzc2FnZSlcXG5AQCAtMTE5OSw2ICsxMjE0LDE4IEBAIHZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsXFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gb2xkX2luZm8gPSBpbnRyZXEtXFx1MDAzZWluZm87XFxuIFxcbiBcXHR0cmFjZV9jZmc4MDIxMV9zY2FuX2RvbmUoaW50cmVxLCBpbmZvKTtcXG4rXFxuK1xcdGludHJlcS1cXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcXG4rXFxuK1xcdGlmIChpbnRyZXEtXFx1MDAzZXN0YWxlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBzY2FuIGlzIGFscmVhZHkgY29tcGxldGVkIGFzIGZhciBhcyB3ZSdyZSBjb25jZXJuZWQsXFxuK1xcdFxcdCAqIGl0IHdhcyBqdXN0IGtlcHQgYXJvdW5kIGZvciB0aGUgZHJpdmVyIC0gZG9uZSBub3csIGZyZWUgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRrZnJlZShpbnRyZXEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXFx1MDAzZXNjYW5fcmVxIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdGludHJlcSAhPSByZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEpO1xcbiBcXG5AQCAtMjA1MCw2ICsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdGlmICghaGlkZGVuKVxcbiBcXHRcXHRcXHRcXHRoaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQlNTX0NNUF9ISURFX05VTCk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcXG4rXFx0XFx0XFx0ICogYmVhY29uIGRhdGEgY2FuIG5ldmVyIGJlIGZpbGxlZC91cGRhdGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGhpZGRlbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tXFx1MDAzZXB1Yi5iZWFjb25faWVzKSlcXG4rXFx0XFx0XFx0XFx0aGlkZGVuID0gTlVMTDtcXG4gXFx0XFx0XFx0aWYgKGhpZGRlbikge1xcbiBcXHRcXHRcXHRcXHRuZXctXFx1MDAzZXB1Yi5oaWRkZW5fYmVhY29uX2JzcyA9IFxcdTAwMjZoaWRkZW4tXFx1MDAzZXB1YjtcXG4gXFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ldy1cXHUwMDNlaGlkZGVuX2xpc3QsXFxuQEAgLTM0NjgsMTEgKzM1MDIsNiBAQCB2b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0Y2Jzcy1cXHUwMDNlcHViLmNoYW5uZWwgPSBjaGFuO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShic3MsIFxcdTAwMjZyZGV2LVxcdTAwM2Vic3NfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAoIWNmZzgwMjExX2Jzc190eXBlX21hdGNoKGJzcy1cXHUwMDNlcHViLmNhcGFiaWxpdHksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgYnNzLVxcdTAwM2VwdWIuY2hhbm5lbC1cXHUwMDNlYmFuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB3ZGV2LVxcdTAwM2Vjb25uX2Jzc190eXBlKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbiBcXHRcXHRpZiAoYnNzID09IGNic3MpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmNcXG5pbmRleCAzZTU4NGQwY2EzZTI2Li5mMjQ2NGQyY2UwZDVhIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcXG4rKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jXFxuQEAgLTEwMzksMTIgKzEwMzksMzAgQEAgdW5zaWduZWQgaW50IGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbi1cXHRcXHRkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcF9oZHIoc2tiKSkgXFx1MDAyNiAweGZjO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0XFx0c3RydWN0IGlwaGRyIF9pcGg7XFxuK1xcbitcXHRcXHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkciksXFxuK1xcdFxcdFxcdFxcdFxcdCBzaXplb2YoKmlwaCksIFxcdTAwMjZfaXBoKTtcXG4rXFx0XFx0aWYgKCFpcGgpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0ZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKSBcXHUwMDI2IDB4ZmM7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbi1cXHRcXHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2X2hkcihza2IpKSBcXHUwMDI2IDB4ZmM7XFxuK1xcdH1cXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFx0XFx0c3RydWN0IGlwdjZoZHIgX2lwNmg7XFxuK1xcbitcXHRcXHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxcbitcXHRcXHRcXHRcXHRcXHQgIHNpemVvZigqaXA2aCksIFxcdTAwMjZfaXA2aCk7XFxuK1xcdFxcdGlmICghaXA2aClcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKSBcXHUwMDI2IDB4ZmM7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19VQyk6XFxuIFxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcXG4gXFx0XFx0c3RydWN0IG1wbHNfbGFiZWwgbXBsc190bXAsICptcGxzO1xcbkBAIC0xMjE3LDggKzEyMzUsNyBAQCB2b2lkIGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IWV2LVxcdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEVWRU5UX0lCU1NfSk9JTkVEOlxcbi1cXHRcXHRcXHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXFx1MDAzZW5ldGRldiwgZXYtXFx1MDAzZWlqLmJzc2lkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXYtXFx1MDAzZWlqLmNoYW5uZWwpO1xcbitcXHRcXHRcXHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXFx1MDAzZW5ldGRldiwgZXYtXFx1MDAzZWlqLmJzcyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEVWRU5UX1NUT1BQRUQ6XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTI0NzcsMTYgKzI0OTQsMTUgQEAgc3RhdGljIHZvaWQgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIG5ld19iZWFjb25faW50LFxcbiBcXHRcXHRpZiAod2Rldi1cXHUwMDNldmFsaWRfbGlua3MpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0d2Rldl9iaSA9IGNmZzgwMjExX3dkZXZfYmkod2Rldik7XFxuK1xcdFxcdGlmICghd2Rldl9iaSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHQvKiBza2lwIHdkZXZzIG5vdCBhY3RpdmUgb24gdGhlIGdpdmVuIHdpcGh5IHJhZGlvICovXFxuIFxcdFxcdGlmIChyYWRpb19pZHggXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIShyZGV2X2dldF9yYWRpb19tYXNrKHJkZXYsIHdkZXYtXFx1MDAzZW5ldGRldikgXFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0d2Rldl9iaSA9IGNmZzgwMjExX3dkZXZfYmkod2Rldik7XFxuLVxcbi1cXHRcXHRpZiAoIXdkZXZfYmkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4gXFx0XFx0aWYgKCEqYmVhY29uX2ludF9nY2QpIHtcXG4gXFx0XFx0XFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjE4LjMzMjYzMjc3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc4MjA2NTU0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc2Nhbl9kb25lXCIsXG4gICAgXCJfX19jZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tcIixcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJjZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiX19jZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICAgIFwiX19jZmc4MDIxMV9ic3NfdXBkYXRlXCIsXG4gICAgXCJjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5XCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VcIixcbiAgICBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNjcxNWUwMWVkMDcxYmIxNjQ0MTE5M2I0Y2Q3NWM1NDdiZDJiNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjUwOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMjQ0LDkgKzI0NCw4IEBAIHZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gXG4gXHRpZiAocmRldi1cdTAwM2VzY2FuX3JlcSBcdTAwMjZcdTAwMjYgcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VyZXEud2RldiA9PSB3ZGV2KSB7XG4tXHRcdGlmIChXQVJOX09OKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0ICAgICAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKSlcbitcdFx0aWYgKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcbiBcdH1cbkBAIC02NDYsNiArNjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmssIGNmZzgwMjExX2Rlc3Ryb3lfaWZhY2Vfd2spO1xuIFx0d2lwaHlfd29ya19pbml0KFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9zdG9wX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Bfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7XG4rXHR3aXBoeV93b3JrX2luaXQoXHUwMDI2cmRldi1cdTAwM2VyZWdfY2hlY2tfY2hhbnNfd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKTtcbitcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxuIFx0XHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spO1xuQEAgLTEzNDUsNiArMTM0Niw3IEBAIHZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJkZXYtXHUwMDNlZGZzX3VwZGF0ZV9jaGFubmVsc193ayk7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cmRldi1cdTAwM2ViYWNrZ3JvdW5kX2NhY19kb25lX3drKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmspO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9jYWNfZG9uZV93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlbWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7XG5AQCAtMTc1OCw5ICsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuIFx0XHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXNjYW5fcmVxIFx1MDAyNlx1MDAyNiByZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0XHQgICAgICFyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2Vub3RpZmllZCkpKVxuK1x0XHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fFxuK1x0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSlcbiBcdFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0XHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtMjQsNiArMjQsMTYgQEBcbiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIGluZm87XG4gXHRib29sIG5vdGlmaWVkO1xuK1x0LypcbitcdCAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuXG4rXHQgKiByZGV2X3NjYW4oKSBhbmQgY2ZnODAyMTFfc2Nhbl9kb25lKClcbitcdCAqL1xuK1x0Ym9vbCBkcml2ZXJfb3ducztcbitcdC8qXG4rXHQgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGxcbitcdCAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0XG4rXHQgKi9cbitcdGJvb2wgc3RhbGU7XG4gXHQvKiBtdXN0IGJlIGxhc3QgLSB2YXJpYWJsZSBtZW1iZXJzICovXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHJlcTtcbiB9O1xuQEAgLTEwNCw2ICsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yaztcbiBcdHN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93aztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcbitcdHN0cnVjdCB3aXBoeV93b3JrIHJlZ19jaGVja19jaGFuc193aztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWdfbGVhdmVfbmFuX3drO1xuIFxuIFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHJhZGFyX2NoYW5kZWY7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93aztcbkBAIC0yODAsOCArMjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHtcbiBcdFx0XHRib29sIGxvY2FsbHlfZ2VuZXJhdGVkO1xuIFx0XHR9IGRjO1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7XG4rXHRcdFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0XHR9IGlqO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHU4IHBlZXJfYWRkcltFVEhfQUxFTl07XG5AQCAtMzQ0LDggKzM1NSw3IEBAIGludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTtcbiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xuLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4tXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7XG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7XG4gaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXG4rKysgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5AQCAtMTYsMjYgKzE2LDE4IEBAXG4gI2luY2x1ZGUgXCJyZGV2LW9wcy5oXCJcbiBcbiBcbi12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcylcbiB7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4tXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XG4gI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG4gXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4gI2VuZGlmXG4gXG4gXHRpZiAoV0FSTl9PTih3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpXG4tXHRcdHJldHVybjtcbitcdFx0Z290byBwdXRfYnNzO1xuIFxuIFx0aWYgKCF3ZGV2LVx1MDAzZXUuaWJzcy5zc2lkX2xlbilcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4tXG4tXHRpZiAoV0FSTl9PTighYnNzKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpIHtcbiBcdFx0Y2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XG5AQCAtNDMsMTcgKzM1LDIyIEBAIHZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4gXHR9XG4gXG4gXHRjZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7XG4rXHQvKiB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGV2ZW50IGlzIHRyYW5zZmVycmVkIHRvIGN1cnJlbnRfYnNzICovXG4gXHR3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2JzcyA9IGJzc19mcm9tX3B1Yihic3MpO1xuIFxuIFx0Y2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTtcbiBcbi1cdG5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSksIGRldiwgYnNzaWQsXG4rXHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cdTAwM2Vic3NpZCxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7XG4rXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFx0d2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgXHUwMDI2d3JxdSwgTlVMTCk7XG4gI2VuZGlmXG4rXHRyZXR1cm47XG4rXG4rcHV0X2JzczpcbitcdGNmZzgwMjExX3B1dF9ic3Mod2Rldi1cdTAwM2V3aXBoeSwgYnNzKTtcbiB9XG4gXG4gdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG5AQCAtNjIsNiArNTksNyBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2O1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHRyYWNlX2NmZzgwMjExX2lic3Nfam9pbmVkKGRldiwgYnNzaWQsIGNoYW5uZWwpO1xuQEAgLTY5LDEzICs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdGlmIChXQVJOX09OKCFjaGFubmVsKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbitcdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4rXHRpZiAoV0FSTl9PTighYnNzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXYgPSBremFsbG9jX29iaigqZXYsIGdmcCk7XG4tXHRpZiAoIWV2KVxuK1x0aWYgKCFldikge1xuK1x0XHRjZmc4MDIxMV9wdXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGJzcyk7XG4gXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdGV2LVx1MDAzZXR5cGUgPSBFVkVOVF9JQlNTX0pPSU5FRDtcbi1cdG1lbWNweShldi1cdTAwM2Vpai5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcbi1cdGV2LVx1MDAzZWlqLmNoYW5uZWwgPSBjaGFubmVsO1xuK1x0ZXYtXHUwMDNlaWouYnNzID0gYnNzO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2d2Rldi1cdTAwM2VldmVudF9sb2NrLCBmbGFncyk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmV2LVx1MDAzZWxpc3QsIFx1MDAyNndkZXYtXHUwMDNlZXZlbnRfbGlzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTQ2NCw3ICs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0cmFjZV9yZGV2X3NjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmVxdWVzdCk7XG4rXHRyZXF1ZXN0LVx1MDAzZWRyaXZlcl9vd25zID0gdHJ1ZTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZXNjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgXHUwMDI2cmVxdWVzdC1cdTAwM2VyZXEpO1xuK1x0aWYgKHJldClcbitcdFx0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IGZhbHNlO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLjExNjY1ZTBhN2VmYzggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTIzNDUsNyArMjM0NSw3IEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiBcdGlmdHlwZSA9IHdkZXYtXHUwMDNlaWZ0eXBlO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRoZSBpbnRlcmZhY2UgaXMgYWN0aXZlICovXG4tXHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKHdkZXYtXHUwMDNlbmV0ZGV2KSlcbitcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIE5BTiBkb2Vzbid0IGhhdmUgbGlua3MsIGhhbmRsZSBpdCBzZXBhcmF0ZWx5ICovXG5AQCAtMjQ0NiwxOSArMjQ0Niw1MiBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSlcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1xuK1x0cmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsXG4rXHRcdFx0ICAgIHJlZ19sZWF2ZV9uYW5fd2spO1xuK1xuK1x0Lyogc3RvcHBpbmcgTkFOIGNsb3NlcyBpdHMgZGF0YSBpbnRlcmZhY2VzLCB3aGljaCBuZWVkcyB0aGUgUlROTCAqL1xuK1x0cnRubF9sb2NrKCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdGJvb2wgdmFsaWQ7XG4gXG4tXHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXG4tXHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTtcbitcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuK1x0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2KTtcbiBcdFx0aWYgKCF2YWxpZClcbiBcdFx0XHRjZmc4MDIxMV9sZWF2ZShyZGV2LCB3ZGV2LCAtMSk7XG4gXHR9XG4rXG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxuK3tcbitcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1x0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2lwaHktXHUwMDNlbXR4KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBUZWFyaW5nIGRvd24gTkFOIG5lZWRzIHRoZSBSVE5MIGZvciBjbG9zaW5nIE5BTl9EQVRBXG4rXHRcdCAqIGludGVyZmFjZXMsIGhhbmRsZSB0aGF0IHNlcGFyYXRlbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxuK1x0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VyZWdfbGVhdmVfbmFuX3drKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNmZzgwMjExX2xlYXZlX2xvY2tlZChyZGV2LCB3ZGV2LCAtMSk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbkBAIC0yNDY2LDEyICsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwiVmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cIik7XG4tXHRydG5sX2xvY2soKTtcbiBcbi1cdGZvcl9lYWNoX3JkZXYocmRldilcbi1cdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRydG5sX3VubG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KVxuK1x0XHR3aXBoeV93b3JrX3F1ZXVlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIFx1MDAyNnJkZXYtXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drKTtcbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaFxuaW5kZXggZmMzMWM1ZjlhNjFhYi4uYzU4NzA3OWVhZDhmYiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oXG5AQCAtMTc4LDYgKzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcbiAgKi9cbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTtcbiBcbisvKipcbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayAtIGNoZWNrIGlmIGNoYW5uZWxzIGFyZSBubyBsb25nZXIgdXNhYmxlIGFuZCBsZWF2ZVxuKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXG4rICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxuKyAqL1xuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xuK1xuKy8qKlxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGVcbisgKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4rICpcbisgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC5cbisgKi9cbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuK1xuIGV4dGVybiBjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW107XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcbiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xMTE0LDYgKzExMTQsMjEgQEAgaW50IGNmZzgwMjExX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxuKyAqIGUuZy4gbWFjODAyMTEgbWF5IGNhbmNlbCBpdCBhc3luY2hyb25vdXNseSBhbmQgc3RpbGwgdXNlIGl0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxuK3tcbitcdGlmICghcmVxKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVxLVx1MDAzZWRyaXZlcl9vd25zKVxuK1x0XHRyZXEtXHUwMDNlc3RhbGUgPSB0cnVlO1xuK1x0ZWxzZVxuK1x0XHRrZnJlZShyZXEpO1xuK31cbitcbiB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgYm9vbCBzZW5kX21lc3NhZ2UpXG4ge1xuQEAgLTExNzMsMTAgKzExODgsMTAgQEAgdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFxuIFx0ZGV2X3B1dCh3ZGV2LVx1MDAzZW5ldGRldik7XG4gXG4tXHRrZnJlZShyZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xuIFxuLVx0a2ZyZWUocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4gXHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbiBcbiBcdGlmICghc2VuZF9tZXNzYWdlKVxuQEAgLTExOTksNiArMTIxNCwxOCBAQCB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LFxuIFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBvbGRfaW5mbyA9IGludHJlcS1cdTAwM2VpbmZvO1xuIFxuIFx0dHJhY2VfY2ZnODAyMTFfc2Nhbl9kb25lKGludHJlcSwgaW5mbyk7XG4rXG4rXHRpbnRyZXEtXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcbitcbitcdGlmIChpbnRyZXEtXHUwMDNlc3RhbGUpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHNjYW4gaXMgYWxyZWFkeSBjb21wbGV0ZWQgYXMgZmFyIGFzIHdlJ3JlIGNvbmNlcm5lZCxcbitcdFx0ICogaXQgd2FzIGp1c3Qga2VwdCBhcm91bmQgZm9yIHRoZSBkcml2ZXIgLSBkb25lIG5vdywgZnJlZSBpdC5cbitcdFx0ICovXG4rXHRcdGtmcmVlKGludHJlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2XG4gXHRcdGludHJlcSAhPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4gXG5AQCAtMjA1MCw2ICsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0aWYgKCFoaWRkZW4pXG4gXHRcdFx0XHRoaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsXG4gXHRcdFx0XHRcdFx0ICAgICBCU1NfQ01QX0hJREVfTlVMKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcbitcdFx0XHQgKiBiZWFjb24gZGF0YSBjYW4gbmV2ZXIgYmUgZmlsbGVkL3VwZGF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGhpZGRlbiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tXHUwMDNlcHViLmJlYWNvbl9pZXMpKVxuK1x0XHRcdFx0aGlkZGVuID0gTlVMTDtcbiBcdFx0XHRpZiAoaGlkZGVuKSB7XG4gXHRcdFx0XHRuZXctXHUwMDNlcHViLmhpZGRlbl9iZWFjb25fYnNzID0gXHUwMDI2aGlkZGVuLVx1MDAzZXB1YjtcbiBcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ldy1cdTAwM2VoaWRkZW5fbGlzdCxcbkBAIC0zNDY4LDExICszNTAyLDYgQEAgdm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRjYnNzLVx1MDAzZXB1Yi5jaGFubmVsID0gY2hhbjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLVx1MDAzZXB1Yi5jYXBhYmlsaXR5LFxuLVx0XHRcdFx0XHQgICAgIGJzcy1cdTAwM2VwdWIuY2hhbm5lbC1cdTAwM2ViYW5kLFxuLVx0XHRcdFx0XHQgICAgIHdkZXYtXHUwMDNlY29ubl9ic3NfdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChic3MgPT0gY2JzcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZjI0NjRkMmNlMGQ1YSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbisrKyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0xMDM5LDEyICsxMDM5LDMwIEBAIHVuc2lnbmVkIGludCBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4tXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcihza2IpKSBcdTAwMjYgMHhmYztcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0XHRzdHJ1Y3QgaXBoZHIgX2lwaDtcbitcbitcdFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuK1x0XHRcdFx0XHQgc2l6ZW9mKCppcGgpLCBcdTAwMjZfaXBoKTtcbitcdFx0aWYgKCFpcGgpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi1cdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSkgXHUwMDI2IDB4ZmM7XG4rXHR9XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0XHRzdHJ1Y3QgaXB2NmhkciBfaXA2aDtcbitcbitcdFx0aXA2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcbitcdFx0XHRcdFx0ICBzaXplb2YoKmlwNmgpLCBcdTAwMjZfaXA2aCk7XG4rXHRcdGlmICghaXA2aClcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcbiBcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcbiBcdFx0c3RydWN0IG1wbHNfbGFiZWwgbXBsc190bXAsICptcGxzO1xuQEAgLTEyMTcsOCArMTIzNSw3IEBAIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0XHRcdFx0XHRcdCFldi1cdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRVZFTlRfSUJTU19KT0lORUQ6XG4tXHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzaWQsXG4tXHRcdFx0XHRcdCAgICAgICBldi1cdTAwM2Vpai5jaGFubmVsKTtcbitcdFx0XHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXHUwMDNlbmV0ZGV2LCBldi1cdTAwM2Vpai5ic3MpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVWRU5UX1NUT1BQRUQ6XG4gXHRcdFx0LypcbkBAIC0yNDc3LDE2ICsyNDk0LDE1IEBAIHN0YXRpYyB2b2lkIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBuZXdfYmVhY29uX2ludCxcbiBcdFx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuK1x0XHRpZiAoIXdkZXZfYmkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi9cbiBcdFx0aWYgKHJhZGlvX2lkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi1cdTAwM2VuZXRkZXYpIFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuLVxuLVx0XHRpZiAoIXdkZXZfYmkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghKmJlYWNvbl9pbnRfZ2NkKSB7XG4gXHRcdFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjE4LjMzMjYzNDI2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODI4ODA0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLCBhcyBhbHdheXMuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYG5ldC93aXJlbGVzc2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYGNmZzgwMjExYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgYWxzbyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV2YWx1YXRpbmcgdGhlIHZ1bG5lcmFiaWxpdHkgcG90ZW50aWFsIG9mIHRoZSBwYXRjaC4gVGhlIGZpbGVzIHRvdWNoZWQgc3BhbiBhIGRlY2VudCBjaHVuayBvZiB0aGUgYGNmZzgwMjExYCBjb2RlLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczogRmlyc3QsIHRoZSByZW1vdmFsIG9mIGBXQVJOX09OYCBpbiBzY2FuIGFib3J0IGhhbmRsaW5nLiBUaGF0J3MgYSBjbGFzc2ljIHNpZ25hbCBvZiBwb3RlbnRpYWxseSByZWxheGVkIGVycm9yIGNoZWNrczsgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgYSBiaXQgdGhlcmUuIFNlY29uZCwgdGhlIGluaXRpYWxpemF0aW9uL2ZsdXNoaW5nIG9mIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgaW4gYHdpcGh5X25ld19ubWAgc3VnZ2VzdHMgY2hhbmdlcyB0byB3b3JrIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIHBsYWNlIHRvIHdhdGNoIGNsb3NlbHksIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIGNvbnRleHQuIFRoaXJkLCB0aGUgc2NhbiByZXF1ZXN0IGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMgYmVpbmcgb3ZlcmhhdWxlZCB3aXRoIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgZmxhZ3MuIFRoYXQgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2FpdGluZyB0byBoYXBwZW4uIFRoZSBsb2dpYyBhcm91bmQgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBzY2FuIHJlcXVlc3RzIGlzIG9mdGVuIHRyaWNreS5cblxuVGhlIGZvdXJ0aCBjaGFuZ2UsIHdoaWNoIGhhcyB0byBkbyB3aXRoIGhvdyBgY2ZnODAyMTFfYnNzYCByZWZlcmVuY2VzIGFyZSBiZWluZyBoYW5kbGVkIGFuZCB0aGVpciByZWxhdGVkIHJlZmVyZW5jZSBjb3VudGluZyBiZWluZyB0aWdodGVuZWQsIGlzIGFub3RoZXIgYXJlYSB0byBmb2N1cyBvbi4gRmlmdGgsIHRoZSBjaGFubmVsIGludmFsaWRhdGlvbiBzcGxpdCBhbmQgd29ya3F1ZXVlIGNoYW5nZSBmcm9tIFJUTkwgbG9ja2luZyB0byBSQ1UgaW4gYHJlZy5jYCBpcyBzaWduaWZpY2FudC4gVGhhdCdzIGEgZ29vZCBtb3ZlIHRvIGltcHJvdmUgY29uY3VycmVuY3ksIGJ1dCBpdCBhbHNvIG9wZW5zIHRoZSBkb29yIHRvIHBvdGVudGlhbCBzdWJ0bGUgaXNzdWVzIGlmIG5vdCBpbXBsZW1lbnRlZCBwZXJmZWN0bHkuIFRoZSB1c2Ugb2YgYHdkZXZfcnVubmluZyh3ZGV2KWAgc3VnZ2VzdHMgc29tZSByZWxhdGVkIGNoYW5nZXMgaW4gdGhlIHJ1bnRpbWUgc3RhdGUgb2YgYSB3aXJlbGVzcyBkZXZpY2UuIFNpeHRoIGFuZCBzZXZlbnRoIHRoZSBjaGFuZ2VzIGluIGBzY2FuLmNgIGFuZCBgdXRpbC5jYCBsb29rIGxpa2UgaW5jcmVtZW50YWwgY2hhbmdlcyB3aXRoIHBvdGVudGlhbCBpbXBhY3QuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSBmdXp6IHRoaXMgd2l0aCBzeXprYWxsZXI/IFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGtub3csIGBjZmc4MDIxMWAsIGBtYWM4MDIxMWAsIGFuZCBhc3NvY2lhdGVkIGNvbXBvbmVudHMgYXJlIGluZGVlZCBmdXp6YWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgYG1hYzgwMjExX2h3c2ltYCBpbnRlcmZhY2UsIE5MODAyMTEsIGFuZCBzaW11bGF0ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyBhcmUgYWxsIGhlYXZpbHkgdXNlZCBpbiBzeXprYWxsZXIuIFRoYXQncyBhIGJpZyBwbHVzLCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLlxuXG5Pa2F5LCBJJ20gZ29pbmcgdG8gc3RhcnQgcnVubmluZyBzb21lIGdyZXBzIG9yIGNvZGUgaW5zcGVjdGlvbnMgdG8gY29uZmlybS4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBzaG90LCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzY3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6MjQuMTE1NTE3MTU1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODI3MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI0LjIwNzM0NzQ3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTM5NTQ0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvZiBDRkc4MDIxMS4gV2hhdCBmZWF0dXJlcyByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IGhpZGRlbiwgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkgbWlnaHQgb3Zlcmxvb2s/IEEgZGV0YWlsZWQgcmV2aWV3IGhlcmUgd2lsbCBoZWxwIGVuc3VyZSB0aGUgZW50aXJlIHN5c3RlbSBpcyBjb25maWd1cmVkIGFzIGV4cGVjdGVkIGFuZCBhdm9pZCBhbnkgcnVudGltZSBzdXJwcmlzZXMgbGF0ZXIuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIG5haWxpbmcgZG93biBhbGwgdGhlIGNvbm5lY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI2LjAyMTMwNDA2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGlmIENGRzgwMjExXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuICAzOTpcXHRcXHRib29sIFxcXCJubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI2LjAyMTM4NDMyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMjI2OTQ4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgdHJvdWJsZXNob290aW5nIHBhdGgsIEkgc2hvdWxkIHJlYWxseSBkb3VibGUtY2hlY2sgdGhlIGBtYWM4MDIxMV9od3NpbWAgS2NvbmZpZyBzZXR0aW5ncy4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBoaWdoZXItbGV2ZWwgZHJpdmVycywgYnV0IGEgbWlzY29uZmlndXJhdGlvbiB0aGVyZSBjb3VsZCBiZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUuIEEgc2ltcGxlIG92ZXJzaWdodCBpbiB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCdzIGJ1aWxkIG9wdGlvbnMgY291bGQgZXhwbGFpbiB0aGUgb2RkIGJlaGF2aW9yIEknbSBzZWVpbmcuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBidXQgb25lIHRoYXQgY291bGQgc2F2ZSBtZSBhIGxvdCBvZiB0aW1lIGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGFsbCBzcXVhcmVkIGF3YXkgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyLiBUaGF0IGhhcmR3YXJlIHNpbXVsYXRpb24gY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSB2ZXJpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI4LjA0NDA4MDkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTc3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI4LjE0MzA2MTEwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjc4NDc0MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBBbmFseXNpcyBmb3IgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBhcyBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgcGF0Y2guIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyB0aGF0IGFyZSBlaXRoZXIgcHVibGljIG9yIG90aGVyd2lzZSBzaWduaWZpY2FudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gncyBjaGFuZ2VzLlxuXG5GaXJzdCwgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50OlxuXG4qICAgYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWBcbiogICBgd2lwaHlfbmV3X25tYFxuKiAgIGB3aXBoeV91bnJlZ2lzdGVyYFxuKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGBcbiogICBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGBcbiogICBgY2ZnODAyMTFfaWJzc19qb2luZWRgXG4qICAgYHJkZXZfc2NhbmAgKGlubGluZSkgLSBJJ2xsIG5lZWQgdG8gY2hlY2sgYHNjYW4uY2AgZm9yIGNhbGwgc2l0ZXMgb3IgcmVsYXRlZCBmdW5jdGlvbnMuXG4qICAgYHJlZ193ZGV2X2NoYW5fdmFsaWRgXG4qICAgYHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a2BcbiogICBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgXG4qICAgYHJlZ19jaGVja19jaGFuc193b3JrYFxuKiAgIGBjZmc4MDIxMV9wdXRfc2Nhbl9yZXFgIChzdGF0aWMpIC0gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIG9uZS5cbiogICBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYFxuKiAgIGBjZmc4MDIxMV9zY2FuX2RvbmVgXG4qICAgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWBcbiogICBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWBcbiogICBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGBcbiogICBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2BcbiogICBgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGFgXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZmlsdGVyIHRoaXMgbGlzdC4gSSdsbCBmbGFnIHRoZSBzdGF0aWMgb25lcywgbGlrZSBgY2ZnODAyMTFfcHV0X3NjYW5fcmVxYCBhbmQgYHJlZ19jaGVja19jaGFuc193b3JrYCwgYXMgcG90ZW50aWFsbHkgbGVzcyBpbXBvcnRhbnQgdW5sZXNzIHRoZXkgaGF2ZSBzaWduaWZpY2FudCBpbnRlcm5hbCBkZXBlbmRlbmNpZXMgb3IgYXJlIGNhbGxlZCBmcm9tIG91dHNpZGUuIFRoZSBpbmxpbmUgYHJkZXZfc2NhbmAgd2lsbCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuTmV4dCwgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgc291cmNlIGZpbGVzIHRoZW1zZWx2ZXMgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGU6IGBzY2FuLmNgLCBgaWJzcy5jYCwgYHJlZy5jYCwgYHV0aWwuY2AsIGFuZCBgY29yZS5jYCBhcHBlYXIgdG8gYmUgdGhlIGtleSBhcmVhcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gc2VlIHdoYXQgSSBtaWdodCBiZSBtaXNzaW5nLlxuXG5CYXNlZCBvbiB0aGF0LCBhIHNtYWxsZXIgc2V0IG9mIGNhbmRpZGF0ZXMgZW1lcmdlcyBhcyBwYXJ0aWN1bGFybHkgY3JpdGljYWwgdG8gaGlnaGxpZ2h0OlxuXG4qICAgYGNmZzgwMjExX3NjYW5fZG9uZWBcbiogICBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYFxuKiAgIGBjZmc4MDIxMV9zY2FuYCAoSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGluIHRoZSBwYXRjaCBzY29wZSlcbiogICBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYFxuKiAgIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193a2BcbiogICBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIC8gYHJlZ19jaGVja19jaGFubmVsc2BcbiogICBgY2ZnODAyMTFfaWJzc19qb2luZWRgXG4qICAgYF9fY2ZnODAyMTFfaWJzc19qb2luZWRgXG4qICAgYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgXG4qICAgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWBcbiogICBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWBcbiogICBgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlYFxuKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGBcblxuRmluYWxseSwgSSdsbCBkbyBhIHF1aWNrIGNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIGFjdHVhbGx5IHByZXNlbnQgYW5kIGRlZmluZWQgd2l0aGluIHRoZSB1cGRhdGVkIGNvZGViYXNlLiBUaGF0J3MgdGhlIGxhc3QgdmVyaWZpY2F0aW9uIEkgbmVlZCB0byBtYWtlIGJlZm9yZSBJJ20gc2F0aXNmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo0MC40MjE1MzgyOTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzI2MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9zY2FuLmM9MTIwMz12b2lkIF9fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3aylcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTIwNy1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEyMDg6dm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCxcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMDktXFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyAqaW5mbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NDAuNDc5ODcxNzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTczMzIxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFub21hbGllcyBpbiBMZWF2ZSBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsZWF2ZSByZWdpc3RyYXRpb24gZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBoYW5kbGluZyBtaXNzaW5nIG9yIGludmFsaWQgdmFsdWVzIGNvcnJlY3RseSwgZXNwZWNpYWxseSBhcm91bmQgbGVhdmUgcmVxdWVzdHMuIE15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHR3byBzcGVjaWZpYyB2YXJpYWJsZXM6IGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgLiBJIHN1c3BlY3QgdGhlc2UgdmFyaWFibGVzIGFyZSBrZXkgaW4gZmxhZ2dpbmcgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgbGVhdmUgZW50cmllcy4gSSBleHBlY3QgYHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a2AgdG8gYWRkcmVzcyB3ZWVrcyB3aXRoIG1pc3NpbmcgbnVtZXJpY2FsIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBwcmVzZW50IGFuZCBJIGFsc28gZXhwZWN0IGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193a2AgdG8gYWRkcmVzcyB3ZWVrcyB3aXRoIGluY29ycmVjdCBvciBtaXNzaW5nIGNoYW5uZWwgaW5mb3JtYXRpb24gdGllZCB0byB0aGUgbGVhdmUgcmVxdWVzdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRhdGEgYWN0dWFsbHkgdGVsbHMgdXMgYWJvdXQgdGhlc2UgdmFyaWFibGVzLiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo0Mi40MzcyMDY2OTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTIxMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ19sZWF2ZV9pbnZhbGlkX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuYz01NDg9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY0Ny1cXHRJTklUX1dPUksoXFx1MDAyNnJkZXYtXFx1MDAzZXNjaGVkX3NjYW5fcmVzX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHNfd2spO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjQ4OlxcdHdpcGh5X3dvcmtfaW5pdChcXHUwMDI2cmRldi1cXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drLCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo2NDk6XFx0SU5JVF9XT1JLKFxcdTAwMjZyZGV2LVxcdTAwM2VyZWdfbGVhdmVfbmFuX3drLCByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2spO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjUwLVxcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93ayxcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMzM3PXN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDQ4LVxcbm5ldC93aXJlbGVzcy9yZWcuYzoyNDQ5OnZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ1MC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ3NC1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ3NTp2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc2LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuaD0xNzk9dm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZCk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTgxLS8qKlxcbm5ldC93aXJlbGVzcy9yZWcuaDoxODI6ICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2sgLSBjaGVjayBpZiBjaGFubmVscyBhcmUgbm8gbG9uZ2VyIHVzYWJsZSBhbmQgbGVhdmVcXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTgzLSAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTg1LSAqL1xcbm5ldC93aXJlbGVzcy9yZWcuaDoxODY6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5oLTE4Ny1cXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTg4LS8qKlxcbm5ldC93aXJlbGVzcy9yZWcuaDoxODk6ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xOTAtICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5oLTE5Mi0gKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTkzOiAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKCkgd2hpY2ggcnVucyB3aXRoIHRoZSB3aXBoeSBtdXRleCBoZWxkLlxcbm5ldC93aXJlbGVzcy9yZWcuaC0xOTQtICovXFxubmV0L3dpcmVsZXNzL3JlZy5oOjE5NTp2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC93aXJlbGVzcy9yZWcuaC0xOTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjQyLjQ4NjMzMTAzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTMzNDUxMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBCU1MgVXBkYXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IEJTUyBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIHRoZSB3aXJlbGVzcyBzdGFjaywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGFzc29jaWF0aW9uIHVwZGF0ZXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhbmQgYGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlgLiBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIG1hbmFnaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhY2Nlc3MgcG9pbnRzIGFuZCBob3cgb3VyIGRldmljZSBhc3NvY2lhdGVzIHdpdGggdGhlbSwgc28gSSB3YW50IGEgY2xlYXIgcGljdHVyZS4gSSdtIGltYWdpbmluZyBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhcyB0aGUgZm91bmRhdGlvbmFsIGZ1bmN0aW9uLCB0aGUgbG93ZXItbGV2ZWwgd29ya2hvcnNlIHRoYXQgbGlrZWx5IGRvZXMgdGhlIGJ1bGsgb2YgdGhlIGRpcnR5IHdvcmsuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLCB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgQlNTIGVudHJ5IHdpdGggbmV3IGluZm9ybWF0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0aGluZ3MgZ2V0IGNvbmNyZXRlLiBGcm9tIHRoZXJlIEknbSBndWVzc2luZyBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWAgcHJvYmFibHkgc2l0cyBhIGxldmVsIGhpZ2hlciBhbmQgbWFrZXMgZGVjaXNpb25zIGFib3V0IHdoYXQgbmVlZHMgdXBkYXRpbmcsIGNhbGxzIGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFzIG5lZWRlZCwgYW5kIHBlcmhhcHMgZGVhbHMgd2l0aCBtb3JlIGFzc29jaWF0aW9uLXNwZWNpZmljIGxvZ2ljLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBjb25jdXJyZW50IGFjY2Vzcy4gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQgYW5kIGhvdyBhcmUgdGhvc2Ugc3RydWN0dXJlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgaWYgdGhlIHNhbWUgQlNTIGVudHJ5IGlzIGJlaW5nIHVwZGF0ZWQgZnJvbSBtdWx0aXBsZSBzb3VyY2VzPyBUaGVuIEknbGwgaGF2ZSB0byBzZWUgaWYgdGhlIHNlY29uZCBmdW5jdGlvbiBtYWtlcyBhIHNlcGFyYXRlIGNoZWNrLiBJdCBpcyBtb3N0IGxpa2VseSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGFzc29jaWF0aW9uIHByb2Nlc3Mgb3IgYSByZWxhdGVkIGNvbm5lY3Rpb24gc3RhdGUuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgaW5mb3JtYXRpb24gY29tZXMgZnJvbSB0aGF0IGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBCU1MgZW50cnk6IElzIGl0IGZyb20gdGhlIGZpcm13YXJlLCB0aGUgZHJpdmVyLCBvciBmcm9tIHRoZSBzY2FuIHJlc3VsdHM/IFRoZW4gSSdsbCBjaGVjayBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgcmVndWxhdG9yeSBkYXRhYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyOTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo0NS42MTk3ODU5MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzI0MjEyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NmZzgwMjExX2Jzc191cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9zY2FuLmM9MjAzND1zdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoyMDM1Ol9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yMDM2LVxcdFxcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnRtcCxcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM9MjE0NT1jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjE1MS1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19sb2NrKTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjIxNTI6XFx0cmVzID0gX19jZmc4MDIxMV9ic3NfdXBkYXRlKHJkZXYsIHRtcCwgc2lnbmFsX3ZhbGlkLCB0cyk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yMTUzLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyZGV2LVxcdTAwM2Vic3NfbG9jayk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTIzMjU9Y2ZnODAyMTFfaW5mb3JtX3NpbmdsZV9ic3NfZGF0YShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDM5LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cmRldi1cXHUwMDNlYnNzX2xvY2spO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MjQ0MDpcXHRyZXMgPSBfX2NmZzgwMjExX2Jzc191cGRhdGUocmRldiwgXFx1MDAyNnRtcCwgc2lnbmFsX3ZhbGlkLCB0cyk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDQxLVxcdGlmICghcmVzKVxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDYyLVxcdHRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoXFx1MDAyNnJlcy1cXHUwMDNlcHViKTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjI0NjM6XFx0LyogX19jZmc4MDIxMV9ic3NfdXBkYXRlIGdpdmVzIHVzIGEgcmVmZXJlbmNlZCByZXN1bHQgKi9cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTI0NjQtXFx0cmV0dXJuIFxcdTAwMjZyZXMtXFx1MDAzZXB1YjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NDYuMDUzMDMxNjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNzk1ODk4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGludm9sdmVkIGluIHRoZSA4MDIuMUQgY2xhc3NpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGNmZzgwMjExIGZyYW1ld29yay4gR2l2ZW4gdGhlIG5hbWUsIEknbSBiZXR0aW5nIGl0IGhhbmRsZXMgY2xhc3NpZnlpbmcgdHJhZmZpYyBiYXNlZCBvbiB0aGUgODAyLjFEIHN0YW5kYXJkLCBwcm9iYWJseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgcHJpb3JpdHkgYml0cywgb3Igc29tZSBraW5kIG9mIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKSBkZXRlcm1pbmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBpdCdzIGRvaW5nIHRoZSBjbGFzc2lmaWNhdGlvbi4gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgYml0d2lzZSBjaGVjaz8gRG9lcyBpdCB1dGlsaXplIGxvb2t1cCB0YWJsZXMgb3Igc29tZSBtb3JlIGNvbXBsZXggYWxnb3JpdGhtPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/XG5cbkkgc2hvdWxkIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyB0byB0aGlzIGZ1bmN0aW9uOiB3aGF0IGtpbmQgb2YgcGFja2V0IGluZm9ybWF0aW9uIGlzIGl0IHJlY2VpdmluZz8gSXMgaXQgdGhlIGVudGlyZSBFdGhlcm5ldCBmcmFtZSwganVzdCB0aGUgVkxBTiBoZWFkZXIsIG9yIHNvbWV0aGluZyBlbHNlPyBUaGVuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgb3V0cHV0cyBhcmUg4oCTIGlzIGl0IHJldHVybmluZyBhIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgYSBwcmlvcml0eSB2YWx1ZSwgb3IgbW9kaWZ5aW5nIHNvbWUga2luZCBvZiBpbnRlcm5hbCBzdGF0ZT8gSSdsbCBwcm9iYWJseSBsb29rIGZvciB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgc29tZSBkZWNlbnQgY29tbWVudHMgd2l0aGluIHRoZSBmdW5jdGlvbiBvciBzdXJyb3VuZGluZyBjb2RlIHRoYXQgd2lsbCBoZWxwLiBLbm93aW5nIHRoZSBpbnRlcm5hbHMgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFFvUyBmbG93LCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IGluIGFueSBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBtYWtlLCBvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjI4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NDkuMzMyNjI0NTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMwNzU2ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3V0aWwuYz0xMDEyPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKTtcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMTAxNC0vKiBHaXZlbiBhIGRhdGEgZnJhbWUgZGV0ZXJtaW5lIHRoZSA4MDIuMXAvMWQgdGFnIHRvIHVzZS4gKi9cXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEwMTU6dW5zaWduZWQgaW50IGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEwMTYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9xb3NfbWFwICpxb3NfbWFwKVxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMTY2LX1cXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjExNjc6RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKTtcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTExNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjQ5LjYyNTcwMzQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjcyMzc2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UgdGhpcyBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGFzeW5jaHJvbm91cyB3aXJlbGVzcyBkZXZpY2UgZXZlbnRzIHdpdGhpbiB0aGUgY2ZnODAyMTEgY29yZSwgcmlnaHQ/IFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV2ZW50cyBhcmUgcXVldWVkLCBwcm9jZXNzZWQsIGFuZCB1bHRpbWF0ZWx5IGRlbGl2ZXJlZCB0byB0aGUgcmVsZXZhbnQgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZmxvdy4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBzb21lIHNvcnQgb2Ygd29ya3F1ZXVlIG9yIHRhc2tsZXQgbWVjaGFuaXNtLCBjb25zaWRlcmluZyB0aGUgbmVlZCB0byBkZWNvdXBsZSBldmVudCBnZW5lcmF0aW9uIGZyb20gdGhlIGNvbnRleHQgd2hlcmUgdGhlIGV2ZW50IG9jY3Vycy4gSSdtIGtlZW4gdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBtYW5hZ2VkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIHdpcmVsZXNzIGRldmljZXMuIElzIHRoZXJlIGEgbG9jayBwcm90ZWN0aW5nIHRoZSBldmVudCBxdWV1ZSwgYW5kIGlmIHNvLCB3aGF0J3MgaXRzIGdyYW51bGFyaXR5PyBXaGF0IGFib3V0IGV2ZW50IG9yZGVyaW5nPyBJcyB0aGVyZSBhIGd1YXJhbnRlZSBldmVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gYSBzcGVjaWZpYyBzZXF1ZW5jZSwgb3IgaXMgaXQgaGFuZGxlZCBpbiBhIFwiYmVzdCBlZmZvcnRcIiBzdHlsZT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGRpZmZlcmVudCBldmVudCB0eXBlcyAoZS5nLiwgc2NhbiByZXN1bHRzLCBjb25uZWN0aW9uIHN0YXR1cyB1cGRhdGVzLCByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzKSBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgaXMgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgZXZlbnRzLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGB3aXBoeWAgc3RydWN0dXJlcyBjb21lIGludG8gcGxheSwgYXMgdGhpcyBpcyB0aGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSBpbiBjZmc4MDIxMSB0aGF0IHJlcHJlc2VudHMgdGhlIHdpcmVsZXNzIGRldmljZSwgYW5kIG5lZWRzIHRvIGJlIHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo1Mi4wNTI5NDMyNThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDA2OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9MTQxMD1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NjQtXFx0ICovXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDY1OlxcdGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMod2Rldik7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDY2LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD00ODE9dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dpcGh5X3dvcmtzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTQ4Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCB3aXBoeV93b3JrICplbmQpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDgzOnZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTQ4NC1cXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmM9MTE4MT12b2lkIGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMTIwOC1cXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyMDk6dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMjEwLXtcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmM9MTI2NT12b2lkIGNmZzgwMjExX3Byb2Nlc3NfcmRldl9ldmVudHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMjcxLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdClcXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyNzI6XFx0XFx0Y2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyh3ZGV2KTtcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyNzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo1Mi4wOTk5NTYyNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyODY3NjIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGNhbGN1bGF0aW5nIHRoZSBiZWFjb24gaW50ZXJ2YWwgZGF0YSwgd2hpY2ggaXMgZnVuZGFtZW50YWwgZm9yIFdpLUZpIGNvbW11bmljYXRpb24g4oCTIGVuc3VyaW5nIGRldmljZXMga25vdyB3aGVuIHRvIGxpc3RlbiBmb3IgbWFuYWdlbWVudCBmcmFtZXMgYW5kIHN5bmNocm9uaXplIHRoZWlyIHRyYW5zbWlzc2lvbnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgaG93IGJlYWNvbiBpbnRlcnZhbHMsIERUSU0gcGVyaW9kcywgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycyBhcmUgaW50ZXJjb25uZWN0ZWQgd2l0aGluIHRoZSBicm9hZGVyIDgwMi4xMSBmcmFtZXdvcmsuIEknbSBpbW1lZGlhdGVseSBnb2luZyB0byBiZSBsb29raW5nIGZvcjpcblxuKiAgICoqSW5wdXQgcGFyYW1ldGVyczoqKiBXaGF0IGRhdGEgZG9lcyBpdCB0YWtlIGFzIGlucHV0PyBJIGV4cGVjdCB0aGluZ3MgbGlrZSBjaGFubmVsIGluZm9ybWF0aW9uLCBzdXBwb3J0ZWQgcmF0ZXMsIGNhcGFiaWxpdGllcywgYW5kIHBvdGVudGlhbGx5IHNldHRpbmdzIHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBvciB2aXJ0dWFsIGludGVyZmFjZXMgdG8gYmUgY3JpdGljYWwuIEtub3dpbmcgdGhlIGlucHV0IGNvbnRleHQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhbGdvcml0aG0uIEknbGwgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBtZW50YWxseSB2YWxpZGF0ZSB0aGF0IHRoZSBleHBlY3RlZCBhcmd1bWVudHMgYXJlIGNvcnJlY3RseSBzdXBwbGllZC5cbiogICAqKkNhbGN1bGF0aW9uczoqKiBXaGF0IGFjdHVhbCBjb21wdXRhdGlvbnMgYXJlIHBlcmZvcm1lZD8gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBiZWFjb24gaW50ZXJ2YWwsIERUSU0gcGVyaW9kLCBhbmQgb3RoZXIgcmVsYXRlZCBmaWVsZHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHBvcHVsYXRlZCwgYW5kIGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGRlcml2ZWQgZnJvbSBhbnkgZXh0ZXJuYWwgY29uZmlndXJhdGlvbi4gQWxzbywgYW55IG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucyB3aWxsIGJlIGluIG15IGZvY3VzLlxuKiAgICoqRXJyb3IgaGFuZGxpbmcvRWRnZSBjYXNlczoqKiBXaGF0IGRvZXMgaXQgZG8gaW4gYW5vbWFsb3VzIHNpdHVhdGlvbnM/IEZvciBleGFtcGxlLCB3aGF0IGhhcHBlbnMgaWYgdGhlIGlucHV0IGlzIGluY29uc2lzdGVudCwgb3IgaWYgdGhlcmUncyBhbiB1bnN1cHBvcnRlZCByYXRlIGNvbWJpbmF0aW9uPyBIb3cgZG9lcyBpdCBoYW5kbGUgemVybyB2YWx1ZXMgb3IgdW5yZWFzb25hYmxlIHJlcXVlc3RzIGZvciBpbnRlcnZhbHM/IEhvdyByb2J1c3QgaXMgdGhlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRoZSBoYW5kbGluZyBvZiBleGNlcHRpb25hbCBvciB1bmV4cGVjdGVkIGlucHV0P1xuKiAgICoqUmV0dXJuIHZhbHVlcy9TaWRlIGVmZmVjdHM6KiogV2hhdCBkb2VzIGl0IHJldHVybiBvciBtb2RpZnk/IEkgYXNzdW1lIGl0IG1pZ2h0IGJlIHJldHVybmluZyB0aGUgY2FsY3VsYXRlZCBiZWFjb24gZGF0YSBpbiBhIHNwZWNpZmljIHN0cnVjdHVyZS4gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHMgb24gYW55IGdsb2JhbCB2YXJpYWJsZXM/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbnkgb3RoZXIgcGFydHMgb2YgdGhlIGRyaXZlciBvciBrZXJuZWw/XG4qICAgKipPcHRpbWl6YXRpb24gR29hbHM6KiogSXMgdGhlcmUgYW55IHdvcmsgZG9uZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvcmUgbG9naWMgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEknbGwgcHJvYmFibHkgc3RlcCB0aHJvdWdoIHRoZSBjb2RlIG1lbnRhbGx5LCBvciB3aXRoIGEgZGVidWdnZXIsIGlmIG5lZWRlZCwgbWFraW5nIG5vdGVzIG9uIGFueXRoaW5nIHRoYXQgc2VlbXMgbm9uLW9idmlvdXMgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gZGVidWdnaW5nIGFueSB3aXJlbGVzcyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NTUuNzI4NjM0OTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3V0aWwuYz0yNDYwPXN0YXRpYyBpbnQgY2ZnODAyMTFfd2Rldl9iaShzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNDc3LVxcbm5ldC93aXJlbGVzcy91dGlsLmM6MjQ3ODpzdGF0aWMgdm9pZCBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgbmV3X2JlYWNvbl9pbnQsXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNDc5LVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKmJlYWNvbl9pbnRfZ2NkLFxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNTI1PWludCBjZmc4MDIxMV92YWxpZGF0ZV9iZWFjb25faW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMS1cXHQgKiB0byBjZmc4MDIxMV9jaGVja19jb21iaW5hdGlvbnMoKSwgaW4gd2hpY2ggY2FzZSB3ZSdsbCB2YWxpZGF0ZSBtb3JlXFxubmV0L3dpcmVsZXNzL3V0aWwuYzoyNTMyOlxcdCAqIHRocm91Z2ggdGhlIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKCkgY2FsbCBhbmQgY29kZSBpblxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMy1cXHQgKiBjZmc4MDIxMV9pdGVyX2NvbWJpbmF0aW9ucygpLlxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNTQyPWludCBjZmc4MDIxMV9pdGVyX2NvbWJpbmF0aW9ucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNTcwLVxcdCAqL1xcbm5ldC93aXJlbGVzcy91dGlsLmM6MjU3MTpcXHRjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YSh3aXBoeSwgcGFyYW1zLVxcdTAwM2VuZXdfYmVhY29uX2ludCxcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTI1NzItXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmJlYWNvbl9pbnRfZ2NkLCBcXHUwMDI2YmVhY29uX2ludF9kaWZmZXJlbnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjU1Ljc3NTM0NTc1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDMwNDE0MjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQcm9wb3NlZCBjZmc4MDIxMSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgdGhpcyBjb2RlIGlzIGNhbGxlZC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYGNmZzgwMjExX2l0ZXJfY29tYmluYXRpb25zYCBhbmQgb3RoZXIgY2FsbGVycyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGVuIEknbGwgbWV0aWN1bG91c2x5IHJldmlldyB0aGUgY2hhbmdlcyB0aGlzIHBhdGNoIG1ha2VzLlxuXG5GaXJzdCwgd2l0aGluIGBuZXQvd2lyZWxlc3MvY29yZS5jYCwgdGhlIHBhdGNoIHJlbW92ZXMgc29tZSBgV0FSTl9PTmAgY2hlY2tzIGluIGBjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VgIGFuZCBgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIC0gcHJvYmFibHkgd29ydGggYSBjbG9zZXIgbG9vayB0byBzZWUgd2h5IHRoZXNlIGNoZWNrcyB3ZXJlIGRlZW1lZCB1bm5lY2Vzc2FyeS4gSXQgYWxzbyBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyBgcmVnX2NoZWNrX2NoYW5zX3drYCBhbmQgYHJlZ19sZWF2ZV9uYW5fd2tgIGluIHRoZSByZWdpc3RlcmVkIGRldmljZSBsaWZlY3ljbGUuXG5cbmBuZXQvd2lyZWxlc3MvY29yZS5oYCBzaG93cyBzdHJ1Y3QgY2hhbmdlczogYWRkaW5nIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgdG8gYGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnRgLCBhbmQgYWRkaW5nIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdGhlIGBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZWAgc3RydWN0LiBBbHNvLCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiBmb3IgYGlqYCBub3cgaG9sZHMgYSBgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzYC5cblxuYG5ldC93aXJlbGVzcy9pYnNzLmNgIG1vZGlmaWVzIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYCBhbmQgYGNmZzgwMjExX2lic3Nfam9pbmVkYCByZWxhdGVkIHRvIEJTUyByZWZlcmVuY2UgY291bnRpbmcgYW5kIHBhc3NpbmcgYSBCU1MgcG9pbnRlciBhY3Jvc3MgZXZlbnRzLlxuXG5gbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhgIGhhcyB0aGUgYHJkZXZfc2NhbmAgZnVuY3Rpb24gc2V0dGluZyBgZHJpdmVyX293bnNgIHRvIHRydWUsIGFuZCBjbGVhcmluZyBpdCBvbiBlcnJvci5cblxuYG5ldC93aXJlbGVzcy9yZWcuY2AgaW50cm9kdWNlcyBhc3luYyB3b3JrZXJzIGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgIGZvciByZWd1bGF0b3J5IGNoYW5uZWwvTkFOIGxlYXZlcywgYW5kIGByZWdfY2hlY2tfY2hhbnNfd29ya2AgdG8gcXVldWUgYHJlZ19jaGVja19jaGFuc193a2AgZm9yIGFsbCByZGV2cyB1bmRlciBSQ1UuIEl0IGFsc28gdXNlcyBgd2Rldl9ydW5uaW5nKHdkZXYpYCBpbiBgcmVnX3dkZXZfY2hhbl92YWxpZGAuXG5cbmBuZXQvd2lyZWxlc3Mvc2Nhbi5jYCBjb25jZXJucyBpdHNlbGYgd2l0aCB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBzY2FuIHJlcXVlc3RzIHZpYSBgc3RhbGVgIGFuZCBgZHJpdmVyX293bnNgIGluIGBjZmc4MDIxMV9wdXRfc2Nhbl9yZXFgLCBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYCwgYW5kIGBjZmc4MDIxMV9zY2FuX2RvbmVgLiBUaGUgcGF0Y2ggYWxzbyB2YWxpZGF0ZXMgYmVhY29uIGRhdGEgZm9yIGhpZGRlbiBCU1MgdmlhIGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBzaW1wbGlmaWVzIGEgY2hlY2sgaW4gYGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlgLlxuXG5GaW5hbGx5LCBgbmV0L3dpcmVsZXNzL3V0aWwuY2AgdXNlcyBgc2tiX2hlYWRlcl9wb2ludGVyYCBzYWZlbHkgYWNjZXNzIHBhY2tldCBoZWFkZXJzIGluIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCwgaGFuZGxlcyBhbiB1cGRhdGVkIGBFVkVOVF9JQlNTX0pPSU5FRGAgd2l0aCB0aGUgQlNTIHBvaW50ZXIgaW4gYGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNgLCBhbmQgZml4ZXMgYmVhY29uIGludGVydmFsIGNhbGN1bGF0aW9uIGluIGBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YWAuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdpdGhpbiBhIGZ1enppbmcgY29udGV4dCBsaWtlIFFFTVUgYW5kIHN5emthbGxlci4gU2luY2UgYGNmZzgwMjExYCBpcyB0aGUgY29yZSwgYW5kIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIG5sODAyMTEgc29ja2V0cywgbWFjODAyMTEvbWFjODAyMTFfaHdzaW0sIHdpcmVsZXNzIGV4dGVuc2lvbnMsIHBhY2tldCBzb2NrZXRzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBpcyBrbm93biB0byB0YXJnZXQgbmw4MDIxMSBleHRlbnNpdmVseS5cblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBrZXkuIFdlIG5lZWQgYENGRzgwMjExYCwgb2J2aW91c2x5LiBXZSBhbHNvIG5lZWQgYE1BQzgwMjExX0hXU0lNYCBhbmQgb3IgYE5MODAyMTFgLiBJJ2xsIGNvbmZpcm0gdGhhdCBgQ0ZHODAyMTFgIGRvZXNuJ3QgcmVxdWlyZSBhbnl0aGluZyBlbHNlLCBidXQgSSBzYXcgYSBtZW50aW9uIG9mIGBDRkc4MDIxMV9XRVhUYCBpbiBgaWJzcy5jYCwgc28gSSdsbCBpbmNsdWRlIGl0LiBTbywgYENGRzgwMjExYCwgYENGRzgwMjExX1dFWFRgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBzaG91bGQgYmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGluY2x1ZGUuXG5cbk5vdyBmb3IgdGhlIHRhcmdldGVkIHN5bWJvbHM6IFdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBtb2RpZmllZCBvciBuZXdseSBpbXBsZW1lbnRlZCBmdW5jdGlvbnM6IGBjZmc4MDIxMV9zY2FuX2RvbmVgLCBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a2AsIGByZWdfY2hlY2tfXG5cbiIsIklucHV0VG9rZW5zIjoxODYxMCwiT3V0cHV0VG9rZW5zIjozNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjA2LjA3OTQ5MTA5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzk0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcIl9fX2NmZzgwMjExX3NjYW5fZG9uZVwiLFxuICAgIFwicmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a1wiLFxuICAgIFwicmVnX2NoZWNrX2NoYW5zX3dvcmtcIixcbiAgICBcImNmZzgwMjExX2lic3Nfam9pbmVkXCIsXG4gICAgXCJfX2NmZzgwMjExX2lic3Nfam9pbmVkXCIsXG4gICAgXCJjZmc4MDIxMV9jbGFzc2lmeTgwMjFkXCIsXG4gICAgXCJfX2NmZzgwMjExX2Jzc191cGRhdGVcIixcbiAgICBcImNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlcIixcbiAgICBcImNmZzgwMjExX3N0b3BfcDJwX2RldmljZVwiLFxuICAgIFwiY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc2Nhbl9kb25lXCIsXG4gICAgXCJfX19jZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tcIixcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJjZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiX19jZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICAgIFwiX19jZmc4MDIxMV9ic3NfdXBkYXRlXCIsXG4gICAgXCJjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5XCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VcIixcbiAgICBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MTowNi4xNTMyOTI1MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzgwNzAxNzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTE6MDYuMTUzNzMyNzAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc3ODAyNTcwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgbGlmZXRpbWUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHBhY2tldCBwYXJzaW5nIGFjcm9zcyBjZmc4MDIxMTpcXG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4yLiBSZWd1bGF0b3J5IHdvcmtxdWV1ZSBzcGxpdDogU29sdmVzIGxvY2sgb3JkZXJpbmcvZGVhZGxvY2tzIGJldHdlZW4gcnRubF9sb2NrIGFuZCB3aXBoeSBtdXRleCBkdXJpbmcgcmVndWxhdG9yeSBpbnRlcmZhY2UgdGVhcmRvd24uIFRoaXMgZmFsbHMgc3RyaWN0bHkgdW5kZXIgTE9DS0RFUC5cXG4zLiBJQlNTIGV2ZW50IGhhbmRsaW5nOiBQYXNzZXMgQlNTIHJlZmVyZW5jZXMgZGlyZWN0bHkgdG8gZXZlbnQgcHJvY2Vzc2luZyByYXRoZXIgdGhhbiByZS1sb29raW5nIHRoZW0gdXA7IGFsbCBldmVudCBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXMgcHJvcGVybHkgbWFuYWdlZC5cXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNjcxNWUwMWVkMDcxYmIxNjQ0MTE5M2I0Y2Q3NWM1NDdiZDJiNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjUwOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMjQ0LDkgKzI0NCw4IEBAIHZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gXG4gXHRpZiAocmRldi1cdTAwM2VzY2FuX3JlcSBcdTAwMjZcdTAwMjYgcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VyZXEud2RldiA9PSB3ZGV2KSB7XG4tXHRcdGlmIChXQVJOX09OKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0ICAgICAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKSlcbitcdFx0aWYgKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcbiBcdH1cbkBAIC02NDYsNiArNjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmssIGNmZzgwMjExX2Rlc3Ryb3lfaWZhY2Vfd2spO1xuIFx0d2lwaHlfd29ya19pbml0KFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9zdG9wX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Bfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7XG4rXHR3aXBoeV93b3JrX2luaXQoXHUwMDI2cmRldi1cdTAwM2VyZWdfY2hlY2tfY2hhbnNfd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKTtcbitcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxuIFx0XHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spO1xuQEAgLTEzNDUsNiArMTM0Niw3IEBAIHZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJkZXYtXHUwMDNlZGZzX3VwZGF0ZV9jaGFubmVsc193ayk7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cmRldi1cdTAwM2ViYWNrZ3JvdW5kX2NhY19kb25lX3drKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmspO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9jYWNfZG9uZV93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlbWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7XG5AQCAtMTc1OCw5ICsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuIFx0XHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXNjYW5fcmVxIFx1MDAyNlx1MDAyNiByZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0XHQgICAgICFyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2Vub3RpZmllZCkpKVxuK1x0XHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fFxuK1x0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSlcbiBcdFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0XHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtMjQsNiArMjQsMTYgQEBcbiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIGluZm87XG4gXHRib29sIG5vdGlmaWVkO1xuK1x0LypcbitcdCAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuXG4rXHQgKiByZGV2X3NjYW4oKSBhbmQgY2ZnODAyMTFfc2Nhbl9kb25lKClcbitcdCAqL1xuK1x0Ym9vbCBkcml2ZXJfb3ducztcbitcdC8qXG4rXHQgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGxcbitcdCAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0XG4rXHQgKi9cbitcdGJvb2wgc3RhbGU7XG4gXHQvKiBtdXN0IGJlIGxhc3QgLSB2YXJpYWJsZSBtZW1iZXJzICovXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHJlcTtcbiB9O1xuQEAgLTEwNCw2ICsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yaztcbiBcdHN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93aztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcbitcdHN0cnVjdCB3aXBoeV93b3JrIHJlZ19jaGVja19jaGFuc193aztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWdfbGVhdmVfbmFuX3drO1xuIFxuIFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHJhZGFyX2NoYW5kZWY7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93aztcbkBAIC0yODAsOCArMjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHtcbiBcdFx0XHRib29sIGxvY2FsbHlfZ2VuZXJhdGVkO1xuIFx0XHR9IGRjO1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7XG4rXHRcdFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0XHR9IGlqO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHU4IHBlZXJfYWRkcltFVEhfQUxFTl07XG5AQCAtMzQ0LDggKzM1NSw3IEBAIGludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTtcbiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xuLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4tXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7XG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7XG4gaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXG4rKysgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5AQCAtMTYsMjYgKzE2LDE4IEBAXG4gI2luY2x1ZGUgXCJyZGV2LW9wcy5oXCJcbiBcbiBcbi12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcylcbiB7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4tXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XG4gI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG4gXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4gI2VuZGlmXG4gXG4gXHRpZiAoV0FSTl9PTih3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpXG4tXHRcdHJldHVybjtcbitcdFx0Z290byBwdXRfYnNzO1xuIFxuIFx0aWYgKCF3ZGV2LVx1MDAzZXUuaWJzcy5zc2lkX2xlbilcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4tXG4tXHRpZiAoV0FSTl9PTighYnNzKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpIHtcbiBcdFx0Y2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XG5AQCAtNDMsMTcgKzM1LDIyIEBAIHZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4gXHR9XG4gXG4gXHRjZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7XG4rXHQvKiB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGV2ZW50IGlzIHRyYW5zZmVycmVkIHRvIGN1cnJlbnRfYnNzICovXG4gXHR3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2JzcyA9IGJzc19mcm9tX3B1Yihic3MpO1xuIFxuIFx0Y2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTtcbiBcbi1cdG5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSksIGRldiwgYnNzaWQsXG4rXHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cdTAwM2Vic3NpZCxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7XG4rXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFx0d2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgXHUwMDI2d3JxdSwgTlVMTCk7XG4gI2VuZGlmXG4rXHRyZXR1cm47XG4rXG4rcHV0X2JzczpcbitcdGNmZzgwMjExX3B1dF9ic3Mod2Rldi1cdTAwM2V3aXBoeSwgYnNzKTtcbiB9XG4gXG4gdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG5AQCAtNjIsNiArNTksNyBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2O1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHRyYWNlX2NmZzgwMjExX2lic3Nfam9pbmVkKGRldiwgYnNzaWQsIGNoYW5uZWwpO1xuQEAgLTY5LDEzICs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdGlmIChXQVJOX09OKCFjaGFubmVsKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbitcdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4rXHRpZiAoV0FSTl9PTighYnNzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXYgPSBremFsbG9jX29iaigqZXYsIGdmcCk7XG4tXHRpZiAoIWV2KVxuK1x0aWYgKCFldikge1xuK1x0XHRjZmc4MDIxMV9wdXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGJzcyk7XG4gXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdGV2LVx1MDAzZXR5cGUgPSBFVkVOVF9JQlNTX0pPSU5FRDtcbi1cdG1lbWNweShldi1cdTAwM2Vpai5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcbi1cdGV2LVx1MDAzZWlqLmNoYW5uZWwgPSBjaGFubmVsO1xuK1x0ZXYtXHUwMDNlaWouYnNzID0gYnNzO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2d2Rldi1cdTAwM2VldmVudF9sb2NrLCBmbGFncyk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmV2LVx1MDAzZWxpc3QsIFx1MDAyNndkZXYtXHUwMDNlZXZlbnRfbGlzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTQ2NCw3ICs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0cmFjZV9yZGV2X3NjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmVxdWVzdCk7XG4rXHRyZXF1ZXN0LVx1MDAzZWRyaXZlcl9vd25zID0gdHJ1ZTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZXNjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgXHUwMDI2cmVxdWVzdC1cdTAwM2VyZXEpO1xuK1x0aWYgKHJldClcbitcdFx0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IGZhbHNlO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLjExNjY1ZTBhN2VmYzggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTIzNDUsNyArMjM0NSw3IEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiBcdGlmdHlwZSA9IHdkZXYtXHUwMDNlaWZ0eXBlO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRoZSBpbnRlcmZhY2UgaXMgYWN0aXZlICovXG4tXHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKHdkZXYtXHUwMDNlbmV0ZGV2KSlcbitcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIE5BTiBkb2Vzbid0IGhhdmUgbGlua3MsIGhhbmRsZSBpdCBzZXBhcmF0ZWx5ICovXG5AQCAtMjQ0NiwxOSArMjQ0Niw1MiBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSlcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1xuK1x0cmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsXG4rXHRcdFx0ICAgIHJlZ19sZWF2ZV9uYW5fd2spO1xuK1xuK1x0Lyogc3RvcHBpbmcgTkFOIGNsb3NlcyBpdHMgZGF0YSBpbnRlcmZhY2VzLCB3aGljaCBuZWVkcyB0aGUgUlROTCAqL1xuK1x0cnRubF9sb2NrKCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdGJvb2wgdmFsaWQ7XG4gXG4tXHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXG4tXHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTtcbitcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuK1x0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2KTtcbiBcdFx0aWYgKCF2YWxpZClcbiBcdFx0XHRjZmc4MDIxMV9sZWF2ZShyZGV2LCB3ZGV2LCAtMSk7XG4gXHR9XG4rXG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxuK3tcbitcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1x0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2lwaHktXHUwMDNlbXR4KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBUZWFyaW5nIGRvd24gTkFOIG5lZWRzIHRoZSBSVE5MIGZvciBjbG9zaW5nIE5BTl9EQVRBXG4rXHRcdCAqIGludGVyZmFjZXMsIGhhbmRsZSB0aGF0IHNlcGFyYXRlbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxuK1x0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VyZWdfbGVhdmVfbmFuX3drKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNmZzgwMjExX2xlYXZlX2xvY2tlZChyZGV2LCB3ZGV2LCAtMSk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbkBAIC0yNDY2LDEyICsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwiVmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cIik7XG4tXHRydG5sX2xvY2soKTtcbiBcbi1cdGZvcl9lYWNoX3JkZXYocmRldilcbi1cdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRydG5sX3VubG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KVxuK1x0XHR3aXBoeV93b3JrX3F1ZXVlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIFx1MDAyNnJkZXYtXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drKTtcbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaFxuaW5kZXggZmMzMWM1ZjlhNjFhYi4uYzU4NzA3OWVhZDhmYiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oXG5AQCAtMTc4LDYgKzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcbiAgKi9cbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTtcbiBcbisvKipcbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayAtIGNoZWNrIGlmIGNoYW5uZWxzIGFyZSBubyBsb25nZXIgdXNhYmxlIGFuZCBsZWF2ZVxuKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXG4rICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxuKyAqL1xuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xuK1xuKy8qKlxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGVcbisgKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4rICpcbisgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC5cbisgKi9cbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuK1xuIGV4dGVybiBjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW107XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcbiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xMTE0LDYgKzExMTQsMjEgQEAgaW50IGNmZzgwMjExX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxuKyAqIGUuZy4gbWFjODAyMTEgbWF5IGNhbmNlbCBpdCBhc3luY2hyb25vdXNseSBhbmQgc3RpbGwgdXNlIGl0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxuK3tcbitcdGlmICghcmVxKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVxLVx1MDAzZWRyaXZlcl9vd25zKVxuK1x0XHRyZXEtXHUwMDNlc3RhbGUgPSB0cnVlO1xuK1x0ZWxzZVxuK1x0XHRrZnJlZShyZXEpO1xuK31cbitcbiB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgYm9vbCBzZW5kX21lc3NhZ2UpXG4ge1xuQEAgLTExNzMsMTAgKzExODgsMTAgQEAgdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFxuIFx0ZGV2X3B1dCh3ZGV2LVx1MDAzZW5ldGRldik7XG4gXG4tXHRrZnJlZShyZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xuIFxuLVx0a2ZyZWUocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4gXHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbiBcbiBcdGlmICghc2VuZF9tZXNzYWdlKVxuQEAgLTExOTksNiArMTIxNCwxOCBAQCB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LFxuIFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBvbGRfaW5mbyA9IGludHJlcS1cdTAwM2VpbmZvO1xuIFxuIFx0dHJhY2VfY2ZnODAyMTFfc2Nhbl9kb25lKGludHJlcSwgaW5mbyk7XG4rXG4rXHRpbnRyZXEtXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcbitcbitcdGlmIChpbnRyZXEtXHUwMDNlc3RhbGUpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHNjYW4gaXMgYWxyZWFkeSBjb21wbGV0ZWQgYXMgZmFyIGFzIHdlJ3JlIGNvbmNlcm5lZCxcbitcdFx0ICogaXQgd2FzIGp1c3Qga2VwdCBhcm91bmQgZm9yIHRoZSBkcml2ZXIgLSBkb25lIG5vdywgZnJlZSBpdC5cbitcdFx0ICovXG4rXHRcdGtmcmVlKGludHJlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2XG4gXHRcdGludHJlcSAhPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4gXG5AQCAtMjA1MCw2ICsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0aWYgKCFoaWRkZW4pXG4gXHRcdFx0XHRoaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsXG4gXHRcdFx0XHRcdFx0ICAgICBCU1NfQ01QX0hJREVfTlVMKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcbitcdFx0XHQgKiBiZWFjb24gZGF0YSBjYW4gbmV2ZXIgYmUgZmlsbGVkL3VwZGF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGhpZGRlbiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tXHUwMDNlcHViLmJlYWNvbl9pZXMpKVxuK1x0XHRcdFx0aGlkZGVuID0gTlVMTDtcbiBcdFx0XHRpZiAoaGlkZGVuKSB7XG4gXHRcdFx0XHRuZXctXHUwMDNlcHViLmhpZGRlbl9iZWFjb25fYnNzID0gXHUwMDI2aGlkZGVuLVx1MDAzZXB1YjtcbiBcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ldy1cdTAwM2VoaWRkZW5fbGlzdCxcbkBAIC0zNDY4LDExICszNTAyLDYgQEAgdm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRjYnNzLVx1MDAzZXB1Yi5jaGFubmVsID0gY2hhbjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLVx1MDAzZXB1Yi5jYXBhYmlsaXR5LFxuLVx0XHRcdFx0XHQgICAgIGJzcy1cdTAwM2VwdWIuY2hhbm5lbC1cdTAwM2ViYW5kLFxuLVx0XHRcdFx0XHQgICAgIHdkZXYtXHUwMDNlY29ubl9ic3NfdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChic3MgPT0gY2JzcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZjI0NjRkMmNlMGQ1YSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbisrKyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0xMDM5LDEyICsxMDM5LDMwIEBAIHVuc2lnbmVkIGludCBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4tXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcihza2IpKSBcdTAwMjYgMHhmYztcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0XHRzdHJ1Y3QgaXBoZHIgX2lwaDtcbitcbitcdFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuK1x0XHRcdFx0XHQgc2l6ZW9mKCppcGgpLCBcdTAwMjZfaXBoKTtcbitcdFx0aWYgKCFpcGgpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi1cdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSkgXHUwMDI2IDB4ZmM7XG4rXHR9XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0XHRzdHJ1Y3QgaXB2NmhkciBfaXA2aDtcbitcbitcdFx0aXA2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcbitcdFx0XHRcdFx0ICBzaXplb2YoKmlwNmgpLCBcdTAwMjZfaXA2aCk7XG4rXHRcdGlmICghaXA2aClcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcbiBcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcbiBcdFx0c3RydWN0IG1wbHNfbGFiZWwgbXBsc190bXAsICptcGxzO1xuQEAgLTEyMTcsOCArMTIzNSw3IEBAIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0XHRcdFx0XHRcdCFldi1cdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRVZFTlRfSUJTU19KT0lORUQ6XG4tXHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzaWQsXG4tXHRcdFx0XHRcdCAgICAgICBldi1cdTAwM2Vpai5jaGFubmVsKTtcbitcdFx0XHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXHUwMDNlbmV0ZGV2LCBldi1cdTAwM2Vpai5ic3MpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVWRU5UX1NUT1BQRUQ6XG4gXHRcdFx0LypcbkBAIC0yNDc3LDE2ICsyNDk0LDE1IEBAIHN0YXRpYyB2b2lkIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBuZXdfYmVhY29uX2ludCxcbiBcdFx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuK1x0XHRpZiAoIXdkZXZfYmkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi9cbiBcdFx0aWYgKHJhZGlvX2lkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi1cdTAwM2VuZXRkZXYpIFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuLVxuLVx0XHRpZiAoIXdkZXZfYmkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghKmJlYWNvbl9pbnRfZ2NkKSB7XG4gXHRcdFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjA2LjE1MzczMzgwMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDQxMjk0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBpbiBhZGRpdGlvbiB0byBvdXIgc3RhbmRhcmQgS0FTQU4gZWZmb3J0cy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGRpZmYuXG5cbkknbSBzZWVpbmcgYSBudW1iZXIgb2YgY2hhbmdlcywgYW5kIG15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyB0aGUgd2lyZWxlc3MgY29yZSBpcyBiZWluZyB0b3VjaGVkIGhlYXZpbHkuIFRoZSBtb3N0IGludGVyZXN0aW5nIGFyZWFzIGFyZSBsaWtlbHkgdGhvc2UgdGhhdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlc2UgYXNwZWN0czpcblxuMS4gICoqRGF0YSBTdHJ1Y3R1cmUgQ2hhbmdlczoqKiBUaGUgYWRkaXRpb24gb2YgYGRyaXZlcl9vd25zYCwgYHN0YWxlYCwgYHJlZ19jaGVja19jaGFuc193a2AsIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdmFyaW91cyBzdHJ1Y3RzIGlzIGludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGFyZSBpbml0aWFsaXplZCBhbmQgdXNlZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIGFyZSBwb3NzaWJsZS4gVGhlIGNoYW5nZXMgdG8gYGNmZzgwMjExX2V2ZW50YCBhbmQgYF9fY2ZnODAyMTFfaWJzc19qb2luZWRgIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgdGhlIGFsbG9jYXRpb24gb2YgYGJzc2AgYW5kIHRoZSByZWZlcmVuY2UgaGFuZGxpbmcuIEFueSB0aW1lIGEgYGJzc2AgaXMgbWFuaXB1bGF0ZWQsIEknbSBhbHJlYWR5IGNhdXRpb3VzLlxuXG4yLiAgKipXb3JrcXVldWUgSW50cm9kdWN0aW9uczoqKiBUaGUgaW50cm9kdWN0aW9uIG9mIHdvcmtxdWV1ZXMgKGByZWdfY2hlY2tfY2hhbnNfd2tgLCBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYCkgYWx3YXlzIGRlbWFuZHMgc2NydXRpbnkuIFdvcmtxdWV1ZXMgb2Z0ZW4gaW52b2x2ZSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhbmQgY2FuIGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIExvY2tpbmcgaW1wcm92ZW1lbnRzIGFyZSBnb29kLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhleSBhcmUgY29ycmVjdCBhbmQgcm9idXN0LlxuXG4zLiAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBJIG5lZWQgdG8gY2xvc2VseSBpbnZlc3RpZ2F0ZSBgY2ZnODAyMTFfcHV0X3NjYW5fcmVxYCAod2l0aCBgZHJpdmVyX293bnNgIGFuZCBgc3RhbGVgKSBhbmQgZW5zdXJlIHNjYW4gcmVxdWVzdHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LCBhdm9pZGluZyBtZW1vcnkgbGVha3Mgb3IgZG91YmxlLWZyZWVzLlxuXG40LiAgKipgc2tiX2hlYWRlcl9wb2ludGVyYCBVc2FnZToqKiBUaGUgdXNhZ2Ugb2YgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW4gYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgIGlzIGEgcHJpbWUgc3VzcGVjdC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBwYXJ0aWN1bGFybHkgc2luY2UgaXQgaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20gdGhlIFNLQi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzIHByb3Blcmx5IHNpemVkIGFuZCB0aGF0IHRoZSBjb3B5IGRvZXNuJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIFNLQiwgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLiBJIGtub3cgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgZGV0YWlscy4gSG93ZXZlciwgSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkIGFmdGVyIHRoZSBgc2tiX2hlYWRlcl9wb2ludGVyYCBjYWxsLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgbG9vayBhdCBsaW5lIDEwMzkgaW4gYG5ldC93aXJlbGVzcy91dGlsLmNgLiBUaGlzIGlzIG15IHByaW1hcnkgYXJlYSBvZiBjb25jZXJuIGJlY2F1c2UgaXQgaXMgdG91Y2hpbmcgbWVtb3J5LlxuXG41LiAqKldBUk5fT04gcmVtb3ZhbHM6KiogV2hpbGUgdGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgcmVtb3ZpbmcgYFdBUk5fT05gIHN0YXRlbWVudHMgaXMgYWxzbyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhdHRlbnRpb24uIFdBUk5fT04gc3RhdGVtZW50cyBhcmUgZ2VuZXJhbGx5IHRoZXJlIGZvciBhIHJlYXNvbiwgbmFtZWx5IHRvIHN0b3AgdGhpbmdzIGZyb20gcHJvY2VlZGluZyB0aGF0IHRoZSBkZXZlbG9wZXIgZGlkbid0IGV4cGVjdCB0byBoYXBwZW4uIFdpdGhvdXQgaXQsIHlvdSBhcmUgbW9yZSBsaWtlbHkgdG8gcnVuIGludG8gdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGVzZSBhcmVhcy4gSSB3aWxsIHNwZWNpZmljYWxseSBjaGVjayBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uLiBCYXNlZCBvbiBteSBmaW5kaW5ncyBmcm9tIHRoaXMgbW9yZSBpbi1kZXB0aCBhbmFseXNpcywgSSB3aWxsIG1ha2UgdGhlIGZpbmFsIGRlY2lzaW9uIGFib3V0IHNwaW5uaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToxMy4xOTUwMzE2ODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy91dGlsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzMDpcXHRcXHR9XFxuMTAzMTpcXHRcXG4xMDMyOlxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuMTAzMzpcXHRcXHRcXHR2bGFuX3ByaW9yaXR5ID0gKHNrYl92bGFuX3RhZ19nZXQoc2tiKSBcXHUwMDI2IFZMQU5fUFJJT19NQVNLKVxcbjEwMzQ6XFx0XFx0XFx0XFx0XFx1MDAzZVxcdTAwM2UgVkxBTl9QUklPX1NISUZUO1xcbjEwMzU6XFx0XFx0XFx0aWYgKHZsYW5fcHJpb3JpdHkgXFx1MDAzZSAwKSB7XFxuMTAzNjpcXHRcXHRcXHRcXHRyZXQgPSB2bGFuX3ByaW9yaXR5O1xcbjEwMzc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzODpcXHRcXHRcXHR9XFxuMTAzOTpcXHRcXHR9XFxuMTA0MDpcXHRcXG4xMDQxOlxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEwNDI6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcXG4xMDQzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xcbjEwNDQ6XFx0XFx0XFx0c3RydWN0IGlwaGRyIF9pcGg7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdFxcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcXG4xMDQ3OlxcdFxcdFxcdFxcdFxcdFxcdCBzaXplb2YoKmlwaCksIFxcdTAwMjZfaXBoKTtcXG4xMDQ4OlxcdFxcdFxcdGlmICghaXBoKVxcbjEwNDk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA1MDpcXHRcXG4xMDUxOlxcdFxcdFxcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgXFx1MDAyNiAweGZjO1xcbjEwNTI6XFx0XFx0XFx0YnJlYWs7XFxuMTA1MzpcXHRcXHR9XFxuMTA1NDpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XFxuMTA1NTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4xMDU2OlxcdFxcdFxcdHN0cnVjdCBpcHY2aGRyIF9pcDZoO1xcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHRcXHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxcbjEwNTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2YoKmlwNmgpLCBcXHUwMDI2X2lwNmgpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKCFpcDZoKVxcbjEwNjE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA2MjpcXHRcXG4xMDYzOlxcdFxcdFxcdGRzY3AgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpIFxcdTAwMjYgMHhmYztcXG4xMDY0OlxcdFxcdFxcdGJyZWFrO1xcbjEwNjU6XFx0XFx0fVxcbjEwNjY6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcXG4xMDY3OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcXG4xMDY4OlxcdFxcdFxcdHN0cnVjdCBtcGxzX2xhYmVsIG1wbHNfdG1wLCAqbXBscztcXG4xMDY5OlxcdFxcbjEwNzA6XFx0XFx0XFx0bXBscyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcXG4xMDcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKCptcGxzKSwgXFx1MDAyNm1wbHNfdG1wKTtcXG4xMDcyOlxcdFxcdFxcdGlmICghbXBscylcXG4xMDczOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjEwNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjEzLjE5NTI0NDk2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjEwMjU5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJlY2VudCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgcmVjZW50IGNvZGUgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIHJlZ2FyZGluZyBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAsIEkgbm90aWNlZCBhIGNoYW5nZSBpbiBob3cgdGhlIElQIGhlYWRlciBpcyBhY2Nlc3NlZC4gUHJldmlvdXNseSwgaXQgcmVsaWVkIG9uIGRpcmVjdCBhY2Nlc3MgdmlhIGBpcF9oZHIoc2tiKWAgYW5kIGBpcHY2X2hkcihza2IpYC4gTm93LCBpdCdzIGJlZW4gdXBkYXRlZCB0byB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW5zdGVhZC4gVGhlIHJhdGlvbmFsZSBzZWVtcyBzb3VuZCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXJgIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCBvciB0aGUgaGVhZGVyIGhhc24ndCBiZWVuIHB1bGxlZCB5ZXQuIFRoaXMgcmVwbGFjZW1lbnQgYWxpZ25zIHdpdGggdGhlIGFwcHJvYWNoIHVzZWQgaW4gdGhlIE1QTFMgc2NlbmFyaW8sIGVtcGxveWluZyBgc2tiX2hlYWRlcl9wb2ludGVyYCBmb3Igc2FmZSBjb3B5aW5nIG9yIHJlZmVyZW5jaW5nIG9mIGRhdGEgd2l0aGluIHRoZSBza2IsIHdpdGggbGVuZ3RoIHZhbGlkYXRpb24uIEdvb2QgY2F0Y2gsIG1pdGlnYXRpbmcgcG90ZW50aWFsIGNyYXNoZXMgZHVlIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzcy5cblxuTmV4dCwgSSdsbCBleGFtaW5lIHRoZSBJQlNTIGpvaW4gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGBjZmc4MDIxMV9pYnNzX2pvaW5lZGAgYW5kIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYC4gSW4gYGNmZzgwMjExX2lic3Nfam9pbmVkYCwgdGhlIHVzZSBvZiBga3phbGxvY19vYmpgIGVuc3VyZXMgYSB6ZXJvZWQgYWxsb2NhdGlvbiBmb3IgdGhlIGV2ZW50IHN0cnVjdHVyZS4gVGhpcyBpcyBmb2xsb3dlZCBieSBhc3NpZ25pbmcgdGhlIGV2ZW50IHR5cGUgYW5kIEJTUyBwb2ludGVyLiBUaGUgc3Vic2VxdWVudCBjYWxsIHRvIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYCBpbnZvbHZlcyBzZW5kaW5nIHRoZSBJQlNTIEJTU0lEIGFuZCBjb3B5aW5nIGl0IHRvIGEgYHdycXVgIHN0cnVjdHVyZS4gVGhlIEJTU0lELCBjcml0aWNhbCBoZXJlLCBpcyBzb3VyY2VkIGZyb20gdGhlIGBjZmc4MDIxMV9ic3NgIHN0cnVjdHVyZSwgd2hpY2ggaXMgcG9wdWxhdGVkIGR1cmluZyBCU1MgY3JlYXRpb24gb3IgZGlzY292ZXJ5LiBFdmVyeXRoaW5nIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBpbiB0ZXJtcyBvZiBkYXRhIGZsb3cuXG5cbkZpbmFsbHksIEknbGwgdHJhY2UgdGhlIHNjYW4gcmVxdWVzdCBsaWZlY3ljbGUuIFRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludGAgaXMgaW5pdGlhdGVkIGluIGBjZmc4MDIxMV9zY2FuYCBhbmQgYG5sODAyMTFfdHJpZ2dlcl9zY2FuYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIHRoZSBleGFjdCBhbGxvY2F0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBzY2FuIHJlcXVlc3Qgc3RydWN0dXJlIGlzIG1hbmFnZWQgdGhyb3VnaG91dCBpdHMgbGlmZXRpbWUsIGluY2x1ZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgc3RhdGVzLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjE3LjQwNTUwODAwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MDU0NjAyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzY2FuX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToxNy45MjM1NzA0NzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI3MTMzMjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBTY2FuIFJlcXVlc3QgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludGAgc3RydWN0dXJlcywgb3Igc3BlY2lmaWNhbGx5IHRoZSBgc2Nhbl9yZXFgIGluc3RhbmNlcywgYXJlIGJlaW5nIGFsbG9jYXRlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byB0aGUgYG5ldC93aXJlbGVzcy9zY2FuLmNgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYyBzdXJyb3VuZGluZyB3aXJlbGVzcyBzY2FubmluZywgc28gSSdsbCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCB3aXRoaW4gdGhhdCBmaWxlIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHMsIHN1Y2ggYXMgYGttYWxsb2NgLCBga3phbGxvY2AsIG9yIGFueSBjdXN0b20gYWxsb2NhdGlvbiBmdW5jdGlvbnMgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSBtaWdodCBlbXBsb3kuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ2llcyBvciBwb29scyBpbiBwbGFjZSBmb3IgdGhpcy4gRnJvbSB0aGVyZSwgSSdsbCB0cmFjZSBob3cgdGhlc2UgYHNjYW5fcmVxYCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgcG9wdWxhdGVkLCBhbmQgdWx0aW1hdGVseSByZWxlYXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToyMy4xOTQ5MDU1NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkyNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjYW5fcmVxLio9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuYz0yMjk9dm9pZCBjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDUtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNDY6XFx0aWYgKHJkZXYtXFx1MDAzZXNjYW5fcmVxIFxcdTAwMjZcXHUwMDI2IHJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2VyZXEud2RldiA9PSB3ZGV2KSB7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDctXFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0OC1cXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHwgIXJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQpKVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjQ5OlxcdFxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjUwLVxcdFxcdF9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE3MDk9c3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzYxLVxcdFxcdGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd2Rldi1cXHUwMDNlaWZ0eXBlLCAtMSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzYyOlxcdFxcdGlmIChyZGV2LVxcdTAwM2VzY2FuX3JlcSBcXHUwMDI2XFx1MDAyNiByZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTc2My1cXHRcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzY1LVxcdFxcdFxcdCAgICAgIXJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQpKVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTc2NjpcXHRcXHRcXHRcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NjctXFx0XFx0XFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTEyNzI9c3RhdGljIGludCBubDgwMjExX3RyaWdnZXJfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTUwMy1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjExNTA0OlxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gcmVxdWVzdDtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExNTA1LVxcdGVyciA9IGNmZzgwMjExX3NjYW4ocmRldik7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExNTE1LSBvdXRfZnJlZTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjExNTE2OlxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gTlVMTDtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExNTE3LVxcdGtmcmVlKHJlcXVlc3QpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMTk2NT1zdGF0aWMgaW50IG5sODAyMTFfc3RhcnRfc2NoZWRfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTk4Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjExOTgzOlxcdHNjaGVkX3NjYW5fcmVxID0gbmw4MDIxMV9wYXJzZV9zY2hlZF9zY2FuKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTg0LVxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlYXR0cnMsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTk0LVxcdGlmICh3YW50X211bHRpIFxcdTAwMjZcXHUwMDI2IHJkZXYtXFx1MDAzZXdpcGh5Lm1heF9zY2hlZF9zY2FuX3JlcXMgXFx1MDAzZSAxKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTE5OTU6XFx0XFx0c2NoZWRfc2Nhbl9yZXEtXFx1MDAzZXJlcWlkID0gY2ZnODAyMTFfYXNzaWduX2Nvb2tpZShyZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTk2LVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDAxOlxcdHNjaGVkX3NjYW5fcmVxLVxcdTAwM2VkZXYgPSBkZXY7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjAwMjpcXHRzY2hlZF9zY2FuX3JlcS1cXHUwMDNld2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMy1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMDA0LVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU09DS0VUX09XTkVSXSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDA1OlxcdFxcdHNjaGVkX3NjYW5fcmVxLVxcdTAwM2Vvd25lcl9ubHBvcnRpZCA9IGluZm8tXFx1MDAzZXNuZF9wb3J0aWQ7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwNi1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjA2ODc9c3RhdGljIGludCBubDgwMjExX2FkZF9zY2FuX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY4OS17XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDY5MDpcXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxID0gcmRldi1cXHUwMDNlc2Nhbl9yZXE7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY5MS1cXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzEyNz1zdGF0aWMgaW50IG5sODAyMTFfbmV0bGlua19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTQ2LVxcdFxcdFxcdFxcdFxcdGxpc3QpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMTQ3OlxcdFxcdFxcdGlmIChzY2hlZF9zY2FuX3JlcS1cXHUwMDNlb3duZXJfbmxwb3J0aWQgPT0gbm90aWZ5LVxcdTAwM2Vwb3J0aWQpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMTQ4OlxcdFxcdFxcdFxcdHNjaGVkX3NjYW5fcmVxLVxcdTAwM2VubF9vd25lcl9kZWFkID0gdHJ1ZTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTQ5LVxcdFxcdFxcdFxcdHdpcGh5X3dvcmtfcXVldWUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz04NDQ9c3RhdGljIGludCBjZmc4MDIxMV9zY2FuXzZnaHooc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy04NDktXFx0aW50IG5fY2hhbm5lbHMsIGNvdW50ID0gMCwgZXJyO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6ODUwOlxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpyZXF1ZXN0LCAqcmRldl9yZXEgPSByZGV2LVxcdTAwM2VzY2FuX3JlcTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg1MS1cXHRMSVNUX0hFQUQoY29sb2NfYXBfbGlzdCk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNDUtXFx0aWYgKHJlcXVlc3QtXFx1MDAzZXJlcS5uX2NoYW5uZWxzKSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMDQ2OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpvbGQgPSByZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXE7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDQ3LVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA0ODpcXHRcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSByZXF1ZXN0O1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA0OS1cXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA1NC1cXHRcXHRpZiAoIWZpcnN0X3BhcnQgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT04oIW9sZCkpXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMDU1OlxcdFxcdFxcdHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlaW5mbyA9IG9sZC1cXHUwMDNlaW5mbztcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNTYtXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNTgtXFx0XFx0aWYgKGVycikge1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA1OTpcXHRcXHRcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSBvbGQ7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDYwLVxcdFxcdFxcdGtmcmVlKHJlcXVlc3QpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMDcyPWludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA3NC1cXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxdWVzdDtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEwNzU6XFx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKnJkZXZfcmVxID0gcmRldi1cXHUwMDNlc2Nhbl9yZXE7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDc2LVxcdHUzMiBuX2NoYW5uZWxzID0gMCwgaWR4LCBpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTEyLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTExMzpcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSByZXF1ZXN0O1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTExNC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM9MTEzMj12b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExOTEtXFx0Y2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcSk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTkyOlxcdHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcSA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTkzLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE5NC1cXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cXHUwMDNlc2Nhbl9yZXEpO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTE5NTpcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcSA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTk2LVxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMjA4PXZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTAte1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTIxMTpcXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqaW50cmVxID1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTItXFx0XFx0Y29udGFpbmVyX29mKHJlcXVlc3QsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50LCByZXEpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMzk2PWludCBfX2NmZzgwMjExX3N0b3Bfc2NoZWRfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTE0MDItXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxNDAzOlxcdHNjaGVkX3NjYW5fcmVxID0gY2ZnODAyMTFfZmluZF9zY2hlZF9zY2FuX3JlcShyZGV2LCByZXFpZCk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xNDA0LVxcdGlmICghc2NoZWRfc2Nhbl9yZXEpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM1NjY9aW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTcxLVxcdHN0cnVjdCB3aXBoeSAqd2lwaHk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNTcyOlxcdHN0cnVjdCBpd19zY2FuX3JlcSAqd3JlcSA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTczLVxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpjcmVxO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNjk0LVxcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNjk1OlxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gY3JlcTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM2OTYtXFx0XFx0ZXJyID0gcmRldl9zY2FuKHJkZXYsIGNyZXEpO1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzY5Ny1cXHRcXHRpZiAoZXJyKSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNjk4OlxcdFxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gTlVMTDtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM2OTktXFx0XFx0XFx0LyogY3JlcSB3aWxsIGJlIGZyZWVkIGJlbG93ICovXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9NjQ9c3RhdGljIGludCBjZmc4MDIxMV9jb25uX3NjYW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzEtXFxubmV0L3dpcmVsZXNzL3NtZS5jOjEzMjpcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcSA9IHJlcXVlc3Q7XFxubmV0L3dpcmVsZXNzL3NtZS5jLTEzMy1cXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzktXFx0fSBlbHNlIHtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTQwOlxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gTlVMTDtcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTQxLVxcdFxcdGtmcmVlKHJlcXVlc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToyMy4yNDUxMDE1MjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MzkzNzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgU2NhbiBSZXF1ZXN0IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc2NhbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiB0cmlnZ2VyZWQgdmlhIGBubDgwMjExX3RyaWdnZXJfc2NhbmAgb3IgZGlyZWN0bHkgdGhyb3VnaCBgY2ZnODAyMTFfc2NhbmAuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uLlxuXG5JJ2xsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmw4MDIxMS5jYCwgYW5kIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDExMzAwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBraW5kcyBvZiBhbGxvY2F0aW9ucyBoYXBwZW4sIHNvIGhvcGVmdWxseSwgdGhlIGNyZWF0aW9uIG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmlnaHQgdGhlcmUgaW4gZnJvbnQgb2YgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyB0aGUgc2NhbiBpbml0aWF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mzk5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTE6MjUuMzM5MDQwOTUxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzMDA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExMzAxOlxcdFxcdFxcdHNjYW5fZnJlcXMgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRX0tIWl07XFxuMTEzMDI6XFx0XFx0XFx0c2Nhbl9mcmVxc19raHogPSB0cnVlO1xcbjExMzAzOlxcdFxcdH0gZWxzZSBpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKVxcbjExMzA0OlxcdFxcdFxcdHNjYW5fZnJlcXMgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU107XFxuMTEzMDU6XFx0XFxuMTEzMDY6XFx0XFx0aWYgKHNjYW5fZnJlcXMpIHtcXG4xMTMwNzpcXHRcXHRcXHRuX2NoYW5uZWxzID0gdmFsaWRhdGVfc2Nhbl9mcmVxcyhzY2FuX2ZyZXFzKTtcXG4xMTMwODpcXHRcXHRcXHRpZiAoIW5fY2hhbm5lbHMpXFxuMTEzMDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTEzMTA6XFx0XFx0fSBlbHNlIHtcXG4xMTMxMTpcXHRcXHRcXHRuX2NoYW5uZWxzID0gaWVlZTgwMjExX2dldF9udW1fc3VwcG9ydGVkX2NoYW5uZWxzKHdpcGh5KTtcXG4xMTMxMjpcXHRcXHR9XFxuMTEzMTM6XFx0XFxuMTEzMTQ6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSlcXG4xMTMxNTpcXHRcXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwgdG1wKVxcbjExMzE2OlxcdFxcdFxcdFxcdG5fc3NpZHMrKztcXG4xMTMxNzpcXHRcXG4xMTMxODpcXHRcXHRpZiAobl9zc2lkcyBcXHUwMDNlIHdpcGh5LVxcdTAwM2VtYXhfc2Nhbl9zc2lkcylcXG4xMTMxOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTMyMDpcXHRcXG4xMTMyMTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSlcXG4xMTMyMjpcXHRcXHRcXHRpZV9sZW4gPSBubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9JRV0pO1xcbjExMzIzOlxcdFxcdGVsc2VcXG4xMTMyNDpcXHRcXHRcXHRpZV9sZW4gPSAwO1xcbjExMzI1OlxcdFxcbjExMzI2OlxcdFxcdGlmIChpZV9sZW4gXFx1MDAzZSB3aXBoeS1cXHUwMDNlbWF4X3NjYW5faWVfbGVuKVxcbjExMzI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExMzI4OlxcdFxcbjExMzI5OlxcdFxcdHNpemUgPSBzdHJ1Y3Rfc2l6ZShyZXF1ZXN0LCByZXEuY2hhbm5lbHMsIG5fY2hhbm5lbHMpO1xcbjExMzMwOlxcdFxcdHNzaWRzX29mZnNldCA9IHNpemU7XFxuMTEzMzE6XFx0XFx0c2l6ZSA9IHNpemVfYWRkKHNpemUsIGFycmF5X3NpemUoc2l6ZW9mKCpyZXF1ZXN0LVxcdTAwM2VyZXEuc3NpZHMpLCBuX3NzaWRzKSk7XFxuMTEzMzI6XFx0XFx0aWVfb2Zmc2V0ID0gc2l6ZTtcXG4xMTMzMzpcXHRcXHRzaXplID0gc2l6ZV9hZGQoc2l6ZSwgaWVfbGVuKTtcXG4xMTMzNDpcXHRcXHRyZXF1ZXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4xMTMzNTpcXHRcXHRpZiAoIXJlcXVlc3QpXFxuMTEzMzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTEzMzc6XFx0XFxuMTEzMzg6XFx0XFx0aWYgKG5fc3NpZHMpXFxuMTEzMzk6XFx0XFx0XFx0cmVxdWVzdC1cXHUwMDNlcmVxLnNzaWRzID0gKHZvaWQgKilyZXF1ZXN0ICsgc3NpZHNfb2Zmc2V0O1xcbjExMzQwOlxcdFxcdHJlcXVlc3QtXFx1MDAzZXJlcS5uX3NzaWRzID0gbl9zc2lkcztcXG4xMTM0MTpcXHRcXHRpZiAoaWVfbGVuKVxcbjExMzQyOlxcdFxcdFxcdHJlcXVlc3QtXFx1MDAzZXJlcS5pZSA9ICh2b2lkICopcmVxdWVzdCArIGllX29mZnNldDtcXG4xMTM0MzpcXHRcXG4xMTM0NDpcXHRcXHRpID0gMDtcXG4xMTM0NTpcXHRcXHRpZiAoc2Nhbl9mcmVxcykge1xcbjExMzQ2OlxcdFxcdFxcdC8qIHVzZXIgc3BlY2lmaWVkLCBiYWlsIG91dCBpZiBjaGFubmVsIG5vdCBmb3VuZCAqL1xcbjExMzQ3OlxcdFxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgc2Nhbl9mcmVxcywgdG1wKSB7XFxuMTEzNDg6XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuO1xcbjExMzQ5OlxcdFxcdFxcdFxcdGludCBmcmVxID0gbmxhX2dldF91MzIoYXR0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjI1LjM0MDYzNDEyMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTkzMzMzMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIElkZW50aWZpZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoZSBjb3JlIGZvY3VzIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIG9uIGhhcmRlbmluZyB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IHNhZmV0eSwgYW5kIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLCBkZXNwaXRlIHRoaXMgYmVpbmcgYSBrZXJuZWwgY29kZSByZXZpZXcgYW5kIG5vdCBhIGZ1enppbmcgZXhlcmNpc2UuXG5cbkZpcnN0LCBJIG5vdGUgdGhlIHVzZSBvZiBga3phbGxvY2AgZm9yIHRoZSBgcmVxdWVzdGAgc3RydWN0dXJlLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgYGRyaXZlcl9vd25zYCBhbmQgYHN0YWxlYCB0byBmYWxzZSAoMCksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5zdXJpbmcgYSBrbm93biBzdGF0ZS4gVGhlbiwgSSBleGFtaW5lZCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc2l0aW9uIGZyb20gYGlqYCB0byBgYnNzYCBpbiBgY2ZnODAyMTFfaWJzc19qb2luZWRgLiBUaGUgYGt6YWxsb2NgIGFsbG9jYXRpb24gYW5kIHN1YnNlcXVlbnQgYXNzaWdubWVudCAoYGV2LVx1MDAzZWlqLmJzcyA9IGJzcztgKSBzaG91bGQsIGluIHByaW5jaXBsZSwgcHJldmVudCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZSBzdWJzZXF1ZW50IHVzYWdlIGluIGBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzYCBzZWVtcyBzYWZlIGdpdmVuIHRoaXMgaW5pdGlhbGl6YXRpb24uXG5cbkkgdGhlbiBsb29rZWQgYXQgdGhlIHdvcmtxdWV1ZSBjaGFuZ2VzIGluIGByZWcuY2AgYW5kIHRoZWlyIHJlbGF0aW9uIHRvIGBjZmc4MDIxMV9sZWF2ZWAgY2FsbHMuIFRoZSB1c2Ugb2YgYHdpcGh5X3dvcmtfaW5pdGAgYW5kIGBJTklUX1dPUktgIGNvdXBsZWQgd2l0aCB0aGUgY2hlY2tzIHdpdGhpbiBgcmVnX3dkZXZfY2hhbl92YWxpZGAgc3VnZ2VzdHMgdGhlIGludGVudGlvbiBpcyB0byBhdm9pZCBsb2NraW5nIGludmVyc2lvbnMuIFRoZSBjb21tZW50cyBhYm91dCBMT0NLREVQIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHJlaW5mb3JjZSB0aGlzLiBJIHNlZSB0aGlzIGFzIGEgc3RhbmRhcmQgYXBwcm9hY2ggdG8gYXZvaWQgZGVhZGxvY2tzOyB0aGlzIGlzIG1vcmUgYW4gaXNzdWUgZm9yIExPQ0tERVAgYW5kIGxlc3MgYSBLTVNBTiBjb25jZXJuLlxuXG5UaGUgcmVtb3ZhbCBvZiB0aGUgYFdBUk5fT04oLi4uKWAgd3JhcHBlciBpbiBgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlYCBhbmQgYGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsYCBpcyBtb3N0bHkgYSBjb3NtZXRpYyBjaGFuZ2UsIGJ1dCBJIHN0aWxsIHRha2UgdGhlIHRpbWUgdG8gY29uc2lkZXIgdGhlIGNvbmRpdGlvbiB3aXRoaW4uXG5cblRoZSBzY2FuIHJlcXVlc3QgcmVmZXJlbmNlIG1hbmFnZW1lbnQgaW4gYHNjYW4uY2AgYW5kIGByZGV2LW9wcy5oYCBpcyBwcm9taXNpbmcsIGFzIHRoZXkgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUuXG5cblRoZSBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAgY2hhbmdlIHVzaW5nIGBza2JfaGVhZGVyX3BvaW50ZXJgIGlzIGEgZ29vZCBwcmFjdGljZS4gVXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgdG8gaGFuZGxlIHBhY2tldCBkYXRhIHJlZHVjZXMgdGhlIHJpc2sgb2Ygb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgZGF0YSBsZWFrcywgd2hpY2ggYXJlIHByaW1hcmlseSBoYW5kbGVkIGJ5IEtBU0FOLlxuXG5GaW5hbGx5LCB0aGUgQlNTIGhhbmRsaW5nIGNoYW5nZXMgKGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWApIGFwcGVhciB0byBiZSBtaW5vciByZWZpbmVtZW50cyByZWdhcmRpbmcgZGF0YSBhY2Nlc3MgYW5kIHJlZHVuZGFudCBjaGVja3MuIGByY3VfYWNjZXNzX3BvaW50ZXJgIGlzIHByb3Blcmx5IHVzZWQsIGFkZHJlc3NpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuXG5cbk5vdywgdG8gZXhwbGljaXRseSBhZGRyZXNzIHRoZSBLTVNBTiBxdWVzdGlvbnM6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBObywgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGluZm8tbGVha3MuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBga3phbGxvY2AgaXMgdXNlZCBhbmQgbG9jYWwgdmFyaWFibGVzIGFyZSB3ZWxsIGhhbmRsZWQuXG5cbjMuICAqKkFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHByZXNlbnQuXG5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObywgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaXMgdXNlZCBjb3JyZWN0bHkgYW5kIGRlZmVuc2l2ZWx5LlxuXG5HaXZlbiB0aGlzIHRob3JvdWdoIHJldmlldywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBBbGwgaWRlbnRpZmllZCBpc3N1ZXMgcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgYm91bmRhcnkgY2hlY2tzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGFyZSBwcmVzZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEknbGwgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGFzIGFsd2F5cywgdG8gYmUgY2VydGFpbiwgYW5kIHRoZW4gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjMzLCJPdXRwdXRUb2tlbnMiOjI5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjMzLjkzMzk3MDM0NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgcGFja2V0IHBhcnNpbmcgYWNyb3NzIGNmZzgwMjExOlxcbjEuIFNjYW4gcmVxdWVzdCB0cmFja2luZyAoZHJpdmVyX293bnMvc3RhbGUpOiBGaXhlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGZyZWVzIG9mIHNjYW4gcmVxdWVzdHMgYWNyb3NzIGRyaXZlciBjYW5jZWxsYXRpb24gcGF0aHMuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBzY2FuIHJlcXVlc3Qgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYywgc28gYWxsIG5ldyBzdHJ1Y3QgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxcbjMuIElCU1MgZXZlbnQgaGFuZGxpbmc6IFBhc3NlcyBCU1MgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBldmVudCBwcm9jZXNzaW5nIHJhdGhlciB0aGFuIHJlLWxvb2tpbmcgdGhlbSB1cDsgYWxsIGV2ZW50IHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB2aWEga3phbGxvY19vYmogYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpcyBwcm9wZXJseSBtYW5hZ2VkLlxcbjQuIFBhY2tldCBjbGFzc2lmaWNhdGlvbiAoc2tiX2hlYWRlcl9wb2ludGVyKTogRml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gbm9uLWxpbmVhciBza2JzIGJ5IHNhZmVseSBjaGVja2luZyBoZWFkZXIgbGVuZ3RocyB3aXRoIHNrYl9oZWFkZXJfcG9pbnRlci4gQW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJlYWRzIGFyZSBjYXVnaHQgYnkgS0FTQU4uXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgS0FTQU4gYW5kIExPQ0tERVAgZnVsbHkgY292ZXIgdGhlIHJpc2tzIGluIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgcGFja2V0IHBhcnNpbmcgYWNyb3NzIGNmZzgwMjExOlxcbjEuIFNjYW4gcmVxdWVzdCB0cmFja2luZyAoZHJpdmVyX293bnMvc3RhbGUpOiBGaXhlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGZyZWVzIG9mIHNjYW4gcmVxdWVzdHMgYWNyb3NzIGRyaXZlciBjYW5jZWxsYXRpb24gcGF0aHMuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBzY2FuIHJlcXVlc3Qgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYywgc28gYWxsIG5ldyBzdHJ1Y3QgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxcbjMuIElCU1MgZXZlbnQgaGFuZGxpbmc6IFBhc3NlcyBCU1MgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBldmVudCBwcm9jZXNzaW5nIHJhdGhlciB0aGFuIHJlLWxvb2tpbmcgdGhlbSB1cDsgYWxsIGV2ZW50IHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB2aWEga3phbGxvY19vYmogYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpcyBwcm9wZXJseSBtYW5hZ2VkLlxcbjQuIFBhY2tldCBjbGFzc2lmaWNhdGlvbiAoc2tiX2hlYWRlcl9wb2ludGVyKTogRml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gbm9uLWxpbmVhciBza2JzIGJ5IHNhZmVseSBjaGVja2luZyBoZWFkZXIgbGVuZ3RocyB3aXRoIHNrYl9oZWFkZXJfcG9pbnRlci4gQW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJlYWRzIGFyZSBjYXVnaHQgYnkgS0FTQU4uXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgS0FTQU4gYW5kIExPQ0tERVAgZnVsbHkgY292ZXIgdGhlIHJpc2tzIGluIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 01:01:14 +0000 UTC FinishedAt: 2026-09-06 01:51:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "e97621ac-6a13-46a9-892b-ef17934a0d3a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg80211_scan_done", "___cfg80211_scan_done", "reg_leave_invalid_chans_wk", "reg_leave_invalid_nan_wk", "reg_check_chans_work", "cfg80211_ibss_joined", "__cfg80211_ibss_joined", "cfg80211_classify8021d", "__cfg80211_bss_update", "cfg80211_update_assoc_bss_entry", "cfg80211_stop_p2p_device", "cfg80211_process_wdev_events" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxMV9zY2FuX2RvbmUmIzM0OywKICAgICYjMzQ7X19fY2ZnODAyMTFfc2Nhbl9kb25lJiMzNDssCiAgICAmIzM0O3JlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drJiMzNDssCiAgICAmIzM0O3JlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayYjMzQ7LAogICAgJiMzNDtyZWdfY2hlY2tfY2hhbnNfd29yayYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9pYnNzX2pvaW5lZCYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX2lic3Nfam9pbmVkJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX2NsYXNzaWZ5ODAyMWQmIzM0OywKICAgICYjMzQ7X19jZmc4MDIxMV9ic3NfdXBkYXRlJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBwYWNrZXQgcGFyc2luZyBhY3Jvc3MgY2ZnODAyMTE6XG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxuMy4gSUJTUyBldmVudCBoYW5kbGluZzogUGFzc2VzIEJTUyByZWZlcmVuY2VzIGRpcmVjdGx5IHRvIGV2ZW50IHByb2Nlc3NpbmcgcmF0aGVyIHRoYW4gcmUtbG9va2luZyB0aGVtIHVwOyBhbGwgZXZlbnQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHByb3Blcmx5IG1hbmFnZWQuXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmM2NzE1ZTAxZWQwNzFiYjE2NDQxMTkzYjRjZDc1YzU0N2JkMmI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDE6NTA6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMjQ0LDkgJiM0MzsyNDQsOCBAQCB2b2lkIGNmZzgwMjExX3N0b3BfcDJwX2RldmljZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRyZGV2LVx1MDAzZW9wZW5jb3VudC0tO1xuIFxuIFx0aWYgKHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xuLVx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fFxuLVx0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSkpXG4mIzQzO1x0XHRpZiAoIXJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcbiBcdH1cbkBAIC02NDYsNiAmIzQzOzY0NSw4IEBAIHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlZGVzdHJveV93b3JrLCBjZmc4MDIxMV9kZXN0cm95X2lmYWNlX3drKTtcbiBcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZyZGV2LVx1MDAzZXNjaGVkX3NjYW5fc3RvcF93aywgY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wX3drKTtcbiBcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXNjaGVkX3NjYW5fcmVzX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHNfd2spO1xuJiM0MztcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZyZGV2LVx1MDAzZXJlZ19jaGVja19jaGFuc193aywgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2spO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxuIFx0XHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spO1xuQEAgLTEzNDUsNiAmIzQzOzEzNDYsNyBAQCB2b2lkIHdpcGh5X3VucmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZyZGV2LVx1MDAzZWRmc191cGRhdGVfY2hhbm5lbHNfd2spO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJkZXYtXHUwMDNlYmFja2dyb3VuZF9jYWNfZG9uZV93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlZGVzdHJveV93b3JrKTtcbiYjNDM7XHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlcmVnX2xlYXZlX25hbl93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VtZ210X3JlZ2lzdHJhdGlvbnNfdXBkYXRlX3drKTtcbkBAIC0xNzU4LDkgJiM0MzsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuIFx0XHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXNjYW5fcmVxIFx1MDAyNlx1MDAyNiByZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0XHQgICAgICFyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2Vub3RpZmllZCkpKVxuJiM0MztcdFx0XHRpZiAoIXJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4mIzQzO1x0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSlcbiBcdFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0XHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtMjQsNiAmIzQzOzI0LDE2IEBAXG4gc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQge1xuIFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvO1xuIFx0Ym9vbCBub3RpZmllZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuXG4mIzQzO1x0ICogcmRldl9zY2FuKCkgYW5kIGNmZzgwMjExX3NjYW5fZG9uZSgpXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBkcml2ZXJfb3ducztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNldCB3aGVuIGNmZzgwMjExIGlzIGRvbmUgd2l0aCB0aGUgcmVxdWVzdCBidXQgdGhlIGRyaXZlciBzdGlsbFxuJiM0MztcdCAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0XG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBzdGFsZTtcbiBcdC8qIG11c3QgYmUgbGFzdCAtIHZhcmlhYmxlIG1lbWJlcnMgKi9cbiBcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgcmVxO1xuIH07XG5AQCAtMTA0LDYgJiM0MzsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yaztcbiBcdHN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93aztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcbiYjNDM7XHRzdHJ1Y3Qgd2lwaHlfd29yayByZWdfY2hlY2tfY2hhbnNfd2s7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlZ19sZWF2ZV9uYW5fd2s7XG4gXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcmFkYXJfY2hhbmRlZjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drO1xuQEAgLTI4MCw4ICYjNDM7MjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHtcbiBcdFx0XHRib29sIGxvY2FsbHlfZ2VuZXJhdGVkO1xuIFx0XHR9IGRjO1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7XG4mIzQzO1x0XHRcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcztcbiBcdFx0fSBpajtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHR1OCBwZWVyX2FkZHJbRVRIX0FMRU5dO1xuQEAgLTM0NCw4ICYjNDM7MzU1LDcgQEAgaW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xuIGludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7XG4tdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi1cdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTtcbiYjNDM7dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7XG4gaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5AQCAtMTYsMjYgJiM0MzsxNiwxOCBAQFxuICNpbmNsdWRlIFwmIzM0O3JkZXYtb3BzLmhcJiMzNDtcbiBcbiBcbi12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXG4mIzQzO3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpXG4ge1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xuICNlbmRpZlxuIFxuIFx0aWYgKFdBUk5fT04od2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAoIXdkZXYtXHUwMDNldS5pYnNzLnNzaWRfbGVuKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGNoYW5uZWwsIGJzc2lkLCBOVUxMLCAwLFxuLVx0XHRcdCAgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfSUJTUywgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbi1cbi1cdGlmIChXQVJOX09OKCFic3MpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpIHtcbiBcdFx0Y2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XG5AQCAtNDMsMTcgJiM0MzszNSwyMiBAQCB2b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuIFx0fVxuIFxuIFx0Y2ZnODAyMTFfaG9sZF9ic3MoYnNzX2Zyb21fcHViKGJzcykpO1xuJiM0MztcdC8qIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgZXZlbnQgaXMgdHJhbnNmZXJyZWQgdG8gY3VycmVudF9ic3MgKi9cbiBcdHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzID0gYnNzX2Zyb21fcHViKGJzcyk7XG4gXG4gXHRjZmc4MDIxMV91cGxvYWRfY29ubmVjdF9rZXlzKHdkZXYpO1xuIFxuLVx0bmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LVx1MDAzZXdpcGh5KSwgZGV2LCBic3NpZCxcbiYjNDM7XHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cdTAwM2Vic3NpZCxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7XG4mIzQzO1x0bWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3MtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiBcdHdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsIFx1MDAyNndycXUsIE5VTEwpO1xuICNlbmRpZlxuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO3B1dF9ic3M6XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBic3MpO1xuIH1cbiBcbiB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbkBAIC02Miw2ICYjNDM7NTksNyBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2O1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHR0cmFjZV9jZmc4MDIxMV9pYnNzX2pvaW5lZChkZXYsIGJzc2lkLCBjaGFubmVsKTtcbkBAIC02OSwxMyAmIzQzOzY3LDE5IEBAIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuIFx0aWYgKFdBUk5fT04oIWNoYW5uZWwpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuJiM0MztcdGlmIChXQVJOX09OKCFic3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGV2ID0ga3phbGxvY19vYmooKmV2LCBnZnApO1xuLVx0aWYgKCFldilcbiYjNDM7XHRpZiAoIWV2KSB7XG4mIzQzO1x0XHRjZmc4MDIxMV9wdXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGJzcyk7XG4gXHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRldi1cdTAwM2V0eXBlID0gRVZFTlRfSUJTU19KT0lORUQ7XG4tXHRtZW1jcHkoZXYtXHUwMDNlaWouYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7XG4tXHRldi1cdTAwM2Vpai5jaGFubmVsID0gY2hhbm5lbDtcbiYjNDM7XHRldi1cdTAwM2Vpai5ic3MgPSBic3M7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ3ZGV2LVx1MDAzZWV2ZW50X2xvY2ssIGZsYWdzKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXYtXHUwMDNlbGlzdCwgXHUwMDI2d2Rldi1cdTAwM2VldmVudF9saXN0KTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5pbmRleCA0Njg0OWZlOGQwYjM5Li5hZGNmZDAyNzhkYTMyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5AQCAtNDY0LDcgJiM0Mzs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0cmFjZV9yZGV2X3NjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmVxdWVzdCk7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IHRydWU7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VzY2FuKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIFx1MDAyNnJlcXVlc3QtXHUwMDNlcmVxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IGZhbHNlO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLjExNjY1ZTBhN2VmYzggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTIzNDUsNyAmIzQzOzIzNDUsNyBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRpZnR5cGUgPSB3ZGV2LVx1MDAzZWlmdHlwZTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZSAqL1xuLVx0aWYgKCF3ZGV2LVx1MDAzZW5ldGRldiB8fCAhbmV0aWZfcnVubmluZyh3ZGV2LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogTkFOIGRvZXNuJiMzOTt0IGhhdmUgbGlua3MsIGhhbmRsZSBpdCBzZXBhcmF0ZWx5ICovXG5AQCAtMjQ0NiwxOSAmIzQzOzI0NDYsNTIgQEAgc3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4mIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuJiM0MztcbiYjNDM7XHRyZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSxcbiYjNDM7XHRcdFx0ICAgIHJlZ19sZWF2ZV9uYW5fd2spO1xuJiM0MztcbiYjNDM7XHQvKiBzdG9wcGluZyBOQU4gY2xvc2VzIGl0cyBkYXRhIGludGVyZmFjZXMsIHdoaWNoIG5lZWRzIHRoZSBSVE5MICovXG4mIzQzO1x0cnRubF9sb2NrKCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdGJvb2wgdmFsaWQ7XG4gXG4tXHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXG4tXHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTtcbiYjNDM7XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeSlcbiYjNDM7XHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYpO1xuIFx0XHRpZiAoIXZhbGlkKVxuIFx0XHRcdGNmZzgwMjExX2xlYXZlKHJkZXYsIHdkZXYsIC0xKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuJiM0MztcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2lwaHktXHUwMDNlbXR4KTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGVhcmluZyBkb3duIE5BTiBuZWVkcyB0aGUgUlROTCBmb3IgY2xvc2luZyBOQU5fREFUQVxuJiM0MztcdFx0ICogaW50ZXJmYWNlcywgaGFuZGxlIHRoYXQgc2VwYXJhdGVseS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX05BTilcbiYjNDM7XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjZmc4MDIxMV9sZWF2ZV9sb2NrZWQocmRldiwgd2RldiwgLTEpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuQEAgLTI0NjYsMTIgJiM0MzsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxuXCYjMzQ7KTtcbi1cdHJ0bmxfbG9jaygpO1xuIFxuLVx0Zm9yX2VhY2hfcmRldihyZGV2KVxuLVx0XHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRydG5sX3VubG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdClcbiYjNDM7XHRcdHdpcGh5X3dvcmtfcXVldWUoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgXHUwMDI2cmRldi1cdTAwM2VyZWdfY2hlY2tfY2hhbnNfd2spO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmggYi9uZXQvd2lyZWxlc3MvcmVnLmhcbmluZGV4IGZjMzFjNWY5YTYxYWIuLmM1ODcwNzllYWQ4ZmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuaFxuQEAgLTE3OCw2ICYjNDM7MTc4LDIyIEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpO1xuICAqL1xuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2sgLSBjaGVjayBpZiBjaGFubmVscyBhcmUgbm8gbG9uZ2VyIHVzYWJsZSBhbmQgbGVhdmVcbiYjNDM7ICogQHdpcGh5OiB0aGUgd2lwaHkgdG8gY2hlY2tcbiYjNDM7ICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxuJiM0MzsgKi9cbiYjNDM7dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZVxuJiM0MzsgKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFN0b3BwaW5nIGEgTkFOIGludGVyZmFjZSBuZWVkcyB0aGUgUlROTCwgc28gaXQgY2Fubm90IGJlIGRvbmUgZnJvbVxuJiM0MzsgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4mIzQzO1xuIGV4dGVybiBjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW107XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcbiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xMTE0LDYgJiM0MzsxMTE0LDIxIEBAIGludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxuJiM0MzsgKiBlLmcuIG1hYzgwMjExIG1heSBjYW5jZWwgaXQgYXN5bmNocm9ub3VzbHkgYW5kIHN0aWxsIHVzZSBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyZXEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChyZXEtXHUwMDNlZHJpdmVyX293bnMpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc3RhbGUgPSB0cnVlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtmcmVlKHJlcSk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgIGJvb2wgc2VuZF9tZXNzYWdlKVxuIHtcbkBAIC0xMTczLDEwICYjNDM7MTE4OCwxMCBAQCB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXG4gXHRkZXZfcHV0KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcbi1cdGtmcmVlKHJkZXYtXHUwMDNlaW50X3NjYW5fcmVxKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xuIFxuLVx0a2ZyZWUocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtXHUwMDNlc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VzY2FuX3JlcSA9IE5VTEw7XG4gXG4gXHRpZiAoIXNlbmRfbWVzc2FnZSlcbkBAIC0xMTk5LDYgJiM0MzsxMjE0LDE4IEBAIHZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIG9sZF9pbmZvID0gaW50cmVxLVx1MDAzZWluZm87XG4gXG4gXHR0cmFjZV9jZmc4MDIxMV9zY2FuX2RvbmUoaW50cmVxLCBpbmZvKTtcbiYjNDM7XG4mIzQzO1x0aW50cmVxLVx1MDAzZWRyaXZlcl9vd25zID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRyZXEtXHUwMDNlc3RhbGUpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgc2NhbiBpcyBhbHJlYWR5IGNvbXBsZXRlZCBhcyBmYXIgYXMgd2UmIzM5O3JlIGNvbmNlcm5lZCxcbiYjNDM7XHRcdCAqIGl0IHdhcyBqdXN0IGtlcHQgYXJvdW5kIGZvciB0aGUgZHJpdmVyIC0gZG9uZSBub3csIGZyZWUgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGtmcmVlKGludHJlcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2XG4gXHRcdGludHJlcSAhPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4gXG5AQCAtMjA1MCw2ICYjNDM7MjA3NywxMyBAQCBfX2NmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdGlmICghaGlkZGVuKVxuIFx0XHRcdFx0aGlkZGVuID0gcmJfZmluZF9ic3MocmRldiwgdG1wLFxuIFx0XHRcdFx0XHRcdCAgICAgQlNTX0NNUF9ISURFX05VTCk7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcbiYjNDM7XHRcdFx0ICogYmVhY29uIGRhdGEgY2FuIG5ldmVyIGJlIGZpbGxlZC91cGRhdGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGhpZGRlbiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFyY3VfYWNjZXNzX3BvaW50ZXIoaGlkZGVuLVx1MDAzZXB1Yi5iZWFjb25faWVzKSlcbiYjNDM7XHRcdFx0XHRoaWRkZW4gPSBOVUxMO1xuIFx0XHRcdGlmIChoaWRkZW4pIHtcbiBcdFx0XHRcdG5ldy1cdTAwM2VwdWIuaGlkZGVuX2JlYWNvbl9ic3MgPSBcdTAwMjZoaWRkZW4tXHUwMDNlcHViO1xuIFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWhpZGRlbl9saXN0LFxuQEAgLTM0NjgsMTEgJiM0MzszNTAyLDYgQEAgdm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRjYnNzLVx1MDAzZXB1Yi5jaGFubmVsID0gY2hhbjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLVx1MDAzZXB1Yi5jYXBhYmlsaXR5LFxuLVx0XHRcdFx0XHQgICAgIGJzcy1cdTAwM2VwdWIuY2hhbm5lbC1cdTAwM2ViYW5kLFxuLVx0XHRcdFx0XHQgICAgIHdkZXYtXHUwMDNlY29ubl9ic3NfdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChic3MgPT0gY2JzcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZjI0NjRkMmNlMGQ1YSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0xMDM5LDEyICYjNDM7MTAzOSwzMCBAQCB1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbi1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuLVx0XHRkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcF9oZHIoc2tiKSkgXHUwMDI2IDB4ZmM7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuJiM0MztcdFx0c3RydWN0IGlwaGRyIF9pcGg7XG4mIzQzO1xuJiM0MztcdFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuJiM0MztcdFx0XHRcdFx0IHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4mIzQzO1x0XHRpZiAoIWlwaClcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0ZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKSBcdTAwMjYgMHhmYztcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLVx0XHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2X2hkcihza2IpKSBcdTAwMjYgMHhmYztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1x0XHRzdHJ1Y3QgaXB2NmhkciBfaXA2aDtcbiYjNDM7XG4mIzQzO1x0XHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuJiM0MztcdFx0XHRcdFx0ICBzaXplb2YoKmlwNmgpLCBcdTAwMjZfaXA2aCk7XG4mIzQzO1x0XHRpZiAoIWlwNmgpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdGRzY3AgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpIFx1MDAyNiAweGZjO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIGh0b25zKEVUSF9QX01QTFNfVUMpOlxuIFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX01DKToge1xuIFx0XHRzdHJ1Y3QgbXBsc19sYWJlbCBtcGxzX3RtcCwgKm1wbHM7XG5AQCAtMTIxNyw4ICYjNDM7MTIzNSw3IEBAIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0XHRcdFx0XHRcdCFldi1cdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRVZFTlRfSUJTU19KT0lORUQ6XG4tXHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzaWQsXG4tXHRcdFx0XHRcdCAgICAgICBldi1cdTAwM2Vpai5jaGFubmVsKTtcbiYjNDM7XHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBFVkVOVF9TVE9QUEVEOlxuIFx0XHRcdC8qXG5AQCAtMjQ3NywxNiAmIzQzOzI0OTQsMTUgQEAgc3RhdGljIHZvaWQgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIG5ld19iZWFjb25faW50LFxuIFx0XHRpZiAod2Rldi1cdTAwM2V2YWxpZF9saW5rcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuJiM0MztcdFx0aWYgKCF3ZGV2X2JpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdC8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi9cbiBcdFx0aWYgKHJhZGlvX2lkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi1cdTAwM2VuZXRkZXYpIFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuLVxuLVx0XHRpZiAoIXdkZXZfYmkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghKmJlYWNvbl9pbnRfZ2NkKSB7XG4gXHRcdFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcbiBcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc2Nhbl9kb25lJiMzNDssCiAgICAmIzM0O19fX2NmZzgwMjExX3NjYW5fZG9uZSYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2smIzM0OywKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5zX3dvcmsmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfaWJzc19qb2luZWQmIzM0OywKICAgICYjMzQ7X19jZmc4MDIxMV9pYnNzX2pvaW5lZCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9jbGFzc2lmeTgwMjFkJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfYnNzX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N0b3BfcDJwX2RldmljZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiYzY3MTVlMDFlZDA3MWJiMTY0NDExOTNiNGNkNzVjNTQ3YmQyYjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMTo1MDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMjQ0LDkgJiM0MzsyNDQsOCBAQCB2b2lkIGNmZzgwMjExX3N0b3BfcDJwX2RldmljZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJcmRldi0mZ3Q7b3BlbmNvdW50LS07CiAKIAlpZiAocmRldi0mZ3Q7c2Nhbl9yZXEgJmFtcDsmYW1wOyByZGV2LSZndDtzY2FuX3JlcS0mZ3Q7cmVxLndkZXYgPT0gd2RldikgewotCQlpZiAoV0FSTl9PTighcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKLQkJCSAgICAoIXJkZXYtJmd0O2ludF9zY2FuX3JlcSB8fAotCQkJICAgICAhcmRldi0mZ3Q7aW50X3NjYW5fcmVxLSZndDtub3RpZmllZCkpKQomIzQzOwkJaWYgKCFyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7bm90aWZpZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgICghcmRldi0mZ3Q7aW50X3NjYW5fcmVxIHx8ICFyZGV2LSZndDtpbnRfc2Nhbl9yZXEtJmd0O25vdGlmaWVkKSkKIAkJCXJkZXYtJmd0O3NjYW5fcmVxLSZndDtpbmZvLmFib3J0ZWQgPSB0cnVlOwogCQlfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpOwogCX0KQEAgLTY0Niw2ICYjNDM7NjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsCiAJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7ZGVzdHJveV93b3JrLCBjZmc4MDIxMV9kZXN0cm95X2lmYWNlX3drKTsKIAl3aXBoeV93b3JrX2luaXQoJmFtcDtyZGV2LSZndDtzY2hlZF9zY2FuX3N0b3Bfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcF93ayk7CiAJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7c2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7CiYjNDM7CXdpcGh5X3dvcmtfaW5pdCgmYW1wO3JkZXYtJmd0O3JlZ19jaGVja19jaGFuc193aywgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2spOwomIzQzOwlJTklUX1dPUksoJmFtcDtyZGV2LSZndDtyZWdfbGVhdmVfbmFuX3drLCByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2spOwogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2ssCiAJCSAgY2ZnODAyMTFfcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93ayk7CiAJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7cHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spOwpAQCAtMTM0NSw2ICYjNDM7MTM0Niw3IEBAIHZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JkZXYtJmd0O2Rmc191cGRhdGVfY2hhbm5lbHNfd2spOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JkZXYtJmd0O2JhY2tncm91bmRfY2FjX2RvbmVfd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDtkZXN0cm95X3dvcmspOwomIzQzOwlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7cmVnX2xlYXZlX25hbl93ayk7CiAJZmx1c2hfd29yaygmYW1wO3JkZXYtJmd0O3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDtwcm9wYWdhdGVfY2FjX2RvbmVfd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDttZ210X3JlZ2lzdHJhdGlvbnNfdXBkYXRlX3drKTsKQEAgLTE3NTgsOSAmIzQzOzE3NjAsOSBAQCBzdGF0aWMgaW50IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCXdpcGh5X2xvY2soJmFtcDtyZGV2LSZndDt3aXBoeSk7CiAJCWNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd2Rldi0mZ3Q7aWZ0eXBlLCAtMSk7CiAJCWlmIChyZGV2LSZndDtzY2FuX3JlcSAmYW1wOyZhbXA7IHJkZXYtJmd0O3NjYW5fcmVxLSZndDtyZXEud2RldiA9PSB3ZGV2KSB7Ci0JCQlpZiAoV0FSTl9PTighcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKLQkJCQkgICAgKCFyZGV2LSZndDtpbnRfc2Nhbl9yZXEgfHwKLQkJCQkgICAgICFyZGV2LSZndDtpbnRfc2Nhbl9yZXEtJmd0O25vdGlmaWVkKSkpCiYjNDM7CQkJaWYgKCFyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7bm90aWZpZWQgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoIXJkZXYtJmd0O2ludF9zY2FuX3JlcSB8fAomIzQzOwkJCSAgICAgIXJkZXYtJmd0O2ludF9zY2FuX3JlcS0mZ3Q7bm90aWZpZWQpKQogCQkJCXJkZXYtJmd0O3NjYW5fcmVxLSZndDtpbmZvLmFib3J0ZWQgPSB0cnVlOwogCQkJX19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggYjQ2MTBmNjY4NWRjYi4uNjEzOGQyMDdjYWY0MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC0yNCw2ICYjNDM7MjQsMTYgQEAKIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50IHsKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIGluZm87CiAJYm9vbCBub3RpZmllZDsKJiM0MzsJLyoKJiM0MzsJICogc2V0IHdoaWxlIHRoZSByZXF1ZXN0IGlzIGhhbmRlZCB0byB0aGUgZHJpdmVyLCBpLmUuIGJldHdlZW4KJiM0MzsJICogcmRldl9zY2FuKCkgYW5kIGNmZzgwMjExX3NjYW5fZG9uZSgpCiYjNDM7CSAqLwomIzQzOwlib29sIGRyaXZlcl9vd25zOwomIzQzOwkvKgomIzQzOwkgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGwKJiM0MzsJICogb3ducyBpdCwgc28gdGhhdCBjZmc4MDIxMV9zY2FuX2RvbmUoKSBrbm93cyB0byBqdXN0IGZyZWUgaXQKJiM0MzsJICovCiYjNDM7CWJvb2wgc3RhbGU7CiAJLyogbXVzdCBiZSBsYXN0IC0gdmFyaWFibGUgbWVtYmVycyAqLwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgcmVxOwogfTsKQEAgLTEwNCw2ICYjNDM7MTE0LDggQEAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrOwogCXN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93azsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2NoZWRfc2Nhbl9yZXNfd2s7CiYjNDM7CXN0cnVjdCB3aXBoeV93b3JrIHJlZ19jaGVja19jaGFuc193azsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHJlZ19sZWF2ZV9uYW5fd2s7CiAKIAlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgcmFkYXJfY2hhbmRlZjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93azsKQEAgLTI4MCw4ICYjNDM7MjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHsKIAkJCWJvb2wgbG9jYWxseV9nZW5lcmF0ZWQ7CiAJCX0gZGM7CiAJCXN0cnVjdCB7Ci0JCQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CiYjNDM7CQkJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCQl9IGlqOwogCQlzdHJ1Y3QgewogCQkJdTggcGVlcl9hZGRyW0VUSF9BTEVOXTsKQEAgLTM0NCw4ICYjNDM7MzU1LDcgQEAgaW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIHZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7CiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7Ci12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7CiYjNDM7dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvaWJzcy5jIGIvbmV0L3dpcmVsZXNzL2lic3MuYwppbmRleCBiMWQ3NDhiZGI1MDRlLi43ZjY3NzlkMzI2YjgxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9pYnNzLmMKQEAgLTE2LDI2ICYjNDM7MTYsMTggQEAKICNpbmNsdWRlICYjMzQ7cmRldi1vcHMuaCYjMzQ7CiAKIAotdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCiYjNDM7dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcykKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LSZndDtpZWVlODAyMTFfcHRyOwotCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVAogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKICNlbmRpZgogCiAJaWYgKFdBUk5fT04od2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKLQkJcmV0dXJuOwomIzQzOwkJZ290byBwdXRfYnNzOwogCiAJaWYgKCF3ZGV2LSZndDt1Lmlic3Muc3NpZF9sZW4pCi0JCXJldHVybjsKLQotCWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod2Rldi0mZ3Q7d2lwaHksIGNoYW5uZWwsIGJzc2lkLCBOVUxMLCAwLAotCQkJICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpOwotCi0JaWYgKFdBUk5fT04oIWJzcykpCi0JCXJldHVybjsKJiM0MzsJCWdvdG8gcHV0X2JzczsKIAogCWlmICh3ZGV2LSZndDt1Lmlic3MuY3VycmVudF9ic3MpIHsKIAkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LSZndDt1Lmlic3MuY3VycmVudF9ic3MpOwpAQCAtNDMsMTcgJiM0MzszNSwyMiBAQCB2b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAogCX0KIAogCWNmZzgwMjExX2hvbGRfYnNzKGJzc19mcm9tX3B1Yihic3MpKTsKJiM0MzsJLyogdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBldmVudCBpcyB0cmFuc2ZlcnJlZCB0byBjdXJyZW50X2JzcyAqLwogCXdkZXYtJmd0O3UuaWJzcy5jdXJyZW50X2JzcyA9IGJzc19mcm9tX3B1Yihic3MpOwogCiAJY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTsKIAotCW5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi0mZ3Q7d2lwaHkpLCBkZXYsIGJzc2lkLAomIzQzOwlubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtJmd0O3dpcGh5KSwgZGV2LCBic3MtJmd0O2Jzc2lkLAogCQkJCUdGUF9LRVJORUwpOwogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCiAJbWVtc2V0KCZhbXA7d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CiYjNDM7CW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzLSZndDtic3NpZCwgRVRIX0FMRU4pOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZhbXA7d3JxdSwgTlVMTCk7CiAjZW5kaWYKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO3B1dF9ic3M6CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2Rldi0mZ3Q7d2lwaHksIGJzcyk7CiB9CiAKIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLApAQCAtNjIsNiAmIzQzOzU5LDcgQEAgdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtJmd0O3dpcGh5KTsKIAlzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2OwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXRyYWNlX2NmZzgwMjExX2lic3Nfam9pbmVkKGRldiwgYnNzaWQsIGNoYW5uZWwpOwpAQCAtNjksMTMgJiM0Mzs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKIAlpZiAoV0FSTl9PTighY2hhbm5lbCkpCiAJCXJldHVybjsKIAomIzQzOwlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7CiYjNDM7CWlmIChXQVJOX09OKCFic3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWV2ID0ga3phbGxvY19vYmooKmV2LCBnZnApOwotCWlmICghZXYpCiYjNDM7CWlmICghZXYpIHsKJiM0MzsJCWNmZzgwMjExX3B1dF9ic3Mod2Rldi0mZ3Q7d2lwaHksIGJzcyk7CiAJCXJldHVybjsKJiM0MzsJfQogCiAJZXYtJmd0O3R5cGUgPSBFVkVOVF9JQlNTX0pPSU5FRDsKLQltZW1jcHkoZXYtJmd0O2lqLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwotCWV2LSZndDtpai5jaGFubmVsID0gY2hhbm5lbDsKJiM0MzsJZXYtJmd0O2lqLmJzcyA9IGJzczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7d2Rldi0mZ3Q7ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmFtcDtldi0mZ3Q7bGlzdCwgJmFtcDt3ZGV2LSZndDtldmVudF9saXN0KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKQEAgLTQ2NCw3ICYjNDM7NDY0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdHJhY2VfcmRldl9zY2FuKCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJlcXVlc3QpOwomIzQzOwlyZXF1ZXN0LSZndDtkcml2ZXJfb3ducyA9IHRydWU7CiAJcmV0ID0gcmRldi0mZ3Q7b3BzLSZndDtzY2FuKCZhbXA7cmRldi0mZ3Q7d2lwaHksICZhbXA7cmVxdWVzdC0mZ3Q7cmVxKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJlcXVlc3QtJmd0O2RyaXZlcl9vd25zID0gZmFsc2U7CiAJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCBhODMzNmJhZjg1ZGM2Li4xMTY2NWUwYTdlZmM4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC0yMzQ1LDcgJiM0MzsyMzQ1LDcgQEAgc3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogCWlmdHlwZSA9IHdkZXYtJmd0O2lmdHlwZTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZSAqLwotCWlmICghd2Rldi0mZ3Q7bmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKHdkZXYtJmd0O25ldGRldikpCiYjNDM7CWlmICghd2Rldl9ydW5uaW5nKHdkZXYpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qIE5BTiBkb2VzbiYjMzk7dCBoYXZlIGxpbmtzLCBoYW5kbGUgaXQgc2VwYXJhdGVseSAqLwpAQCAtMjQ0NiwxOSAmIzQzOzI0NDYsNTIgQEAgc3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7CiYjNDM7CiYjNDM7CXJkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLAomIzQzOwkJCSAgICByZWdfbGVhdmVfbmFuX3drKTsKJiM0MzsKJiM0MzsJLyogc3RvcHBpbmcgTkFOIGNsb3NlcyBpdHMgZGF0YSBpbnRlcmZhY2VzLCB3aGljaCBuZWVkcyB0aGUgUlROTCAqLwomIzQzOwlydG5sX2xvY2soKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmFtcDtyZGV2LSZndDt3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHsKIAkJYm9vbCB2YWxpZDsKIAotCQlzY29wZWRfZ3VhcmQod2lwaHksIHdpcGh5KQotCQkJdmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTsKJiM0MzsJCWlmICh3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc2NvcGVkX2d1YXJkKHdpcGh5LCAmYW1wO3JkZXYtJmd0O3dpcGh5KQomIzQzOwkJCXZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2KTsKIAkJaWYgKCF2YWxpZCkKIAkJCWNmZzgwMjExX2xlYXZlKHJkZXYsIHdkZXYsIC0xKTsKIAl9CiYjNDM7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTsKJiM0MzsJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3dpcGh5LSZndDttdHgpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAocmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2RldikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGVhcmluZyBkb3duIE5BTiBuZWVkcyB0aGUgUlROTCBmb3IgY2xvc2luZyBOQU5fREFUQQomIzQzOwkJICogaW50ZXJmYWNlcywgaGFuZGxlIHRoYXQgc2VwYXJhdGVseS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHdkZXYtJmd0O2lmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4pCiYjNDM7CQkJc2NoZWR1bGVfd29yaygmYW1wO3JkZXYtJmd0O3JlZ19sZWF2ZV9uYW5fd2spOwomIzQzOwkJZWxzZQomIzQzOwkJCWNmZzgwMjExX2xlYXZlX2xvY2tlZChyZGV2LCB3ZGV2LCAtMSk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjQ2NiwxMiAmIzQzOzI0OTksMTMgQEAgc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAogCXByX2RlYnVnKCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcbiYjMzQ7KTsKLQlydG5sX2xvY2soKTsKIAotCWZvcl9lYWNoX3JkZXYocmRldikKLQkJcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoJmFtcDtyZGV2LSZndDt3aXBoeSk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAotCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsICZhbXA7Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KQomIzQzOwkJd2lwaHlfd29ya19xdWV1ZSgmYW1wO3JkZXYtJmd0O3dpcGh5LCAmYW1wO3JkZXYtJmd0O3JlZ19jaGVja19jaGFuc193ayk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5oIGIvbmV0L3dpcmVsZXNzL3JlZy5oCmluZGV4IGZjMzFjNWY5YTYxYWIuLmM1ODcwNzllYWQ4ZmIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvcmVnLmgKQEAgLTE3OCw2ICYjNDM7MTc4LDIyIEBAIGludCByZWdfcmVsb2FkX3JlZ2RiKHZvaWQpOwogICovCiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTsKIAomIzQzOy8qKgomIzQzOyAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drIC0gY2hlY2sgaWYgY2hhbm5lbHMgYXJlIG5vIGxvbmdlciB1c2FibGUgYW5kIGxlYXZlCiYjNDM7ICogQHdpcGh5OiB0aGUgd2lwaHkgdG8gY2hlY2sKJiM0MzsgKiBAd29yazogdGhlIHdvcmsgc3RydWN0CiYjNDM7ICovCiYjNDM7dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZQomIzQzOyAqIEB3b3JrOiB0aGUgd29yayBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFN0b3BwaW5nIGEgTkFOIGludGVyZmFjZSBuZWVkcyB0aGUgUlROTCwgc28gaXQgY2Fubm90IGJlIGRvbmUgZnJvbQomIzQzOyAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKCkgd2hpY2ggcnVucyB3aXRoIHRoZSB3aXBoeSBtdXRleCBoZWxkLgomIzQzOyAqLwomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7CiBleHRlcm4gY29uc3QgdTggc2hpcHBlZF9yZWdkYl9jZXJ0c1tdOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjsKIGV4dGVybiBjb25zdCB1OCBleHRyYV9yZWdkYl9jZXJ0c1tdOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC0xMTE0LDYgJiM0MzsxMTE0LDIxIEBAIGludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLAomIzQzOyAqIGUuZy4gbWFjODAyMTEgbWF5IGNhbmNlbCBpdCBhc3luY2hyb25vdXNseSBhbmQgc3RpbGwgdXNlIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKQomIzQzO3sKJiM0MzsJaWYgKCFyZXEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChyZXEtJmd0O2RyaXZlcl9vd25zKQomIzQzOwkJcmVxLSZndDtzdGFsZSA9IHRydWU7CiYjNDM7CWVsc2UKJiM0MzsJCWtmcmVlKHJlcSk7CiYjNDM7fQomIzQzOwogdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgYm9vbCBzZW5kX21lc3NhZ2UpCiB7CkBAIC0xMTczLDEwICYjNDM7MTE4OCwxMCBAQCB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAKIAlkZXZfcHV0KHdkZXYtJmd0O25ldGRldik7CiAKLQlrZnJlZShyZGV2LSZndDtpbnRfc2Nhbl9yZXEpOwomIzQzOwljZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi0mZ3Q7aW50X3NjYW5fcmVxKTsKIAlyZGV2LSZndDtpbnRfc2Nhbl9yZXEgPSBOVUxMOwogCi0Ja2ZyZWUocmRldi0mZ3Q7c2Nhbl9yZXEpOwomIzQzOwljZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi0mZ3Q7c2Nhbl9yZXEpOwogCXJkZXYtJmd0O3NjYW5fcmVxID0gTlVMTDsKIAogCWlmICghc2VuZF9tZXNzYWdlKQpAQCAtMTE5OSw2ICYjNDM7MTIxNCwxOCBAQCB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LAogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gb2xkX2luZm8gPSBpbnRyZXEtJmd0O2luZm87CiAKIAl0cmFjZV9jZmc4MDIxMV9zY2FuX2RvbmUoaW50cmVxLCBpbmZvKTsKJiM0MzsKJiM0MzsJaW50cmVxLSZndDtkcml2ZXJfb3ducyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoaW50cmVxLSZndDtzdGFsZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBzY2FuIGlzIGFscmVhZHkgY29tcGxldGVkIGFzIGZhciBhcyB3ZSYjMzk7cmUgY29uY2VybmVkLAomIzQzOwkJICogaXQgd2FzIGp1c3Qga2VwdCBhcm91bmQgZm9yIHRoZSBkcml2ZXIgLSBkb25lIG5vdywgZnJlZSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJa2ZyZWUoaW50cmVxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCVdBUk5fT04oaW50cmVxICE9IHJkZXYtJmd0O3NjYW5fcmVxICZhbXA7JmFtcDsKIAkJaW50cmVxICE9IHJkZXYtJmd0O2ludF9zY2FuX3JlcSk7CiAKQEAgLTIwNTAsNiAmIzQzOzIwNzcsMTMgQEAgX19jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCWlmICghaGlkZGVuKQogCQkJCWhpZGRlbiA9IHJiX2ZpbmRfYnNzKHJkZXYsIHRtcCwKIAkJCQkJCSAgICAgQlNTX0NNUF9ISURFX05VTCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBPbmx5IGdyb3VwIHdpdGggYW4gZW50cnkgd2l0aCBiZWFjb24gZGF0YSwgb3RoZXJ3aXNlCiYjNDM7CQkJICogYmVhY29uIGRhdGEgY2FuIG5ldmVyIGJlIGZpbGxlZC91cGRhdGVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChoaWRkZW4gJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhcmN1X2FjY2Vzc19wb2ludGVyKGhpZGRlbi0mZ3Q7cHViLmJlYWNvbl9pZXMpKQomIzQzOwkJCQloaWRkZW4gPSBOVUxMOwogCQkJaWYgKGhpZGRlbikgewogCQkJCW5ldy0mZ3Q7cHViLmhpZGRlbl9iZWFjb25fYnNzID0gJmFtcDtoaWRkZW4tJmd0O3B1YjsKIAkJCQlsaXN0X2FkZCgmYW1wO25ldy0mZ3Q7aGlkZGVuX2xpc3QsCkBAIC0zNDY4LDExICYjNDM7MzUwMiw2IEBAIHZvaWQgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeShzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCWNic3MtJmd0O3B1Yi5jaGFubmVsID0gY2hhbjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmYW1wO3JkZXYtJmd0O2Jzc19saXN0LCBsaXN0KSB7Ci0JCWlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLSZndDtwdWIuY2FwYWJpbGl0eSwKLQkJCQkJICAgICBic3MtJmd0O3B1Yi5jaGFubmVsLSZndDtiYW5kLAotCQkJCQkgICAgIHdkZXYtJmd0O2Nvbm5fYnNzX3R5cGUpKQotCQkJY29udGludWU7Ci0KIAkJaWYgKGJzcyA9PSBjYnNzKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IDNlNTg0ZDBjYTNlMjYuLmYyNDY0ZDJjZTBkNWEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtMTAzOSwxMiAmIzQzOzEwMzksMzAgQEAgdW5zaWduZWQgaW50IGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKLQljYXNlIGh0b25zKEVUSF9QX0lQKToKLQkJZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBfaGRyKHNrYikpICZhbXA7IDB4ZmM7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJCXN0cnVjdCBpcGhkciBfaXBoOwomIzQzOwomIzQzOwkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAomIzQzOwkJCQkJIHNpemVvZigqaXBoKSwgJmFtcDtfaXBoKTsKJiM0MzsJCWlmICghaXBoKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKSAmYW1wOyAweGZjOwogCQlicmVhazsKLQljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQlkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2X2hkcihza2IpKSAmYW1wOyAweGZjOwomIzQzOwl9CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoOwomIzQzOwkJc3RydWN0IGlwdjZoZHIgX2lwNmg7CiYjNDM7CiYjNDM7CQlpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAomIzQzOwkJCQkJICBzaXplb2YoKmlwNmgpLCAmYW1wO19pcDZoKTsKJiM0MzsJCWlmICghaXA2aCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWRzY3AgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpICZhbXA7IDB4ZmM7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKToKIAljYXNlIGh0b25zKEVUSF9QX01QTFNfTUMpOiB7CiAJCXN0cnVjdCBtcGxzX2xhYmVsIG1wbHNfdG1wLCAqbXBsczsKQEAgLTEyMTcsOCAmIzQzOzEyMzUsNyBAQCB2b2lkIGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAkJCQkJCSFldi0mZ3Q7ZGMubG9jYWxseV9nZW5lcmF0ZWQpOwogCQkJYnJlYWs7CiAJCWNhc2UgRVZFTlRfSUJTU19KT0lORUQ6Ci0JCQlfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtJmd0O25ldGRldiwgZXYtJmd0O2lqLmJzc2lkLAotCQkJCQkgICAgICAgZXYtJmd0O2lqLmNoYW5uZWwpOwomIzQzOwkJCV9fY2ZnODAyMTFfaWJzc19qb2luZWQod2Rldi0mZ3Q7bmV0ZGV2LCBldi0mZ3Q7aWouYnNzKTsKIAkJCWJyZWFrOwogCQljYXNlIEVWRU5UX1NUT1BQRUQ6CiAJCQkvKgpAQCAtMjQ3NywxNiAmIzQzOzI0OTQsMTUgQEAgc3RhdGljIHZvaWQgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIG5ld19iZWFjb25faW50LAogCQlpZiAod2Rldi0mZ3Q7dmFsaWRfbGlua3MpCiAJCQljb250aW51ZTsKIAomIzQzOwkJd2Rldl9iaSA9IGNmZzgwMjExX3dkZXZfYmkod2Rldik7CiYjNDM7CQlpZiAoIXdkZXZfYmkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi8KIAkJaWYgKHJhZGlvX2lkeCAmZ3Q7PSAwICZhbXA7JmFtcDsKIAkJICAgICEocmRldl9nZXRfcmFkaW9fbWFzayhyZGV2LCB3ZGV2LSZndDtuZXRkZXYpICZhbXA7IEJJVChyYWRpb19pZHgpKSkKIAkJCWNvbnRpbnVlOwogCi0JCXdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpOwotCi0JCWlmICghd2Rldl9iaSkKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghKmJlYWNvbl9pbnRfZ2NkKSB7CiAJCQkqYmVhY29uX2ludF9nY2QgPSB3ZGV2X2JpOwogCQkJY29udGludWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscywgYXMgYWx3YXlzLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgbmV0L3dpcmVsZXNzYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBgY2ZnODAyMTFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgYWxzbyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV2YWx1YXRpbmcgdGhlIHZ1bG5lcmFiaWxpdHkgcG90ZW50aWFsIG9mIHRoZSBwYXRjaC4gVGhlIGZpbGVzIHRvdWNoZWQgc3BhbiBhIGRlY2VudCBjaHVuayBvZiB0aGUgYGNmZzgwMjExYCBjb2RlLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiBGaXJzdCwgdGhlIHJlbW92YWwgb2YgYFdBUk5fT05gIGluIHNjYW4gYWJvcnQgaGFuZGxpbmcuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNpZ25hbCBvZiBwb3RlbnRpYWxseSByZWxheGVkIGVycm9yIGNoZWNrczsgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgYSBiaXQgdGhlcmUuIFNlY29uZCwgdGhlIGluaXRpYWxpemF0aW9uL2ZsdXNoaW5nIG9mIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgaW4gYHdpcGh5X25ld19ubWAgc3VnZ2VzdHMgY2hhbmdlcyB0byB3b3JrIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIHBsYWNlIHRvIHdhdGNoIGNsb3NlbHksIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIGNvbnRleHQuIFRoaXJkLCB0aGUgc2NhbiByZXF1ZXN0IGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMgYmVpbmcgb3ZlcmhhdWxlZCB3aXRoIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgZmxhZ3MuIFRoYXQgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2FpdGluZyB0byBoYXBwZW4uIFRoZSBsb2dpYyBhcm91bmQgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBzY2FuIHJlcXVlc3RzIGlzIG9mdGVuIHRyaWNreS4KClRoZSBmb3VydGggY2hhbmdlLCB3aGljaCBoYXMgdG8gZG8gd2l0aCBob3cgYGNmZzgwMjExX2Jzc2AgcmVmZXJlbmNlcyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgdGhlaXIgcmVsYXRlZCByZWZlcmVuY2UgY291bnRpbmcgYmVpbmcgdGlnaHRlbmVkLCBpcyBhbm90aGVyIGFyZWEgdG8gZm9jdXMgb24uIEZpZnRoLCB0aGUgY2hhbm5lbCBpbnZhbGlkYXRpb24gc3BsaXQgYW5kIHdvcmtxdWV1ZSBjaGFuZ2UgZnJvbSBSVE5MIGxvY2tpbmcgdG8gUkNVIGluIGByZWcuY2AgaXMgc2lnbmlmaWNhbnQuIFRoYXQmIzM5O3MgYSBnb29kIG1vdmUgdG8gaW1wcm92ZSBjb25jdXJyZW5jeSwgYnV0IGl0IGFsc28gb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHN1YnRsZSBpc3N1ZXMgaWYgbm90IGltcGxlbWVudGVkIHBlcmZlY3RseS4gVGhlIHVzZSBvZiBgd2Rldl9ydW5uaW5nKHdkZXYpYCBzdWdnZXN0cyBzb21lIHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgcnVudGltZSBzdGF0ZSBvZiBhIHdpcmVsZXNzIGRldmljZS4gU2l4dGggYW5kIHNldmVudGggdGhlIGNoYW5nZXMgaW4gYHNjYW4uY2AgYW5kIGB1dGlsLmNgIGxvb2sgbGlrZSBpbmNyZW1lbnRhbCBjaGFuZ2VzIHdpdGggcG90ZW50aWFsIGltcGFjdC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSBmdXp6IHRoaXMgd2l0aCBzeXprYWxsZXI/IFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGtub3csIGBjZmc4MDIxMWAsIGBtYWM4MDIxMWAsIGFuZCBhc3NvY2lhdGVkIGNvbXBvbmVudHMgYXJlIGluZGVlZCBmdXp6YWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgYG1hYzgwMjExX2h3c2ltYCBpbnRlcmZhY2UsIE5MODAyMTEsIGFuZCBzaW11bGF0ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyBhcmUgYWxsIGhlYXZpbHkgdXNlZCBpbiBzeXprYWxsZXIuIFRoYXQmIzM5O3MgYSBiaWcgcGx1cywgYnV0IGl0IGlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucy4KCk9rYXksIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgcnVubmluZyBzb21lIGdyZXBzIG9yIGNvZGUgaW5zcGVjdGlvbnMgdG8gY29uZmlybS4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBzaG90LCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRob3JvdWdobHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9mIENGRzgwMjExLiBXaGF0IGZlYXR1cmVzIHJlbHkgb24gaXQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuLCBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgSSBtaWdodCBvdmVybG9vaz8gQSBkZXRhaWxlZCByZXZpZXcgaGVyZSB3aWxsIGhlbHAgZW5zdXJlIHRoZSBlbnRpcmUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgYXMgZXhwZWN0ZWQgYW5kIGF2b2lkIGFueSBydW50aW1lIHN1cnByaXNlcyBsYXRlci4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gbmFpbGluZyBkb3duIGFsbCB0aGUgY29ubmVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHRyb3VibGVzaG9vdGluZyBwYXRoLCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcgc2V0dGluZ3MuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGhpZ2hlci1sZXZlbCBkcml2ZXJzLCBidXQgYSBtaXNjb25maWd1cmF0aW9uIHRoZXJlIGNvdWxkIGJlIHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZS4gQSBzaW1wbGUgb3ZlcnNpZ2h0IGluIHRoZSBzaW11bGF0aW9uIGVudmlyb25tZW50JiMzOTtzIGJ1aWxkIG9wdGlvbnMgY291bGQgZXhwbGFpbiB0aGUgb2RkIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGJ1dCBvbmUgdGhhdCBjb3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgYW5kIHBvdGVudGlhbCBoZWFkYWNoZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhbGwgc3F1YXJlZCBhd2F5IGJlZm9yZSBkaWdnaW5nIGRlZXBlci4gVGhhdCBoYXJkd2FyZSBzaW11bGF0aW9uIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gYmUgdmVyaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEFuYWx5c2lzIGZvciB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGluY2x1ZGUgYXMgRm9jdXNTeW1ib2xzIGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIHRoYXQgYXJlIGVpdGhlciBwdWJsaWMgb3Igb3RoZXJ3aXNlIHNpZ25pZmljYW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzLgoKRmlyc3QsIEkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQ6CgoqICAgYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWAKKiAgIGB3aXBoeV9uZXdfbm1gCiogICBgd2lwaHlfdW5yZWdpc3RlcmAKKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGAKKiAgIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYAoqICAgYGNmZzgwMjExX2lic3Nfam9pbmVkYAoqICAgYHJkZXZfc2NhbmAgKGlubGluZSkgLSBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBzY2FuLmNgIGZvciBjYWxsIHNpdGVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zLgoqICAgYHJlZ193ZGV2X2NoYW5fdmFsaWRgCiogICBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYAoqICAgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYAoqICAgYHJlZ19jaGVja19jaGFuc193b3JrYAoqICAgYGNmZzgwMjExX3B1dF9zY2FuX3JlcWAgKHN0YXRpYykgLSBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMgb25lLgoqICAgYF9fX2NmZzgwMjExX3NjYW5fZG9uZWAKKiAgIGBjZmc4MDIxMV9zY2FuX2RvbmVgCiogICBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYAoqICAgYGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlgCiogICBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAKKiAgIGBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzYAoqICAgYGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhYAoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZmlsdGVyIHRoaXMgbGlzdC4gSSYjMzk7bGwgZmxhZyB0aGUgc3RhdGljIG9uZXMsIGxpa2UgYGNmZzgwMjExX3B1dF9zY2FuX3JlcWAgYW5kIGByZWdfY2hlY2tfY2hhbnNfd29ya2AsIGFzIHBvdGVudGlhbGx5IGxlc3MgaW1wb3J0YW50IHVubGVzcyB0aGV5IGhhdmUgc2lnbmlmaWNhbnQgaW50ZXJuYWwgZGVwZW5kZW5jaWVzIG9yIGFyZSBjYWxsZWQgZnJvbSBvdXRzaWRlLiBUaGUgaW5saW5lIGByZGV2X3NjYW5gIHdpbGwgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgpOZXh0LCBJJiMzOTtsbCB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgc291cmNlIGZpbGVzIHRoZW1zZWx2ZXMgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGU6IGBzY2FuLmNgLCBgaWJzcy5jYCwgYHJlZy5jYCwgYHV0aWwuY2AsIGFuZCBgY29yZS5jYCBhcHBlYXIgdG8gYmUgdGhlIGtleSBhcmVhcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHNlZSB3aGF0IEkgbWlnaHQgYmUgbWlzc2luZy4KCkJhc2VkIG9uIHRoYXQsIGEgc21hbGxlciBzZXQgb2YgY2FuZGlkYXRlcyBlbWVyZ2VzIGFzIHBhcnRpY3VsYXJseSBjcml0aWNhbCB0byBoaWdobGlnaHQ6CgoqICAgYGNmZzgwMjExX3NjYW5fZG9uZWAKKiAgIGBfX19jZmc4MDIxMV9zY2FuX2RvbmVgCiogICBgY2ZnODAyMTFfc2NhbmAgKEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBpbiB0aGUgcGF0Y2ggc2NvcGUpCiogICBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYAoqICAgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYAoqICAgYHJlZ19jaGVja19jaGFuc193b3JrYCAvIGByZWdfY2hlY2tfY2hhbm5lbHNgCiogICBgY2ZnODAyMTFfaWJzc19qb2luZWRgCiogICBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAKKiAgIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYAoqICAgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAKKiAgIGBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5YAoqICAgYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWAKKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGAKCkZpbmFsbHksIEkmIzM5O2xsIGRvIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgZGVmaW5lZCB3aXRoaW4gdGhlIHVwZGF0ZWQgY29kZWJhc2UuIFRoYXQmIzM5O3MgdGhlIGxhc3QgdmVyaWZpY2F0aW9uIEkgbmVlZCB0byBtYWtlIGJlZm9yZSBJJiMzOTttIHNhdGlzZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBjZmc4MDIxMV9zY2FuX2RvbmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3NjYW4uYz0xMjAzPXZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKVxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTIwNy1cbm5ldC93aXJlbGVzcy9zY2FuLmM6MTIwODp2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMjA5LVx0XHRcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gKmluZm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgQW5vbWFsaWVzIGluIExlYXZlIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsZWF2ZSByZWdpc3RyYXRpb24gZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgbWlzc2luZyBvciBpbnZhbGlkIHZhbHVlcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgYXJvdW5kIGxlYXZlIHJlcXVlc3RzLiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiB0d28gc3BlY2lmaWMgdmFyaWFibGVzOiBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCBhbmQgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYC4gSSBzdXNwZWN0IHRoZXNlIHZhcmlhYmxlcyBhcmUga2V5IGluIGZsYWdnaW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGxlYXZlIGVudHJpZXMuIEkgZXhwZWN0IGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIHRvIGFkZHJlc3Mgd2Vla3Mgd2l0aCBtaXNzaW5nIG51bWVyaWNhbCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBhbmQgSSBhbHNvIGV4cGVjdCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgIHRvIGFkZHJlc3Mgd2Vla3Mgd2l0aCBpbmNvcnJlY3Qgb3IgbWlzc2luZyBjaGFubmVsIGluZm9ybWF0aW9uIHRpZWQgdG8gdGhlIGxlYXZlIHJlcXVlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGF0YSBhY3R1YWxseSB0ZWxscyB1cyBhYm91dCB0aGVzZSB2YXJpYWJsZXMuIFRoaXMgbmVlZHMgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdfbGVhdmVfaW52YWxpZF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz01NDg9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy02NDctXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2VzY2hlZF9zY2FuX3Jlc193aywgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzX3drKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjQ4Olx0d2lwaHlfd29ya19pbml0KFx1MDAyNnJkZXYtXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drLCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjY0OTpcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTY1MC1cdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2ssXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTIzMzc9c3RhdGljIGJvb2wgcmVnX3dkZXZfY2hhbl92YWxpZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDQ4LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0NDk6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NTAte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc0LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0NzU6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc2LXtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmg9MTc5PXZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuaC0xODEtLyoqXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTgyOiAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drIC0gY2hlY2sgaWYgY2hhbm5lbHMgYXJlIG5vIGxvbmdlciB1c2FibGUgYW5kIGxlYXZlXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTgzLSAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oLTE4NS0gKi9cbm5ldC93aXJlbGVzcy9yZWcuaDoxODY6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7XG5uZXQvd2lyZWxlc3MvcmVnLmgtMTg3LVxubmV0L3dpcmVsZXNzL3JlZy5oLTE4OC0vKipcbm5ldC93aXJlbGVzcy9yZWcuaDoxODk6ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZVxubmV0L3dpcmVsZXNzL3JlZy5oLTE5MC0gKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oLTE5Mi0gKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cbm5ldC93aXJlbGVzcy9yZWcuaDoxOTM6ICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soKSB3aGljaCBydW5zIHdpdGggdGhlIHdpcGh5IG11dGV4IGhlbGQuXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTk0LSAqL1xubmV0L3dpcmVsZXNzL3JlZy5oOjE5NTp2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L3dpcmVsZXNzL3JlZy5oLTE5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBCU1MgVXBkYXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBCU1MgZW50cmllcyBhcmUgaGFuZGxlZCBpbiB0aGUgd2lyZWxlc3Mgc3RhY2ssIGVzcGVjaWFsbHkgY29uY2VybmluZyBhc3NvY2lhdGlvbiB1cGRhdGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWAuIFRoZXNlIGFyZSBjcml0aWNhbCBmb3IgbWFuYWdpbmcgdGhlIGluZm9ybWF0aW9uIGFib3V0IGFjY2VzcyBwb2ludHMgYW5kIGhvdyBvdXIgZGV2aWNlIGFzc29jaWF0ZXMgd2l0aCB0aGVtLCBzbyBJIHdhbnQgYSBjbGVhciBwaWN0dXJlLiBJJiMzOTttIGltYWdpbmluZyBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhcyB0aGUgZm91bmRhdGlvbmFsIGZ1bmN0aW9uLCB0aGUgbG93ZXItbGV2ZWwgd29ya2hvcnNlIHRoYXQgbGlrZWx5IGRvZXMgdGhlIGJ1bGsgb2YgdGhlIGRpcnR5IHdvcmsuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLCB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgQlNTIGVudHJ5IHdpdGggbmV3IGluZm9ybWF0aW9uLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgdGhpbmdzIGdldCBjb25jcmV0ZS4gRnJvbSB0aGVyZSBJJiMzOTttIGd1ZXNzaW5nIGBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5YCBwcm9iYWJseSBzaXRzIGEgbGV2ZWwgaGlnaGVyIGFuZCBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hhdCBuZWVkcyB1cGRhdGluZywgY2FsbHMgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAgYXMgbmVlZGVkLCBhbmQgcGVyaGFwcyBkZWFscyB3aXRoIG1vcmUgYXNzb2NpYXRpb24tc3BlY2lmaWMgbG9naWMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBjb25jdXJyZW50IGFjY2Vzcy4gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQgYW5kIGhvdyBhcmUgdGhvc2Ugc3RydWN0dXJlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgaWYgdGhlIHNhbWUgQlNTIGVudHJ5IGlzIGJlaW5nIHVwZGF0ZWQgZnJvbSBtdWx0aXBsZSBzb3VyY2VzPyBUaGVuIEkmIzM5O2xsIGhhdmUgdG8gc2VlIGlmIHRoZSBzZWNvbmQgZnVuY3Rpb24gbWFrZXMgYSBzZXBhcmF0ZSBjaGVjay4gSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NvY2lhdGlvbiBwcm9jZXNzIG9yIGEgcmVsYXRlZCBjb25uZWN0aW9uIHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBjb21lcyBmcm9tIHRoYXQgaXMgdXNlZCB0byB1cGRhdGUgdGhlIEJTUyBlbnRyeTogSXMgaXQgZnJvbSB0aGUgZmlybXdhcmUsIHRoZSBkcml2ZXIsIG9yIGZyb20gdGhlIHNjYW4gcmVzdWx0cz8gVGhlbiBJJiMzOTtsbCBjaGVjayBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgcmVndWxhdG9yeSBkYXRhYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZmc4MDIxMV9ic3NfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9zY2FuLmM9MjAzND1zdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjIwMzU6X19jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjAzNi1cdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MjE0NT1jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTIxNTEtXHRzcGluX2xvY2tfYmgoXHUwMDI2cmRldi1cdTAwM2Vic3NfbG9jayk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjIxNTI6XHRyZXMgPSBfX2NmZzgwMjExX2Jzc191cGRhdGUocmRldiwgdG1wLCBzaWduYWxfdmFsaWQsIHRzKTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjE1My1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MjMyNT1jZmc4MDIxMV9pbmZvcm1fc2luZ2xlX2Jzc19kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDM5LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xubmV0L3dpcmVsZXNzL3NjYW4uYzoyNDQwOlx0cmVzID0gX19jZmc4MDIxMV9ic3NfdXBkYXRlKHJkZXYsIFx1MDAyNnRtcCwgc2lnbmFsX3ZhbGlkLCB0cyk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTI0NDEtXHRpZiAoIXJlcylcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTI0NjItXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFx1MDAyNnJlcy1cdTAwM2VwdWIpO1xubmV0L3dpcmVsZXNzL3NjYW4uYzoyNDYzOlx0LyogX19jZmc4MDIxMV9ic3NfdXBkYXRlIGdpdmVzIHVzIGEgcmVmZXJlbmNlZCByZXN1bHQgKi9cbm5ldC93aXJlbGVzcy9zY2FuLmMtMjQ2NC1cdHJldHVybiBcdTAwMjZyZXMtXHUwMDNlcHViO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIyOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIDgwMi4xRCBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgY2ZnODAyMTEgZnJhbWV3b3JrLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBiZXR0aW5nIGl0IGhhbmRsZXMgY2xhc3NpZnlpbmcgdHJhZmZpYyBiYXNlZCBvbiB0aGUgODAyLjFEIHN0YW5kYXJkLCBwcm9iYWJseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgcHJpb3JpdHkgYml0cywgb3Igc29tZSBraW5kIG9mIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKSBkZXRlcm1pbmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQmIzM5O3MgZG9pbmcgdGhlIGNsYXNzaWZpY2F0aW9uLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBiaXR3aXNlIGNoZWNrPyBEb2VzIGl0IHV0aWxpemUgbG9va3VwIHRhYmxlcyBvciBzb21lIG1vcmUgY29tcGxleCBhbGdvcml0aG0/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8KCkkgc2hvdWxkIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyB0byB0aGlzIGZ1bmN0aW9uOiB3aGF0IGtpbmQgb2YgcGFja2V0IGluZm9ybWF0aW9uIGlzIGl0IHJlY2VpdmluZz8gSXMgaXQgdGhlIGVudGlyZSBFdGhlcm5ldCBmcmFtZSwganVzdCB0aGUgVkxBTiBoZWFkZXIsIG9yIHNvbWV0aGluZyBlbHNlPyBUaGVuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgb3V0cHV0cyBhcmUg4oCTIGlzIGl0IHJldHVybmluZyBhIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgYSBwcmlvcml0eSB2YWx1ZSwgb3IgbW9kaWZ5aW5nIHNvbWUga2luZCBvZiBpbnRlcm5hbCBzdGF0ZT8gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3Igd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyB1c2VkIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgc29tZSBkZWNlbnQgY29tbWVudHMgd2l0aGluIHRoZSBmdW5jdGlvbiBvciBzdXJyb3VuZGluZyBjb2RlIHRoYXQgd2lsbCBoZWxwLiBLbm93aW5nIHRoZSBpbnRlcm5hbHMgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFFvUyBmbG93LCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IGluIGFueSBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBtYWtlLCBvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfY2xhc3NpZnk4MDIxZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvdXRpbC5jPTEwMTI9RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYW1zZHVfdG9fODAyM3MpO1xuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMTAxNC0vKiBHaXZlbiBhIGRhdGEgZnJhbWUgZGV0ZXJtaW5lIHRoZSA4MDIuMXAvMWQgdGFnIHRvIHVzZS4gKi9cbm5ldC93aXJlbGVzcy91dGlsLmM6MTAxNTp1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMDE2LVx0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9xb3NfbWFwICpxb3NfbWFwKVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMTE2Ni19XG5uZXQvd2lyZWxlc3MvdXRpbC5jOjExNjc6RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKTtcbm5ldC93aXJlbGVzcy91dGlsLmMtMTE2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2AuIEkmIzM5O20gc3RhcnRpbmcgaGVyZSBiZWNhdXNlIHRoaXMgaXMgbGlrZWx5IHRoZSBjZW50cmFsIHBvaW50IGZvciBoYW5kbGluZyBhc3luY2hyb25vdXMgd2lyZWxlc3MgZGV2aWNlIGV2ZW50cyB3aXRoaW4gdGhlIGNmZzgwMjExIGNvcmUsIHJpZ2h0PyBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBldmVudHMgYXJlIHF1ZXVlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSBkZWxpdmVyZWQgdG8gdGhlIHJlbGV2YW50IHVzZXItc3BhY2UgY29tcG9uZW50cyBvciBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGZsb3cuIEkgZXhwZWN0IGl0IHRvIGludm9sdmUgc29tZSBzb3J0IG9mIHdvcmtxdWV1ZSBvciB0YXNrbGV0IG1lY2hhbmlzbSwgY29uc2lkZXJpbmcgdGhlIG5lZWQgdG8gZGVjb3VwbGUgZXZlbnQgZ2VuZXJhdGlvbiBmcm9tIHRoZSBjb250ZXh0IHdoZXJlIHRoZSBldmVudCBvY2N1cnMuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IGNvbmN1cnJlbmN5IGlzIG1hbmFnZWQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgd2lyZWxlc3MgZGV2aWNlcy4gSXMgdGhlcmUgYSBsb2NrIHByb3RlY3RpbmcgdGhlIGV2ZW50IHF1ZXVlLCBhbmQgaWYgc28sIHdoYXQmIzM5O3MgaXRzIGdyYW51bGFyaXR5PyBXaGF0IGFib3V0IGV2ZW50IG9yZGVyaW5nPyBJcyB0aGVyZSBhIGd1YXJhbnRlZSBldmVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gYSBzcGVjaWZpYyBzZXF1ZW5jZSwgb3IgaXMgaXQgaGFuZGxlZCBpbiBhICYjMzQ7YmVzdCBlZmZvcnQmIzM0OyBzdHlsZT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGRpZmZlcmVudCBldmVudCB0eXBlcyAoZS5nLiwgc2NhbiByZXN1bHRzLCBjb25uZWN0aW9uIHN0YXR1cyB1cGRhdGVzLCByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzKSBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgaXMgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgZXZlbnRzLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBgd2lwaHlgIHN0cnVjdHVyZXMgY29tZSBpbnRvIHBsYXksIGFzIHRoaXMgaXMgdGhlIGNlbnRyYWwgZGF0YSBzdHJ1Y3R1cmUgaW4gY2ZnODAyMTEgdGhhdCByZXByZXNlbnRzIHRoZSB3aXJlbGVzcyBkZXZpY2UsIGFuZCBuZWVkcyB0byBiZSBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz0xNDEwPXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NjQtXHQgKi9cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ2NTpcdGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMod2Rldik7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NjYtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD00ODE9dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dpcGh5X3dvcmtzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDgyLVx0XHRcdFx0ICBzdHJ1Y3Qgd2lwaHlfd29yayAqZW5kKTtcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDgzOnZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDg0LVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmM9MTE4MT12b2lkIGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyMDgtXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyMDk6dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyMTAte1xuLS1cbm5ldC93aXJlbGVzcy91dGlsLmM9MTI2NT12b2lkIGNmZzgwMjExX3Byb2Nlc3NfcmRldl9ldmVudHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMTI3MS1cdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyNzI6XHRcdGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMod2Rldik7XG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyNzMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGFgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGFgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGJlYWNvbiBpbnRlcnZhbCBkYXRhLCB3aGljaCBpcyBmdW5kYW1lbnRhbCBmb3IgV2ktRmkgY29tbXVuaWNhdGlvbiDigJMgZW5zdXJpbmcgZGV2aWNlcyBrbm93IHdoZW4gdG8gbGlzdGVuIGZvciBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgc3luY2hyb25pemUgdGhlaXIgdHJhbnNtaXNzaW9ucy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgYmVhY29uIGludGVydmFscywgRFRJTSBwZXJpb2RzLCBhbmQgcmVsYXRlZCBwYXJhbWV0ZXJzIGFyZSBpbnRlcmNvbm5lY3RlZCB3aXRoaW4gdGhlIGJyb2FkZXIgODAyLjExIGZyYW1ld29yay4gSSYjMzk7bSBpbW1lZGlhdGVseSBnb2luZyB0byBiZSBsb29raW5nIGZvcjoKCiogICAqKklucHV0IHBhcmFtZXRlcnM6KiogV2hhdCBkYXRhIGRvZXMgaXQgdGFrZSBhcyBpbnB1dD8gSSBleHBlY3QgdGhpbmdzIGxpa2UgY2hhbm5lbCBpbmZvcm1hdGlvbiwgc3VwcG9ydGVkIHJhdGVzLCBjYXBhYmlsaXRpZXMsIGFuZCBwb3RlbnRpYWxseSBzZXR0aW5ncyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgb3IgdmlydHVhbCBpbnRlcmZhY2VzIHRvIGJlIGNyaXRpY2FsLiBLbm93aW5nIHRoZSBpbnB1dCBjb250ZXh0IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYWxnb3JpdGhtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIG1lbnRhbGx5IHZhbGlkYXRlIHRoYXQgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cyBhcmUgY29ycmVjdGx5IHN1cHBsaWVkLgoqICAgKipDYWxjdWxhdGlvbnM6KiogV2hhdCBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBwZXJmb3JtZWQ/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGJlYWNvbiBpbnRlcnZhbCwgRFRJTSBwZXJpb2QsIGFuZCBvdGhlciByZWxhdGVkIGZpZWxkcyBhcmUgY2FsY3VsYXRlZCBhbmQgcG9wdWxhdGVkLCBhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgZGVyaXZlZCBmcm9tIGFueSBleHRlcm5hbCBjb25maWd1cmF0aW9uLiBBbHNvLCBhbnkgb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb25zIHdpbGwgYmUgaW4gbXkgZm9jdXMuCiogICAqKkVycm9yIGhhbmRsaW5nL0VkZ2UgY2FzZXM6KiogV2hhdCBkb2VzIGl0IGRvIGluIGFub21hbG91cyBzaXR1YXRpb25zPyBGb3IgZXhhbXBsZSwgd2hhdCBoYXBwZW5zIGlmIHRoZSBpbnB1dCBpcyBpbmNvbnNpc3RlbnQsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIHVuc3VwcG9ydGVkIHJhdGUgY29tYmluYXRpb24/IEhvdyBkb2VzIGl0IGhhbmRsZSB6ZXJvIHZhbHVlcyBvciB1bnJlYXNvbmFibGUgcmVxdWVzdHMgZm9yIGludGVydmFscz8gSG93IHJvYnVzdCBpcyB0aGUgbG9naWMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbmFsIG9yIHVuZXhwZWN0ZWQgaW5wdXQ/CiogICAqKlJldHVybiB2YWx1ZXMvU2lkZSBlZmZlY3RzOioqIFdoYXQgZG9lcyBpdCByZXR1cm4gb3IgbW9kaWZ5PyBJIGFzc3VtZSBpdCBtaWdodCBiZSByZXR1cm5pbmcgdGhlIGNhbGN1bGF0ZWQgYmVhY29uIGRhdGEgaW4gYSBzcGVjaWZpYyBzdHJ1Y3R1cmUuIEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIG9uIGFueSBnbG9iYWwgdmFyaWFibGVzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggYW55IG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIgb3Iga2VybmVsPwoqICAgKipPcHRpbWl6YXRpb24gR29hbHM6KiogSXMgdGhlcmUgYW55IHdvcmsgZG9uZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbj8KCkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBjb3JlIGxvZ2ljIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3Igb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJJiMzOTtsbCBwcm9iYWJseSBzdGVwIHRocm91Z2ggdGhlIGNvZGUgbWVudGFsbHksIG9yIHdpdGggYSBkZWJ1Z2dlciwgaWYgbmVlZGVkLCBtYWtpbmcgbm90ZXMgb24gYW55dGhpbmcgdGhhdCBzZWVtcyBub24tb2J2aW91cyBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBkZWJ1Z2dpbmcgYW55IHdpcmVsZXNzIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3V0aWwuYz0yNDYwPXN0YXRpYyBpbnQgY2ZnODAyMTFfd2Rldl9iaShzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMjQ3Ny1cbm5ldC93aXJlbGVzcy91dGlsLmM6MjQ3ODpzdGF0aWMgdm9pZCBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgbmV3X2JlYWNvbl9pbnQsXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTI0NzktXHRcdFx0XHQgICAgICAgdTMyICpiZWFjb25faW50X2djZCxcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jPTI1MjU9aW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMS1cdCAqIHRvIGNmZzgwMjExX2NoZWNrX2NvbWJpbmF0aW9ucygpLCBpbiB3aGljaCBjYXNlIHdlJiMzOTtsbCB2YWxpZGF0ZSBtb3JlXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjI1MzI6XHQgKiB0aHJvdWdoIHRoZSBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YSgpIGNhbGwgYW5kIGNvZGUgaW5cbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMy1cdCAqIGNmZzgwMjExX2l0ZXJfY29tYmluYXRpb25zKCkuXG4tLVxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNTQyPWludCBjZmc4MDIxMV9pdGVyX2NvbWJpbmF0aW9ucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy91dGlsLmMtMjU3MC1cdCAqL1xubmV0L3dpcmVsZXNzL3V0aWwuYzoyNTcxOlx0Y2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEod2lwaHksIHBhcmFtcy1cdTAwM2VuZXdfYmVhY29uX2ludCxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjU3Mi1cdFx0XHRcdCAgIFx1MDAyNmJlYWNvbl9pbnRfZ2NkLCBcdTAwMjZiZWFjb25faW50X2RpZmZlcmVudCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MTAKCQkJCQkJCW91dHB1dDogMzc1CgkJCQkJCQl0aG91Z2h0czogMTIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQcm9wb3NlZCBjZmc4MDIxMSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsIHdpdGhpbiB0aGUgYGNmZzgwMjExYCBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSB3aGVyZSB0aGlzIGNvZGUgaXMgY2FsbGVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGNmZzgwMjExX2l0ZXJfY29tYmluYXRpb25zYCBhbmQgb3RoZXIgY2FsbGVycyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGVuIEkmIzM5O2xsIG1ldGljdWxvdXNseSByZXZpZXcgdGhlIGNoYW5nZXMgdGhpcyBwYXRjaCBtYWtlcy4KCkZpcnN0LCB3aXRoaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCB0aGUgcGF0Y2ggcmVtb3ZlcyBzb21lIGBXQVJOX09OYCBjaGVja3MgaW4gYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWAgYW5kIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGAgLSBwcm9iYWJseSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHNlZSB3aHkgdGhlc2UgY2hlY2tzIHdlcmUgZGVlbWVkIHVubmVjZXNzYXJ5LiBJdCBhbHNvIGluaXRpYWxpemVzIGFuZCBmbHVzaGVzIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgaW4gdGhlIHJlZ2lzdGVyZWQgZGV2aWNlIGxpZmVjeWNsZS4KCmBuZXQvd2lyZWxlc3MvY29yZS5oYCBzaG93cyBzdHJ1Y3QgY2hhbmdlczogYWRkaW5nIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgdG8gYGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnRgLCBhbmQgYWRkaW5nIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdGhlIGBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZWAgc3RydWN0LiBBbHNvLCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiBmb3IgYGlqYCBub3cgaG9sZHMgYSBgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzYC4KCmBuZXQvd2lyZWxlc3MvaWJzcy5jYCBtb2RpZmllcyBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAgYW5kIGBjZmc4MDIxMV9pYnNzX2pvaW5lZGAgcmVsYXRlZCB0byBCU1MgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwYXNzaW5nIGEgQlNTIHBvaW50ZXIgYWNyb3NzIGV2ZW50cy4KCmBuZXQvd2lyZWxlc3MvcmRldi1vcHMuaGAgaGFzIHRoZSBgcmRldl9zY2FuYCBmdW5jdGlvbiBzZXR0aW5nIGBkcml2ZXJfb3duc2AgdG8gdHJ1ZSwgYW5kIGNsZWFyaW5nIGl0IG9uIGVycm9yLgoKYG5ldC93aXJlbGVzcy9yZWcuY2AgaW50cm9kdWNlcyBhc3luYyB3b3JrZXJzIGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgIGZvciByZWd1bGF0b3J5IGNoYW5uZWwvTkFOIGxlYXZlcywgYW5kIGByZWdfY2hlY2tfY2hhbnNfd29ya2AgdG8gcXVldWUgYHJlZ19jaGVja19jaGFuc193a2AgZm9yIGFsbCByZGV2cyB1bmRlciBSQ1UuIEl0IGFsc28gdXNlcyBgd2Rldl9ydW5uaW5nKHdkZXYpYCBpbiBgcmVnX3dkZXZfY2hhbl92YWxpZGAuCgpgbmV0L3dpcmVsZXNzL3NjYW4uY2AgY29uY2VybnMgaXRzZWxmIHdpdGggdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2Ygc2NhbiByZXF1ZXN0cyB2aWEgYHN0YWxlYCBhbmQgYGRyaXZlcl9vd25zYCBpbiBgY2ZnODAyMTFfcHV0X3NjYW5fcmVxYCwgYF9fX2NmZzgwMjExX3NjYW5fZG9uZWAsIGFuZCBgY2ZnODAyMTFfc2Nhbl9kb25lYC4gVGhlIHBhdGNoIGFsc28gdmFsaWRhdGVzIGJlYWNvbiBkYXRhIGZvciBoaWRkZW4gQlNTIHZpYSBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhbmQgc2ltcGxpZmllcyBhIGNoZWNrIGluIGBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5YC4KCkZpbmFsbHksIGBuZXQvd2lyZWxlc3MvdXRpbC5jYCB1c2VzIGBza2JfaGVhZGVyX3BvaW50ZXJgIHNhZmVseSBhY2Nlc3MgcGFja2V0IGhlYWRlcnMgaW4gYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgLCBoYW5kbGVzIGFuIHVwZGF0ZWQgYEVWRU5UX0lCU1NfSk9JTkVEYCB3aXRoIHRoZSBCU1MgcG9pbnRlciBpbiBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2AsIGFuZCBmaXhlcyBiZWFjb24gaW50ZXJ2YWwgY2FsY3VsYXRpb24gaW4gYGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdpdGhpbiBhIGZ1enppbmcgY29udGV4dCBsaWtlIFFFTVUgYW5kIHN5emthbGxlci4gU2luY2UgYGNmZzgwMjExYCBpcyB0aGUgY29yZSwgYW5kIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIG5sODAyMTEgc29ja2V0cywgbWFjODAyMTEvbWFjODAyMTFfaHdzaW0sIHdpcmVsZXNzIGV4dGVuc2lvbnMsIHBhY2tldCBzb2NrZXRzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBpcyBrbm93biB0byB0YXJnZXQgbmw4MDIxMSBleHRlbnNpdmVseS4KCk5leHQsIHRoZSBjb25maWd1cmF0aW9ucyBhcmUga2V5LiBXZSBuZWVkIGBDRkc4MDIxMWAsIG9idmlvdXNseS4gV2UgYWxzbyBuZWVkIGBNQUM4MDIxMV9IV1NJTWAgYW5kIG9yIGBOTDgwMjExYC4gSSYjMzk7bGwgY29uZmlybSB0aGF0IGBDRkc4MDIxMWAgZG9lc24mIzM5O3QgcmVxdWlyZSBhbnl0aGluZyBlbHNlLCBidXQgSSBzYXcgYSBtZW50aW9uIG9mIGBDRkc4MDIxMV9XRVhUYCBpbiBgaWJzcy5jYCwgc28gSSYjMzk7bGwgaW5jbHVkZSBpdC4gU28sIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgc2hvdWxkIGJlIHRoZSBjb25maWd1cmF0aW9ucyB0byBpbmNsdWRlLgoKTm93IGZvciB0aGUgdGFyZ2V0ZWQgc3ltYm9sczogV2Ugc2hvdWxkIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIG1vZGlmaWVkIG9yIG5ld2x5IGltcGxlbWVudGVkIGZ1bmN0aW9uczogYGNmZzgwMjExX3NjYW5fZG9uZWAsIGBfX19jZmc4MDIxMV9zY2FuX2RvbmVgLCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgLCBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCwgYHJlZ19jaGVja18KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NmZzgwMjExX3NjYW5fZG9uZSYjMzQ7LAogICAgJiMzNDtfX19jZmc4MDIxMV9zY2FuX2RvbmUmIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2smIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfbmFuX3drJiMzNDssCiAgICAmIzM0O3JlZ19jaGVja19jaGFuc193b3JrJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX2lic3Nfam9pbmVkJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfaWJzc19qb2luZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfY2xhc3NpZnk4MDIxZCYjMzQ7LAogICAgJiMzNDtfX2NmZzgwMjExX2Jzc191cGRhdGUmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2UmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTFfc2Nhbl9kb25lJiMzNDssCiAgICAmIzM0O19fX2NmZzgwMjExX3NjYW5fZG9uZSYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2smIzM0OywKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5zX3dvcmsmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfaWJzc19qb2luZWQmIzM0OywKICAgICYjMzQ7X19jZmc4MDIxMV9pYnNzX2pvaW5lZCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9jbGFzc2lmeTgwMjFkJiMzNDssCiAgICAmIzM0O19fY2ZnODAyMTFfYnNzX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3N0b3BfcDJwX2RldmljZSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBwYWNrZXQgcGFyc2luZyBhY3Jvc3MgY2ZnODAyMTE6XG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxuMy4gSUJTUyBldmVudCBoYW5kbGluZzogUGFzc2VzIEJTUyByZWZlcmVuY2VzIGRpcmVjdGx5IHRvIGV2ZW50IHByb2Nlc3NpbmcgcmF0aGVyIHRoYW4gcmUtbG9va2luZyB0aGVtIHVwOyBhbGwgZXZlbnQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHByb3Blcmx5IG1hbmFnZWQuXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmM2NzE1ZTAxZWQwNzFiYjE2NDQxMTkzYjRjZDc1YzU0N2JkMmI2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDE6NTA6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBkMTMzMTBmZWY2OTFhLi42NjgzODBkZWVjN2RhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTI0NCw5ICYjNDM7MjQ0LDggQEAgdm9pZCBjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJkZXYtJmd0O29wZW5jb3VudC0tOwogCiAJaWYgKHJkZXYtJmd0O3NjYW5fcmVxICZhbXA7JmFtcDsgcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O3JlcS53ZGV2ID09IHdkZXYpIHsKLQkJaWYgKFdBUk5fT04oIXJkZXYtJmd0O3NjYW5fcmVxLSZndDtub3RpZmllZCAmYW1wOyZhbXA7Ci0JCQkgICAgKCFyZGV2LSZndDtpbnRfc2Nhbl9yZXEgfHwKLQkJCSAgICAgIXJkZXYtJmd0O2ludF9zY2FuX3JlcS0mZ3Q7bm90aWZpZWQpKSkKJiM0MzsJCWlmICghcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIXJkZXYtJmd0O2ludF9zY2FuX3JlcSB8fCAhcmRldi0mZ3Q7aW50X3NjYW5fcmVxLSZndDtub3RpZmllZCkpCiAJCQlyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7aW5mby5hYm9ydGVkID0gdHJ1ZTsKIAkJX19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTsKIAl9CkBAIC02NDYsNiAmIzQzOzY0NSw4IEBAIHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LAogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O2Rlc3Ryb3lfd29yaywgY2ZnODAyMTFfZGVzdHJveV9pZmFjZV93ayk7CiAJd2lwaHlfd29ya19pbml0KCZhbXA7cmRldi0mZ3Q7c2NoZWRfc2Nhbl9zdG9wX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Bfd2spOwogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O3NjaGVkX3NjYW5fcmVzX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHNfd2spOwomIzQzOwl3aXBoeV93b3JrX2luaXQoJmFtcDtyZGV2LSZndDtyZWdfY2hlY2tfY2hhbnNfd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7cmRldi0mZ3Q7cmVnX2xlYXZlX25hbl93aywgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKTsKIAlJTklUX1dPUksoJmFtcDtyZGV2LSZndDtwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLAogCQkgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spOwogCUlOSVRfV09SSygmYW1wO3JkZXYtJmd0O3Byb3BhZ2F0ZV9jYWNfZG9uZV93aywgY2ZnODAyMTFfcHJvcGFnYXRlX2NhY19kb25lX3drKTsKQEAgLTEzNDUsNiAmIzQzOzEzNDYsNyBAQCB2b2lkIHdpcGh5X3VucmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtyZGV2LSZndDtkZnNfdXBkYXRlX2NoYW5uZWxzX3drKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtyZGV2LSZndDtiYWNrZ3JvdW5kX2NhY19kb25lX3drKTsKIAlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7ZGVzdHJveV93b3JrKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3JkZXYtJmd0O3JlZ19sZWF2ZV9uYW5fd2spOwogCWZsdXNoX3dvcmsoJmFtcDtyZGV2LSZndDtwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drKTsKIAlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7cHJvcGFnYXRlX2NhY19kb25lX3drKTsKIAlmbHVzaF93b3JrKCZhbXA7cmRldi0mZ3Q7bWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7CkBAIC0xNzU4LDkgJiM0MzsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCQl3aXBoeV9sb2NrKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwogCQljZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtJmd0O2lmdHlwZSwgLTEpOwogCQlpZiAocmRldi0mZ3Q7c2Nhbl9yZXEgJmFtcDsmYW1wOyByZGV2LSZndDtzY2FuX3JlcS0mZ3Q7cmVxLndkZXYgPT0gd2RldikgewotCQkJaWYgKFdBUk5fT04oIXJkZXYtJmd0O3NjYW5fcmVxLSZndDtub3RpZmllZCAmYW1wOyZhbXA7Ci0JCQkJICAgICghcmRldi0mZ3Q7aW50X3NjYW5fcmVxIHx8Ci0JCQkJICAgICAhcmRldi0mZ3Q7aW50X3NjYW5fcmVxLSZndDtub3RpZmllZCkpKQomIzQzOwkJCWlmICghcmRldi0mZ3Q7c2Nhbl9yZXEtJmd0O25vdGlmaWVkICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgKCFyZGV2LSZndDtpbnRfc2Nhbl9yZXEgfHwKJiM0MzsJCQkgICAgICFyZGV2LSZndDtpbnRfc2Nhbl9yZXEtJmd0O25vdGlmaWVkKSkKIAkJCQlyZGV2LSZndDtzY2FuX3JlcS0mZ3Q7aW5mby5hYm9ydGVkID0gdHJ1ZTsKIAkJCV9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtMjQsNiAmIzQzOzI0LDE2IEBACiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7CiAJc3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvOwogCWJvb2wgbm90aWZpZWQ7CiYjNDM7CS8qCiYjNDM7CSAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuCiYjNDM7CSAqIHJkZXZfc2NhbigpIGFuZCBjZmc4MDIxMV9zY2FuX2RvbmUoKQomIzQzOwkgKi8KJiM0MzsJYm9vbCBkcml2ZXJfb3duczsKJiM0MzsJLyoKJiM0MzsJICogc2V0IHdoZW4gY2ZnODAyMTEgaXMgZG9uZSB3aXRoIHRoZSByZXF1ZXN0IGJ1dCB0aGUgZHJpdmVyIHN0aWxsCiYjNDM7CSAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0CiYjNDM7CSAqLwomIzQzOwlib29sIHN0YWxlOwogCS8qIG11c3QgYmUgbGFzdCAtIHZhcmlhYmxlIG1lbWJlcnMgKi8KIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHJlcTsKIH07CkBAIC0xMDQsNiAmIzQzOzExNCw4IEBAIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yazsKIAlzdHJ1Y3Qgd2lwaHlfd29yayBzY2hlZF9zY2FuX3N0b3Bfd2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkX3NjYW5fcmVzX3drOwomIzQzOwlzdHJ1Y3Qgd2lwaHlfd29yayByZWdfY2hlY2tfY2hhbnNfd2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZWdfbGVhdmVfbmFuX3drOwogCiAJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHJhZGFyX2NoYW5kZWY7CiAJc3RydWN0IHdvcmtfc3RydWN0IHByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2s7CkBAIC0yODAsOCAmIzQzOzI5Miw3IEBAIHN0cnVjdCBjZmc4MDIxMV9ldmVudCB7CiAJCQlib29sIGxvY2FsbHlfZ2VuZXJhdGVkOwogCQl9IGRjOwogCQlzdHJ1Y3QgewotCQkJdTggYnNzaWRbRVRIX0FMRU5dOwotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwomIzQzOwkJCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKIAkJfSBpajsKIAkJc3RydWN0IHsKIAkJCXU4IHBlZXJfYWRkcltFVEhfQUxFTl07CkBAIC0zNDQsOCAmIzQzOzM1NSw3IEBAIGludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpOwogaW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpOwotdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwomIzQzO3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOwogaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmMKaW5kZXggYjFkNzQ4YmRiNTA0ZS4uN2Y2Nzc5ZDMyNmI4MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvaWJzcy5jCkBAIC0xNiwyNiAmIzQzOzE2LDE4IEBACiAjaW5jbHVkZSAmIzM0O3JkZXYtb3BzLmgmIzM0OwogCiAKLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQomIzQzO3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKLQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAjZW5kaWYKIAogCWlmIChXQVJOX09OKHdkZXYtJmd0O2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCi0JCXJldHVybjsKJiM0MzsJCWdvdG8gcHV0X2JzczsKIAogCWlmICghd2Rldi0mZ3Q7dS5pYnNzLnNzaWRfbGVuKQotCQlyZXR1cm47Ci0KLQlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCwKLQkJCSAgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfSUJTUywgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKLQotCWlmIChXQVJOX09OKCFic3MpKQotCQlyZXR1cm47CiYjNDM7CQlnb3RvIHB1dF9ic3M7CiAKIAlpZiAod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKSB7CiAJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKTsKQEAgLTQzLDE3ICYjNDM7MzUsMjIgQEAgdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKIAl9CiAKIAljZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7CiYjNDM7CS8qIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgZXZlbnQgaXMgdHJhbnNmZXJyZWQgdG8gY3VycmVudF9ic3MgKi8KIAl3ZGV2LSZndDt1Lmlic3MuY3VycmVudF9ic3MgPSBic3NfZnJvbV9wdWIoYnNzKTsKIAogCWNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMod2Rldik7CiAKLQlubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtJmd0O3dpcGh5KSwgZGV2LCBic3NpZCwKJiM0MzsJbmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LSZndDt3aXBoeSksIGRldiwgYnNzLSZndDtic3NpZCwKIAkJCQlHRlBfS0VSTkVMKTsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVAogCW1lbXNldCgmYW1wO3dycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOwomIzQzOwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0mZ3Q7YnNzaWQsIEVUSF9BTEVOKTsKIAl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmYW1wO3dycXUsIE5VTEwpOwogI2VuZGlmCiYjNDM7CXJldHVybjsKJiM0MzsKJiM0MztwdXRfYnNzOgomIzQzOwljZmc4MDIxMV9wdXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBic3MpOwogfQogCiB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKQEAgLTYyLDYgJiM0Mzs1OSw3IEBAIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtJmd0O2llZWU4MDIxMV9wdHI7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3ZGV2LSZndDt3aXBoeSk7CiAJc3RydWN0IGNmZzgwMjExX2V2ZW50ICpldjsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl0cmFjZV9jZmc4MDIxMV9pYnNzX2pvaW5lZChkZXYsIGJzc2lkLCBjaGFubmVsKTsKQEAgLTY5LDEzICYjNDM7NjcsMTkgQEAgdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCiAJaWYgKFdBUk5fT04oIWNoYW5uZWwpKQogCQlyZXR1cm47CiAKJiM0MzsJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LSZndDt3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpOwomIzQzOwlpZiAoV0FSTl9PTighYnNzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlldiA9IGt6YWxsb2Nfb2JqKCpldiwgZ2ZwKTsKLQlpZiAoIWV2KQomIzQzOwlpZiAoIWV2KSB7CiYjNDM7CQljZmc4MDIxMV9wdXRfYnNzKHdkZXYtJmd0O3dpcGh5LCBic3MpOwogCQlyZXR1cm47CiYjNDM7CX0KIAogCWV2LSZndDt0eXBlID0gRVZFTlRfSUJTU19KT0lORUQ7Ci0JbWVtY3B5KGV2LSZndDtpai5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQlldi0mZ3Q7aWouY2hhbm5lbCA9IGNoYW5uZWw7CiYjNDM7CWV2LSZndDtpai5ic3MgPSBic3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3dkZXYtJmd0O2V2ZW50X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7ZXYtJmd0O2xpc3QsICZhbXA7d2Rldi0mZ3Q7ZXZlbnRfbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLmFkY2ZkMDI3OGRhMzIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCkBAIC00NjQsNyAmIzQzOzQ2NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCByZGV2X3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXRyYWNlX3JkZXZfc2NhbigmYW1wO3JkZXYtJmd0O3dpcGh5LCByZXF1ZXN0KTsKJiM0MzsJcmVxdWVzdC0mZ3Q7ZHJpdmVyX293bnMgPSB0cnVlOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7c2NhbigmYW1wO3JkZXYtJmd0O3dpcGh5LCAmYW1wO3JlcXVlc3QtJmd0O3JlcSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXF1ZXN0LSZndDtkcml2ZXJfb3ducyA9IGZhbHNlOwogCXRyYWNlX3JkZXZfcmV0dXJuX2ludCgmYW1wO3JkZXYtJmd0O3dpcGh5LCByZXQpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggYTgzMzZiYWY4NWRjNi4uMTE2NjVlMGE3ZWZjOCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtMjM0NSw3ICYjNDM7MjM0NSw3IEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAlpZnR5cGUgPSB3ZGV2LSZndDtpZnR5cGU7CiAKIAkvKiBtYWtlIHN1cmUgdGhlIGludGVyZmFjZSBpcyBhY3RpdmUgKi8KLQlpZiAoIXdkZXYtJmd0O25ldGRldiB8fCAhbmV0aWZfcnVubmluZyh3ZGV2LSZndDtuZXRkZXYpKQomIzQzOwlpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKiBOQU4gZG9lc24mIzM5O3QgaGF2ZSBsaW5rcywgaGFuZGxlIGl0IHNlcGFyYXRlbHkgKi8KQEAgLTI0NDYsMTkgJiM0MzsyNDQ2LDUyIEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSkKJiM0Mzt2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpOwomIzQzOwomIzQzOwlyZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwKJiM0MzsJCQkgICAgcmVnX2xlYXZlX25hbl93ayk7CiYjNDM7CiYjNDM7CS8qIHN0b3BwaW5nIE5BTiBjbG9zZXMgaXRzIGRhdGEgaW50ZXJmYWNlcywgd2hpY2ggbmVlZHMgdGhlIFJUTkwgKi8KJiM0MzsJcnRubF9sb2NrKCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZhbXA7cmRldi0mZ3Q7d2lwaHkud2Rldl9saXN0LCBsaXN0KSB7CiAJCWJvb2wgdmFsaWQ7CiAKLQkJc2NvcGVkX2d1YXJkKHdpcGh5LCB3aXBoeSkKLQkJCXZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7CiYjNDM7CQlpZiAod2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNjb3BlZF9ndWFyZCh3aXBoeSwgJmFtcDtyZGV2LSZndDt3aXBoeSkKJiM0MzsJCQl2YWxpZCA9IHJlZ193ZGV2X2NoYW5fdmFsaWQoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2Rldik7CiAJCWlmICghdmFsaWQpCiAJCQljZmc4MDIxMV9sZWF2ZShyZGV2LCB3ZGV2LCAtMSk7CiAJfQomIzQzOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt3aXBoeS0mZ3Q7bXR4KTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmYW1wO3JkZXYtJmd0O3dpcGh5LndkZXZfbGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRlYXJpbmcgZG93biBOQU4gbmVlZHMgdGhlIFJUTkwgZm9yIGNsb3NpbmcgTkFOX0RBVEEKJiM0MzsJCSAqIGludGVyZmFjZXMsIGhhbmRsZSB0aGF0IHNlcGFyYXRlbHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh3ZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKQomIzQzOwkJCXNjaGVkdWxlX3dvcmsoJmFtcDtyZGV2LSZndDtyZWdfbGVhdmVfbmFuX3drKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljZmc4MDIxMV9sZWF2ZV9sb2NrZWQocmRldiwgd2RldiwgLTEpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTI0NjYsMTIgJiM0MzsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAKIAlwcl9kZWJ1ZygmIzM0O1ZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXG4mIzM0Oyk7Ci0JcnRubF9sb2NrKCk7CiAKLQlmb3JfZWFjaF9yZGV2KHJkZXYpCi0JCXJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAKLQlydG5sX3VubG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCAmYW1wO2NmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkKJiM0MzsJCXdpcGh5X3dvcmtfcXVldWUoJmFtcDtyZGV2LSZndDt3aXBoeSwgJmFtcDtyZGV2LSZndDtyZWdfY2hlY2tfY2hhbnNfd2spOwomIzQzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCBmYzMxYzVmOWE2MWFiLi5jNTg3MDc5ZWFkOGZiIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC0xNzgsNiAmIzQzOzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTsKICAqLwogdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZCk7CiAKJiM0MzsvKioKJiM0MzsgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayAtIGNoZWNrIGlmIGNoYW5uZWxzIGFyZSBubyBsb25nZXIgdXNhYmxlIGFuZCBsZWF2ZQomIzQzOyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrCiYjNDM7ICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdAomIzQzOyAqLwomIzQzO3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGUKJiM0MzsgKiBAd29yazogdGhlIHdvcmsgc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb20KJiM0MzsgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOwogZXh0ZXJuIGNvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc2hpcHBlZF9yZWdkYl9jZXJ0c19sZW47CiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCmluZGV4IDllOTM0YjE4NWUzNDEuLmNhYTljNjQ5NWYyMGMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMTExNCw2ICYjNDM7MTExNCwyMSBAQCBpbnQgY2ZnODAyMTFfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgdGhlIHNjYW4gcmVxdWVzdCwgYnV0IGZyZWUgaXQgb25seSBpZiB0aGUgZHJpdmVyIGlzIGFsc28gZG9uZSwKJiM0MzsgKiBlLmcuIG1hYzgwMjExIG1heSBjYW5jZWwgaXQgYXN5bmNocm9ub3VzbHkgYW5kIHN0aWxsIHVzZSBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBjZmc4MDIxMV9wdXRfc2Nhbl9yZXEoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKnJlcSkKJiM0Mzt7CiYjNDM7CWlmICghcmVxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocmVxLSZndDtkcml2ZXJfb3ducykKJiM0MzsJCXJlcS0mZ3Q7c3RhbGUgPSB0cnVlOwomIzQzOwllbHNlCiYjNDM7CQlrZnJlZShyZXEpOwomIzQzO30KJiM0MzsKIHZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgIGJvb2wgc2VuZF9tZXNzYWdlKQogewpAQCAtMTE3MywxMCAmIzQzOzExODgsMTAgQEAgdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCiAJZGV2X3B1dCh3ZGV2LSZndDtuZXRkZXYpOwogCi0Ja2ZyZWUocmRldi0mZ3Q7aW50X3NjYW5fcmVxKTsKJiM0MzsJY2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtJmd0O2ludF9zY2FuX3JlcSk7CiAJcmRldi0mZ3Q7aW50X3NjYW5fcmVxID0gTlVMTDsKIAotCWtmcmVlKHJkZXYtJmd0O3NjYW5fcmVxKTsKJiM0MzsJY2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtJmd0O3NjYW5fcmVxKTsKIAlyZGV2LSZndDtzY2FuX3JlcSA9IE5VTEw7CiAKIAlpZiAoIXNlbmRfbWVzc2FnZSkKQEAgLTExOTksNiAmIzQzOzEyMTQsMTggQEAgdm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCwKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIG9sZF9pbmZvID0gaW50cmVxLSZndDtpbmZvOwogCiAJdHJhY2VfY2ZnODAyMTFfc2Nhbl9kb25lKGludHJlcSwgaW5mbyk7CiYjNDM7CiYjNDM7CWludHJlcS0mZ3Q7ZHJpdmVyX293bnMgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGludHJlcS0mZ3Q7c3RhbGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgc2NhbiBpcyBhbHJlYWR5IGNvbXBsZXRlZCBhcyBmYXIgYXMgd2UmIzM5O3JlIGNvbmNlcm5lZCwKJiM0MzsJCSAqIGl0IHdhcyBqdXN0IGtlcHQgYXJvdW5kIGZvciB0aGUgZHJpdmVyIC0gZG9uZSBub3csIGZyZWUgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWtmcmVlKGludHJlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlXQVJOX09OKGludHJlcSAhPSByZGV2LSZndDtzY2FuX3JlcSAmYW1wOyZhbXA7CiAJCWludHJlcSAhPSByZGV2LSZndDtpbnRfc2Nhbl9yZXEpOwogCkBAIC0yMDUwLDYgJiM0MzsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQlpZiAoIWhpZGRlbikKIAkJCQloaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsCiAJCQkJCQkgICAgIEJTU19DTVBfSElERV9OVUwpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogT25seSBncm91cCB3aXRoIGFuIGVudHJ5IHdpdGggYmVhY29uIGRhdGEsIG90aGVyd2lzZQomIzQzOwkJCSAqIGJlYWNvbiBkYXRhIGNhbiBuZXZlciBiZSBmaWxsZWQvdXBkYXRlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGlkZGVuICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tJmd0O3B1Yi5iZWFjb25faWVzKSkKJiM0MzsJCQkJaGlkZGVuID0gTlVMTDsKIAkJCWlmIChoaWRkZW4pIHsKIAkJCQluZXctJmd0O3B1Yi5oaWRkZW5fYmVhY29uX2JzcyA9ICZhbXA7aGlkZGVuLSZndDtwdWI7CiAJCQkJbGlzdF9hZGQoJmFtcDtuZXctJmd0O2hpZGRlbl9saXN0LApAQCAtMzQ2OCwxMSAmIzQzOzM1MDIsNiBAQCB2b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAljYnNzLSZndDtwdWIuY2hhbm5lbCA9IGNoYW47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmFtcDtyZGV2LSZndDtic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoIWNmZzgwMjExX2Jzc190eXBlX21hdGNoKGJzcy0mZ3Q7cHViLmNhcGFiaWxpdHksCi0JCQkJCSAgICAgYnNzLSZndDtwdWIuY2hhbm5lbC0mZ3Q7YmFuZCwKLQkJCQkJICAgICB3ZGV2LSZndDtjb25uX2Jzc190eXBlKSkKLQkJCWNvbnRpbnVlOwotCiAJCWlmIChic3MgPT0gY2JzcykKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCAzZTU4NGQwY2EzZTI2Li5mMjQ2NGQyY2UwZDVhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTEwMzksMTIgJiM0MzsxMDM5LDMwIEBAIHVuc2lnbmVkIGludCBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKHN0cnVjdCBza19idWZmICpza2IsCiAJfQogCiAJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUCk6Ci0JCWRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcihza2IpKSAmYW1wOyAweGZjOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQKTogewomIzQzOwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiYjNDM7CQlzdHJ1Y3QgaXBoZHIgX2lwaDsKJiM0MzsKJiM0MzsJCWlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKJiM0MzsJCQkJCSBzaXplb2YoKmlwaCksICZhbXA7X2lwaCk7CiYjNDM7CQlpZiAoIWlwaCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgJmFtcDsgMHhmYzsKIAkJYnJlYWs7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKLQkJZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSkgJmFtcDsgMHhmYzsKJiM0MzsJfQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyIF9pcDZoOwomIzQzOwomIzQzOwkJaXA2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKJiM0MzsJCQkJCSAgc2l6ZW9mKCppcDZoKSwgJmFtcDtfaXA2aCk7CiYjNDM7CQlpZiAoIWlwNmgpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQlkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKSAmYW1wOyAweGZjOwogCQlicmVhazsKJiM0MzsJfQogCWNhc2UgaHRvbnMoRVRIX1BfTVBMU19VQyk6CiAJY2FzZSBodG9ucyhFVEhfUF9NUExTX01DKTogewogCQlzdHJ1Y3QgbXBsc19sYWJlbCBtcGxzX3RtcCwgKm1wbHM7CkBAIC0xMjE3LDggJiM0MzsxMjM1LDcgQEAgdm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCiAJCQkJCQkhZXYtJmd0O2RjLmxvY2FsbHlfZ2VuZXJhdGVkKTsKIAkJCWJyZWFrOwogCQljYXNlIEVWRU5UX0lCU1NfSk9JTkVEOgotCQkJX19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LSZndDtuZXRkZXYsIGV2LSZndDtpai5ic3NpZCwKLQkJCQkJICAgICAgIGV2LSZndDtpai5jaGFubmVsKTsKJiM0MzsJCQlfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtJmd0O25ldGRldiwgZXYtJmd0O2lqLmJzcyk7CiAJCQlicmVhazsKIAkJY2FzZSBFVkVOVF9TVE9QUEVEOgogCQkJLyoKQEAgLTI0NzcsMTYgJiM0MzsyNDk0LDE1IEBAIHN0YXRpYyB2b2lkIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBuZXdfYmVhY29uX2ludCwKIAkJaWYgKHdkZXYtJmd0O3ZhbGlkX2xpbmtzKQogCQkJY29udGludWU7CiAKJiM0MzsJCXdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpOwomIzQzOwkJaWYgKCF3ZGV2X2JpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQkvKiBza2lwIHdkZXZzIG5vdCBhY3RpdmUgb24gdGhlIGdpdmVuIHdpcGh5IHJhZGlvICovCiAJCWlmIChyYWRpb19pZHggJmd0Oz0gMCAmYW1wOyZhbXA7CiAJCSAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi0mZ3Q7bmV0ZGV2KSAmYW1wOyBCSVQocmFkaW9faWR4KSkpCiAJCQljb250aW51ZTsKIAotCQl3ZGV2X2JpID0gY2ZnODAyMTFfd2Rldl9iaSh3ZGV2KTsKLQotCQlpZiAoIXdkZXZfYmkpCi0JCQljb250aW51ZTsKLQogCQlpZiAoISpiZWFjb25faW50X2djZCkgewogCQkJKmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTsKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBkaWZmLgoKSSYjMzk7bSBzZWVpbmcgYSBudW1iZXIgb2YgY2hhbmdlcywgYW5kIG15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyB0aGUgd2lyZWxlc3MgY29yZSBpcyBiZWluZyB0b3VjaGVkIGhlYXZpbHkuIFRoZSBtb3N0IGludGVyZXN0aW5nIGFyZWFzIGFyZSBsaWtlbHkgdGhvc2UgdGhhdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBhc3BlY3RzOgoKMS4gICoqRGF0YSBTdHJ1Y3R1cmUgQ2hhbmdlczoqKiBUaGUgYWRkaXRpb24gb2YgYGRyaXZlcl9vd25zYCwgYHN0YWxlYCwgYHJlZ19jaGVja19jaGFuc193a2AsIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdmFyaW91cyBzdHJ1Y3RzIGlzIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBhcmUgcG9zc2libGUuIFRoZSBjaGFuZ2VzIHRvIGBjZmc4MDIxMV9ldmVudGAgYW5kIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHRoZSBhbGxvY2F0aW9uIG9mIGBic3NgIGFuZCB0aGUgcmVmZXJlbmNlIGhhbmRsaW5nLiBBbnkgdGltZSBhIGBic3NgIGlzIG1hbmlwdWxhdGVkLCBJJiMzOTttIGFscmVhZHkgY2F1dGlvdXMuCgoyLiAgKipXb3JrcXVldWUgSW50cm9kdWN0aW9uczoqKiBUaGUgaW50cm9kdWN0aW9uIG9mIHdvcmtxdWV1ZXMgKGByZWdfY2hlY2tfY2hhbnNfd2tgLCBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYCkgYWx3YXlzIGRlbWFuZHMgc2NydXRpbnkuIFdvcmtxdWV1ZXMgb2Z0ZW4gaW52b2x2ZSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhbmQgY2FuIGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIExvY2tpbmcgaW1wcm92ZW1lbnRzIGFyZSBnb29kLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXkgYXJlIGNvcnJlY3QgYW5kIHJvYnVzdC4KCjMuICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEkgbmVlZCB0byBjbG9zZWx5IGludmVzdGlnYXRlIGBjZmc4MDIxMV9wdXRfc2Nhbl9yZXFgICh3aXRoIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWApIGFuZCBlbnN1cmUgc2NhbiByZXF1ZXN0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHksIGF2b2lkaW5nIG1lbW9yeSBsZWFrcyBvciBkb3VibGUtZnJlZXMuCgo0LiAgKipgc2tiX2hlYWRlcl9wb2ludGVyYCBVc2FnZToqKiBUaGUgdXNhZ2Ugb2YgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW4gYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgIGlzIGEgcHJpbWUgc3VzcGVjdC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBwYXJ0aWN1bGFybHkgc2luY2UgaXQgaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20gdGhlIFNLQi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzIHByb3Blcmx5IHNpemVkIGFuZCB0aGF0IHRoZSBjb3B5IGRvZXNuJiMzOTt0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBTS0IsIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy4gSSBrbm93IHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBkZXRhaWxzLiBIb3dldmVyLCBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgYWZ0ZXIgdGhlIGBza2JfaGVhZGVyX3BvaW50ZXJgIGNhbGwuIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBsb29rIGF0IGxpbmUgMTAzOSBpbiBgbmV0L3dpcmVsZXNzL3V0aWwuY2AuIFRoaXMgaXMgbXkgcHJpbWFyeSBhcmVhIG9mIGNvbmNlcm4gYmVjYXVzZSBpdCBpcyB0b3VjaGluZyBtZW1vcnkuCgo1LiAqKldBUk5fT04gcmVtb3ZhbHM6KiogV2hpbGUgdGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgcmVtb3ZpbmcgYFdBUk5fT05gIHN0YXRlbWVudHMgaXMgYWxzbyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhdHRlbnRpb24uIFdBUk5fT04gc3RhdGVtZW50cyBhcmUgZ2VuZXJhbGx5IHRoZXJlIGZvciBhIHJlYXNvbiwgbmFtZWx5IHRvIHN0b3AgdGhpbmdzIGZyb20gcHJvY2VlZGluZyB0aGF0IHRoZSBkZXZlbG9wZXIgZGlkbiYjMzk7dCBleHBlY3QgdG8gaGFwcGVuLiBXaXRob3V0IGl0LCB5b3UgYXJlIG1vcmUgbGlrZWx5IHRvIHJ1biBpbnRvIHVuZGVmaW5lZCBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZXNlIGFyZWFzLiBJIHdpbGwgc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIEJhc2VkIG9uIG15IGZpbmRpbmdzIGZyb20gdGhpcyBtb3JlIGluLWRlcHRoIGFuYWx5c2lzLCBJIHdpbGwgbWFrZSB0aGUgZmluYWwgZGVjaXNpb24gYWJvdXQgc3Bpbm5pbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy91dGlsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzA6XHRcdH1cbjEwMzE6XHRcbjEwMzI6XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4xMDMzOlx0XHRcdHZsYW5fcHJpb3JpdHkgPSAoc2tiX3ZsYW5fdGFnX2dldChza2IpIFx1MDAyNiBWTEFOX1BSSU9fTUFTSylcbjEwMzQ6XHRcdFx0XHRcdTAwM2VcdTAwM2UgVkxBTl9QUklPX1NISUZUO1xuMTAzNTpcdFx0XHRpZiAodmxhbl9wcmlvcml0eSBcdTAwM2UgMCkge1xuMTAzNjpcdFx0XHRcdHJldCA9IHZsYW5fcHJpb3JpdHk7XG4xMDM3Olx0XHRcdFx0Z290byBvdXQ7XG4xMDM4Olx0XHRcdH1cbjEwMzk6XHRcdH1cbjEwNDA6XHRcbjEwNDE6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4xMDQyOlx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xuMTA0MzpcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbjEwNDQ6XHRcdFx0c3RydWN0IGlwaGRyIF9pcGg7XG4xMDQ1Olx0XG4xMDQ2Olx0XHRcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcbjEwNDc6XHRcdFx0XHRcdFx0IHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4xMDQ4Olx0XHRcdGlmICghaXBoKVxuMTA0OTpcdFx0XHRcdHJldHVybiAwO1xuMTA1MDpcdFxuMTA1MTpcdFx0XHRkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcGgpIFx1MDAyNiAweGZjO1xuMTA1MjpcdFx0XHRicmVhaztcbjEwNTM6XHRcdH1cbjEwNTQ6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHtcbjEwNTU6XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmg7XG4xMDU2Olx0XHRcdHN0cnVjdCBpcHY2aGRyIF9pcDZoO1xuMTA1NzpcdFxuMTA1ODpcdFx0XHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuMTA1OTpcdFx0XHRcdFx0XHQgIHNpemVvZigqaXA2aCksIFx1MDAyNl9pcDZoKTtcbjEwNjA6XHRcdFx0aWYgKCFpcDZoKVxuMTA2MTpcdFx0XHRcdHJldHVybiAwO1xuMTA2MjpcdFxuMTA2MzpcdFx0XHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKSBcdTAwMjYgMHhmYztcbjEwNjQ6XHRcdFx0YnJlYWs7XG4xMDY1Olx0XHR9XG4xMDY2Olx0XHRjYXNlIGh0b25zKEVUSF9QX01QTFNfVUMpOlxuMTA2NzpcdFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX01DKToge1xuMTA2ODpcdFx0XHRzdHJ1Y3QgbXBsc19sYWJlbCBtcGxzX3RtcCwgKm1wbHM7XG4xMDY5Olx0XG4xMDcwOlx0XHRcdG1wbHMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkciksXG4xMDcxOlx0XHRcdFx0XHRcdCAgc2l6ZW9mKCptcGxzKSwgXHUwMDI2bXBsc190bXApO1xuMTA3MjpcdFx0XHRpZiAoIW1wbHMpXG4xMDczOlx0XHRcdFx0cmV0dXJuIDA7XG4xMDc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgY29kZSBtb2RpZmljYXRpb25zLiBGaXJzdCwgcmVnYXJkaW5nIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCwgSSBub3RpY2VkIGEgY2hhbmdlIGluIGhvdyB0aGUgSVAgaGVhZGVyIGlzIGFjY2Vzc2VkLiBQcmV2aW91c2x5LCBpdCByZWxpZWQgb24gZGlyZWN0IGFjY2VzcyB2aWEgYGlwX2hkcihza2IpYCBhbmQgYGlwdjZfaGRyKHNrYilgLiBOb3csIGl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW5zdGVhZC4gVGhlIHJhdGlvbmFsZSBzZWVtcyBzb3VuZCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyYCBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQgb3IgdGhlIGhlYWRlciBoYXNuJiMzOTt0IGJlZW4gcHVsbGVkIHlldC4gVGhpcyByZXBsYWNlbWVudCBhbGlnbnMgd2l0aCB0aGUgYXBwcm9hY2ggdXNlZCBpbiB0aGUgTVBMUyBzY2VuYXJpbywgZW1wbG95aW5nIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZvciBzYWZlIGNvcHlpbmcgb3IgcmVmZXJlbmNpbmcgb2YgZGF0YSB3aXRoaW4gdGhlIHNrYiwgd2l0aCBsZW5ndGggdmFsaWRhdGlvbi4gR29vZCBjYXRjaCwgbWl0aWdhdGluZyBwb3RlbnRpYWwgY3Jhc2hlcyBkdWUgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgSUJTUyBqb2luIHByb2Nlc3MsIHNwZWNpZmljYWxseSBgY2ZnODAyMTFfaWJzc19qb2luZWRgIGFuZCBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAuIEluIGBjZmc4MDIxMV9pYnNzX2pvaW5lZGAsIHRoZSB1c2Ugb2YgYGt6YWxsb2Nfb2JqYCBlbnN1cmVzIGEgemVyb2VkIGFsbG9jYXRpb24gZm9yIHRoZSBldmVudCBzdHJ1Y3R1cmUuIFRoaXMgaXMgZm9sbG93ZWQgYnkgYXNzaWduaW5nIHRoZSBldmVudCB0eXBlIGFuZCBCU1MgcG9pbnRlci4gVGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGAgaW52b2x2ZXMgc2VuZGluZyB0aGUgSUJTUyBCU1NJRCBhbmQgY29weWluZyBpdCB0byBhIGB3cnF1YCBzdHJ1Y3R1cmUuIFRoZSBCU1NJRCwgY3JpdGljYWwgaGVyZSwgaXMgc291cmNlZCBmcm9tIHRoZSBgY2ZnODAyMTFfYnNzYCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHBvcHVsYXRlZCBkdXJpbmcgQlNTIGNyZWF0aW9uIG9yIGRpc2NvdmVyeS4gRXZlcnl0aGluZyBzZWVtcyBzdHJhaWdodGZvcndhcmQgaW4gdGVybXMgb2YgZGF0YSBmbG93LgoKRmluYWxseSwgSSYjMzk7bGwgdHJhY2UgdGhlIHNjYW4gcmVxdWVzdCBsaWZlY3ljbGUuIFRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludGAgaXMgaW5pdGlhdGVkIGluIGBjZmc4MDIxMV9zY2FuYCBhbmQgYG5sODAyMTFfdHJpZ2dlcl9zY2FuYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgZXhhY3QgYWxsb2NhdGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZSBpcyBtYW5hZ2VkIHRocm91Z2hvdXQgaXRzIGxpZmV0aW1lLCBpbmNsdWRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBgZHJpdmVyX293bnNgIGFuZCBgc3RhbGVgIHN0YXRlcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipzY2FuX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byB0aGUgU2NhbiBSZXF1ZXN0IEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50YCBzdHJ1Y3R1cmVzLCBvciBzcGVjaWZpY2FsbHkgdGhlIGBzY2FuX3JlcWAgaW5zdGFuY2VzLCBhcmUgYmVpbmcgYWxsb2NhdGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL3NjYW4uY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYyBzdXJyb3VuZGluZyB3aXJlbGVzcyBzY2FubmluZywgc28gSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiB0aGVyZS4gSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiB0aGF0IGZpbGUgZm9yIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscywgc3VjaCBhcyBga21hbGxvY2AsIGBremFsbG9jYCwgb3IgYW55IGN1c3RvbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtIG1pZ2h0IGVtcGxveS4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgc3BlY2lmaWMgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIG9yIHBvb2xzIGluIHBsYWNlIGZvciB0aGlzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCB0cmFjZSBob3cgdGhlc2UgYHNjYW5fcmVxYCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgcG9wdWxhdGVkLCBhbmQgdWx0aW1hdGVseSByZWxlYXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Nhbl9yZXEuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmM9MjI5PXZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0NS1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MjQ2Olx0aWYgKHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDctXHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjQ4LVx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNDk6XHRcdFx0cmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0yNTAtXHRcdF9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzA5PXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NjEtXHRcdGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd2Rldi1cdTAwM2VpZnR5cGUsIC0xKTtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTc2MjpcdFx0aWYgKHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzYzLVx0XHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NjUtXHRcdFx0ICAgICAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzY2Olx0XHRcdFx0cmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzY3LVx0XHRcdF9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMTI3Mj1zdGF0aWMgaW50IG5sODAyMTFfdHJpZ2dlcl9zY2FuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTUwMy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTE1MDQ6XHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gcmVxdWVzdDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTE1MDUtXHRlcnIgPSBjZmc4MDIxMV9zY2FuKHJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTE1MTUtIG91dF9mcmVlOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMTUxNjpcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSBOVUxMO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTUxNy1cdGtmcmVlKHJlcXVlc3QpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTE5NjU9c3RhdGljIGludCBubDgwMjExX3N0YXJ0X3NjaGVkX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTgyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMTk4MzpcdHNjaGVkX3NjYW5fcmVxID0gbmw4MDIxMV9wYXJzZV9zY2hlZF9zY2FuKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTg0LVx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VhdHRycyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTk0LVx0aWYgKHdhbnRfbXVsdGkgXHUwMDI2XHUwMDI2IHJkZXYtXHUwMDNld2lwaHkubWF4X3NjaGVkX3NjYW5fcmVxcyBcdTAwM2UgMSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTE5OTU6XHRcdHNjaGVkX3NjYW5fcmVxLVx1MDAzZXJlcWlkID0gY2ZnODAyMTFfYXNzaWduX2Nvb2tpZShyZGV2KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTE5OTYtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIwMDE6XHRzY2hlZF9zY2FuX3JlcS1cdTAwM2VkZXYgPSBkZXY7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDAyOlx0c2NoZWRfc2Nhbl9yZXEtXHUwMDNld2lwaHkgPSBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5O1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIwMDQtXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU09DS0VUX09XTkVSXSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIwMDU6XHRcdHNjaGVkX3NjYW5fcmVxLVx1MDAzZW93bmVyX25scG9ydGlkID0gaW5mby1cdTAwM2VzbmRfcG9ydGlkO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwNi1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIwNjg3PXN0YXRpYyBpbnQgbmw4MDIxMV9hZGRfc2Nhbl9yZXEoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNjg5LXtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA2OTA6XHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxID0gcmRldi1cdTAwM2VzY2FuX3JlcTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA2OTEtXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjMxMjc9c3RhdGljIGludCBubDgwMjExX25ldGxpbmtfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMxNDYtXHRcdFx0XHRcdGxpc3QpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMxNDc6XHRcdFx0aWYgKHNjaGVkX3NjYW5fcmVxLVx1MDAzZW93bmVyX25scG9ydGlkID09IG5vdGlmeS1cdTAwM2Vwb3J0aWQpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMxNDg6XHRcdFx0XHRzY2hlZF9zY2FuX3JlcS1cdTAwM2VubF9vd25lcl9kZWFkID0gdHJ1ZTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMxNDktXHRcdFx0XHR3aXBoeV93b3JrX3F1ZXVlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYz04NDQ9c3RhdGljIGludCBjZmc4MDIxMV9zY2FuXzZnaHooc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtODQ5LVx0aW50IG5fY2hhbm5lbHMsIGNvdW50ID0gMCwgZXJyO1xubmV0L3dpcmVsZXNzL3NjYW4uYzo4NTA6XHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxdWVzdCwgKnJkZXZfcmVxID0gcmRldi1cdTAwM2VzY2FuX3JlcTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtODUxLVx0TElTVF9IRUFEKGNvbG9jX2FwX2xpc3QpO1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA0NS1cdGlmIChyZXF1ZXN0LVx1MDAzZXJlcS5uX2NoYW5uZWxzKSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEwNDY6XHRcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpvbGQgPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA0Ny1cbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA0ODpcdFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSByZXF1ZXN0O1xubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDQ5LVxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA1NC1cdFx0aWYgKCFmaXJzdF9wYXJ0IFx1MDAyNlx1MDAyNiAhV0FSTl9PTighb2xkKSlcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA1NTpcdFx0XHRyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2VpbmZvID0gb2xkLVx1MDAzZWluZm87XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNTYtXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDU4LVx0XHRpZiAoZXJyKSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEwNTk6XHRcdFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBvbGQ7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNjAtXHRcdFx0a2ZyZWUocmVxdWVzdCk7XG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMDcyPWludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNzQtXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxdWVzdDtcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA3NTpcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpyZGV2X3JlcSA9IHJkZXYtXHUwMDNlc2Nhbl9yZXE7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNzYtXHR1MzIgbl9jaGFubmVscyA9IDAsIGlkeCwgaTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMTItXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExMTM6XHRyZGV2LVx1MDAzZWludF9zY2FuX3JlcSA9IHJlcXVlc3Q7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExMTQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTExMzI9dm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE5MS1cdGNmZzgwMjExX3B1dF9zY2FuX3JlcShyZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExOTI6XHRyZGV2LVx1MDAzZWludF9zY2FuX3JlcSA9IE5VTEw7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExOTMtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExOTQtXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VzY2FuX3JlcSk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExOTU6XHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE5Ni1cbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTEyMDg9dm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCxcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTAte1xubmV0L3dpcmVsZXNzL3NjYW4uYzoxMjExOlx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKmludHJlcSA9XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTItXHRcdGNvbnRhaW5lcl9vZihyZXF1ZXN0LCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCwgcmVxKTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTEzOTY9aW50IF9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTE0MDItXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjE0MDM6XHRzY2hlZF9zY2FuX3JlcSA9IGNmZzgwMjExX2ZpbmRfc2NoZWRfc2Nhbl9yZXEocmRldiwgcmVxaWQpO1xubmV0L3dpcmVsZXNzL3NjYW4uYy0xNDA0LVx0aWYgKCFzY2hlZF9zY2FuX3JlcSlcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM1NjY9aW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMzU3MS1cdHN0cnVjdCB3aXBoeSAqd2lwaHk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1NzI6XHRzdHJ1Y3QgaXdfc2Nhbl9yZXEgKndyZXEgPSBOVUxMO1xubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTczLVx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKmNyZXE7XG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNjk0LVx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM2OTU6XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSBjcmVxO1xubmV0L3dpcmVsZXNzL3NjYW4uYy0zNjk2LVx0XHRlcnIgPSByZGV2X3NjYW4ocmRldiwgY3JlcSk7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM2OTctXHRcdGlmIChlcnIpIHtcbm5ldC93aXJlbGVzcy9zY2FuLmM6MzY5ODpcdFx0XHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzY5OS1cdFx0XHQvKiBjcmVxIHdpbGwgYmUgZnJlZWQgYmVsb3cgKi9cbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmM9NjQ9c3RhdGljIGludCBjZmc4MDIxMV9jb25uX3NjYW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTMxLVxubmV0L3dpcmVsZXNzL3NtZS5jOjEzMjpcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSByZXF1ZXN0O1xubmV0L3dpcmVsZXNzL3NtZS5jLTEzMy1cbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTM5LVx0fSBlbHNlIHtcbm5ldC93aXJlbGVzcy9zbWUuYzoxNDA6XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEgPSBOVUxMO1xubmV0L3dpcmVsZXNzL3NtZS5jLTE0MS1cdFx0a2ZyZWUocmVxdWVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzk5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFNjYW4gUmVxdWVzdCBBbGxvY2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBzY2FuIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aGVuIHRyaWdnZXJlZCB2aWEgYG5sODAyMTFfdHJpZ2dlcl9zY2FuYCBvciBkaXJlY3RseSB0aHJvdWdoIGBjZmc4MDIxMV9zY2FuYC4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGNvbnRlbnRpb24uCgpJJiMzOTtsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYG5sODAyMTEuY2AsIGFuZCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTEzMDAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBraW5kcyBvZiBhbGxvY2F0aW9ucyBoYXBwZW4sIHNvIGhvcGVmdWxseSwgdGhlIGNyZWF0aW9uIG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmlnaHQgdGhlcmUgaW4gZnJvbnQgb2YgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyB0aGUgc2NhbiBpbml0aWF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzMDA6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTMwMTpcdFx0XHRzY2FuX2ZyZXFzID0gaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRX0tIWl07XG4xMTMwMjpcdFx0XHRzY2FuX2ZyZXFzX2toeiA9IHRydWU7XG4xMTMwMzpcdFx0fSBlbHNlIGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSlcbjExMzA0Olx0XHRcdHNjYW5fZnJlcXMgPSBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXTtcbjExMzA1Olx0XG4xMTMwNjpcdFx0aWYgKHNjYW5fZnJlcXMpIHtcbjExMzA3Olx0XHRcdG5fY2hhbm5lbHMgPSB2YWxpZGF0ZV9zY2FuX2ZyZXFzKHNjYW5fZnJlcXMpO1xuMTEzMDg6XHRcdFx0aWYgKCFuX2NoYW5uZWxzKVxuMTEzMDk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzEwOlx0XHR9IGVsc2Uge1xuMTEzMTE6XHRcdFx0bl9jaGFubmVscyA9IGllZWU4MDIxMV9nZXRfbnVtX3N1cHBvcnRlZF9jaGFubmVscyh3aXBoeSk7XG4xMTMxMjpcdFx0fVxuMTEzMTM6XHRcbjExMzE0Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pXG4xMTMxNTpcdFx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApXG4xMTMxNjpcdFx0XHRcdG5fc3NpZHMmIzQzOyYjNDM7O1xuMTEzMTc6XHRcbjExMzE4Olx0XHRpZiAobl9zc2lkcyBcdTAwM2Ugd2lwaHktXHUwMDNlbWF4X3NjYW5fc3NpZHMpXG4xMTMxOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzIwOlx0XG4xMTMyMTpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSlcbjExMzIyOlx0XHRcdGllX2xlbiA9IG5sYV9sZW4oaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSUVdKTtcbjExMzIzOlx0XHRlbHNlXG4xMTMyNDpcdFx0XHRpZV9sZW4gPSAwO1xuMTEzMjU6XHRcbjExMzI2Olx0XHRpZiAoaWVfbGVuIFx1MDAzZSB3aXBoeS1cdTAwM2VtYXhfc2Nhbl9pZV9sZW4pXG4xMTMyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMzI4Olx0XG4xMTMyOTpcdFx0c2l6ZSA9IHN0cnVjdF9zaXplKHJlcXVlc3QsIHJlcS5jaGFubmVscywgbl9jaGFubmVscyk7XG4xMTMzMDpcdFx0c3NpZHNfb2Zmc2V0ID0gc2l6ZTtcbjExMzMxOlx0XHRzaXplID0gc2l6ZV9hZGQoc2l6ZSwgYXJyYXlfc2l6ZShzaXplb2YoKnJlcXVlc3QtXHUwMDNlcmVxLnNzaWRzKSwgbl9zc2lkcykpO1xuMTEzMzI6XHRcdGllX29mZnNldCA9IHNpemU7XG4xMTMzMzpcdFx0c2l6ZSA9IHNpemVfYWRkKHNpemUsIGllX2xlbik7XG4xMTMzNDpcdFx0cmVxdWVzdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4xMTMzNTpcdFx0aWYgKCFyZXF1ZXN0KVxuMTEzMzY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTMzNzpcdFxuMTEzMzg6XHRcdGlmIChuX3NzaWRzKVxuMTEzMzk6XHRcdFx0cmVxdWVzdC1cdTAwM2VyZXEuc3NpZHMgPSAodm9pZCAqKXJlcXVlc3QgJiM0Mzsgc3NpZHNfb2Zmc2V0O1xuMTEzNDA6XHRcdHJlcXVlc3QtXHUwMDNlcmVxLm5fc3NpZHMgPSBuX3NzaWRzO1xuMTEzNDE6XHRcdGlmIChpZV9sZW4pXG4xMTM0MjpcdFx0XHRyZXF1ZXN0LVx1MDAzZXJlcS5pZSA9ICh2b2lkICopcmVxdWVzdCAmIzQzOyBpZV9vZmZzZXQ7XG4xMTM0MzpcdFxuMTEzNDQ6XHRcdGkgPSAwO1xuMTEzNDU6XHRcdGlmIChzY2FuX2ZyZXFzKSB7XG4xMTM0NjpcdFx0XHQvKiB1c2VyIHNwZWNpZmllZCwgYmFpbCBvdXQgaWYgY2hhbm5lbCBub3QgZm91bmQgKi9cbjExMzQ3Olx0XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgc2Nhbl9mcmVxcywgdG1wKSB7XG4xMTM0ODpcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbjExMzQ5Olx0XHRcdFx0aW50IGZyZXEgPSBubGFfZ2V0X3UzMihhdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MzMKCQkJCQkJCW91dHB1dDogMjkyCgkJCQkJCQl0aG91Z2h0czogOTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIElkZW50aWZpZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhlIGNvcmUgZm9jdXMgb2YgdGhpcyBwYXRjaCBzZXJpZXMgaXMgb24gaGFyZGVuaW5nIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBhcm91bmQgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgc2FmZXR5LCBhbmQgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgdGhlIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2gsIGRlc3BpdGUgdGhpcyBiZWluZyBhIGtlcm5lbCBjb2RlIHJldmlldyBhbmQgbm90IGEgZnV6emluZyBleGVyY2lzZS4KCkZpcnN0LCBJIG5vdGUgdGhlIHVzZSBvZiBga3phbGxvY2AgZm9yIHRoZSBgcmVxdWVzdGAgc3RydWN0dXJlLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgYGRyaXZlcl9vd25zYCBhbmQgYHN0YWxlYCB0byBmYWxzZSAoMCksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5zdXJpbmcgYSBrbm93biBzdGF0ZS4gVGhlbiwgSSBleGFtaW5lZCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc2l0aW9uIGZyb20gYGlqYCB0byBgYnNzYCBpbiBgY2ZnODAyMTFfaWJzc19qb2luZWRgLiBUaGUgYGt6YWxsb2NgIGFsbG9jYXRpb24gYW5kIHN1YnNlcXVlbnQgYXNzaWdubWVudCAoYGV2LSZndDtpai5ic3MgPSBic3M7YCkgc2hvdWxkLCBpbiBwcmluY2lwbGUsIHByZXZlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGUgc3Vic2VxdWVudCB1c2FnZSBpbiBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2Agc2VlbXMgc2FmZSBnaXZlbiB0aGlzIGluaXRpYWxpemF0aW9uLgoKSSB0aGVuIGxvb2tlZCBhdCB0aGUgd29ya3F1ZXVlIGNoYW5nZXMgaW4gYHJlZy5jYCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gYGNmZzgwMjExX2xlYXZlYCBjYWxscy4gVGhlIHVzZSBvZiBgd2lwaHlfd29ya19pbml0YCBhbmQgYElOSVRfV09SS2AgY291cGxlZCB3aXRoIHRoZSBjaGVja3Mgd2l0aGluIGByZWdfd2Rldl9jaGFuX3ZhbGlkYCBzdWdnZXN0cyB0aGUgaW50ZW50aW9uIGlzIHRvIGF2b2lkIGxvY2tpbmcgaW52ZXJzaW9ucy4gVGhlIGNvbW1lbnRzIGFib3V0IExPQ0tERVAgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgcmVpbmZvcmNlIHRoaXMuIEkgc2VlIHRoaXMgYXMgYSBzdGFuZGFyZCBhcHByb2FjaCB0byBhdm9pZCBkZWFkbG9ja3M7IHRoaXMgaXMgbW9yZSBhbiBpc3N1ZSBmb3IgTE9DS0RFUCBhbmQgbGVzcyBhIEtNU0FOIGNvbmNlcm4uCgpUaGUgcmVtb3ZhbCBvZiB0aGUgYFdBUk5fT04oLi4uKWAgd3JhcHBlciBpbiBgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlYCBhbmQgYGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsYCBpcyBtb3N0bHkgYSBjb3NtZXRpYyBjaGFuZ2UsIGJ1dCBJIHN0aWxsIHRha2UgdGhlIHRpbWUgdG8gY29uc2lkZXIgdGhlIGNvbmRpdGlvbiB3aXRoaW4uCgpUaGUgc2NhbiByZXF1ZXN0IHJlZmVyZW5jZSBtYW5hZ2VtZW50IGluIGBzY2FuLmNgIGFuZCBgcmRldi1vcHMuaGAgaXMgcHJvbWlzaW5nLCBhcyB0aGV5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlLiBLQVNBTiBpcyB0aGUgcmVsZXZhbnQgdG9vbCBoZXJlLgoKVGhlIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCBjaGFuZ2UgdXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaXMgYSBnb29kIHByYWN0aWNlLiBVc2luZyBgc2tiX2hlYWRlcl9wb2ludGVyYCB0byBoYW5kbGUgcGFja2V0IGRhdGEgcmVkdWNlcyB0aGUgcmlzayBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBkYXRhIGxlYWtzLCB3aGljaCBhcmUgcHJpbWFyaWx5IGhhbmRsZWQgYnkgS0FTQU4uCgpGaW5hbGx5LCB0aGUgQlNTIGhhbmRsaW5nIGNoYW5nZXMgKGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWApIGFwcGVhciB0byBiZSBtaW5vciByZWZpbmVtZW50cyByZWdhcmRpbmcgZGF0YSBhY2Nlc3MgYW5kIHJlZHVuZGFudCBjaGVja3MuIGByY3VfYWNjZXNzX3BvaW50ZXJgIGlzIHByb3Blcmx5IHVzZWQsIGFkZHJlc3NpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuCgpOb3csIHRvIGV4cGxpY2l0bHkgYWRkcmVzcyB0aGUgS01TQU4gcXVlc3Rpb25zOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgaW5mby1sZWFrcy4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBga3phbGxvY2AgaXMgdXNlZCBhbmQgbG9jYWwgdmFyaWFibGVzIGFyZSB3ZWxsIGhhbmRsZWQuCgozLiAgKipBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyoqIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwcmVzZW50LgoKNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLCBgc2tiX2hlYWRlcl9wb2ludGVyYCBpcyB1c2VkIGNvcnJlY3RseSBhbmQgZGVmZW5zaXZlbHkuCgpHaXZlbiB0aGlzIHRob3JvdWdoIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gY29uY2VybnMuIEFsbCBpZGVudGlmaWVkIGlzc3VlcyByZWxhdGUgdG8gY29uY3VycmVuY3ksIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBib3VuZGFyeSBjaGVja3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgYXJlIHByZXNlbnQuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBhcyBhbHdheXMsIHRvIGJlIGNlcnRhaW4sIGFuZCB0aGVuIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBwYWNrZXQgcGFyc2luZyBhY3Jvc3MgY2ZnODAyMTE6XG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxuMy4gSUJTUyBldmVudCBoYW5kbGluZzogUGFzc2VzIEJTUyByZWZlcmVuY2VzIGRpcmVjdGx5IHRvIGV2ZW50IHByb2Nlc3NpbmcgcmF0aGVyIHRoYW4gcmUtbG9va2luZyB0aGVtIHVwOyBhbGwgZXZlbnQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaiBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHByb3Blcmx5IG1hbmFnZWQuXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgcGFja2V0IHBhcnNpbmcgYWNyb3NzIGNmZzgwMjExOlxuMS4gU2NhbiByZXF1ZXN0IHRyYWNraW5nIChkcml2ZXJfb3ducy9zdGFsZSk6IEZpeGVzIHVzZS1hZnRlci1mcmVlIGFuZCBwcmVtYXR1cmUgZnJlZXMgb2Ygc2NhbiByZXF1ZXN0cyBhY3Jvc3MgZHJpdmVyIGNhbmNlbGxhdGlvbiBwYXRocy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIFVBRiBpc3N1ZXMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHNjYW4gcmVxdWVzdCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jLCBzbyBhbGwgbmV3IHN0cnVjdCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4yLiBSZWd1bGF0b3J5IHdvcmtxdWV1ZSBzcGxpdDogU29sdmVzIGxvY2sgb3JkZXJpbmcvZGVhZGxvY2tzIGJldHdlZW4gcnRubF9sb2NrIGFuZCB3aXBoeSBtdXRleCBkdXJpbmcgcmVndWxhdG9yeSBpbnRlcmZhY2UgdGVhcmRvd24uIFRoaXMgZmFsbHMgc3RyaWN0bHkgdW5kZXIgTE9DS0RFUC5cbjMuIElCU1MgZXZlbnQgaGFuZGxpbmc6IFBhc3NlcyBCU1MgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBldmVudCBwcm9jZXNzaW5nIHJhdGhlciB0aGFuIHJlLWxvb2tpbmcgdGhlbSB1cDsgYWxsIGV2ZW50IHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB2aWEga3phbGxvY19vYmogYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpcyBwcm9wZXJseSBtYW5hZ2VkLlxuNC4gUGFja2V0IGNsYXNzaWZpY2F0aW9uIChza2JfaGVhZGVyX3BvaW50ZXIpOiBGaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBub24tbGluZWFyIHNrYnMgYnkgc2FmZWx5IGNoZWNraW5nIGhlYWRlciBsZW5ndGhzIHdpdGggc2tiX2hlYWRlcl9wb2ludGVyLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVycmVhZHMgYXJlIGNhdWdodCBieSBLQVNBTi5cbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyBLQVNBTiBhbmQgTE9DS0RFUCBmdWxseSBjb3ZlciB0aGUgcmlza3MgaW4gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6MTYuOTkxNTI0ODE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NDI0NzkwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc2Nhbl9kb25lXCIsXG4gICAgXCJfX19jZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tcIixcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJjZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiX19jZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICAgIFwiX19jZmc4MDIxMV9ic3NfdXBkYXRlXCIsXG4gICAgXCJjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5XCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VcIixcbiAgICBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgbGlmZXRpbWUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHBhY2tldCBwYXJzaW5nIGFjcm9zcyBjZmc4MDIxMTpcXG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4yLiBSZWd1bGF0b3J5IHdvcmtxdWV1ZSBzcGxpdDogU29sdmVzIGxvY2sgb3JkZXJpbmcvZGVhZGxvY2tzIGJldHdlZW4gcnRubF9sb2NrIGFuZCB3aXBoeSBtdXRleCBkdXJpbmcgcmVndWxhdG9yeSBpbnRlcmZhY2UgdGVhcmRvd24uIFRoaXMgZmFsbHMgc3RyaWN0bHkgdW5kZXIgTE9DS0RFUC5cXG4zLiBJQlNTIGV2ZW50IGhhbmRsaW5nOiBQYXNzZXMgQlNTIHJlZmVyZW5jZXMgZGlyZWN0bHkgdG8gZXZlbnQgcHJvY2Vzc2luZyByYXRoZXIgdGhhbiByZS1sb29raW5nIHRoZW0gdXA7IGFsbCBldmVudCBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXMgcHJvcGVybHkgbWFuYWdlZC5cXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjE2Ljk5MTUzMTUxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MDM5MzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJjNjcxNWUwMWVkMDcxYmIxNjQ0MTE5M2I0Y2Q3NWM1NDdiZDJiNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAwMTo1MDoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcXG5AQCAtMjQ0LDkgKzI0NCw4IEBAIHZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0cmRldi1cXHUwMDNlb3BlbmNvdW50LS07XFxuIFxcbiBcXHRpZiAocmRldi1cXHUwMDNlc2Nhbl9yZXEgXFx1MDAyNlxcdTAwMjYgcmRldi1cXHUwMDNlc2Nhbl9yZXEtXFx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT04oIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHxcXG4tXFx0XFx0XFx0ICAgICAhcmRldi1cXHUwMDNlaW50X3NjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCkpKVxcbitcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHwgIXJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQpKVxcbiBcXHRcXHRcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcXG4gXFx0XFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcXG4gXFx0fVxcbkBAIC02NDYsNiArNjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlZGVzdHJveV93b3JrLCBjZmc4MDIxMV9kZXN0cm95X2lmYWNlX3drKTtcXG4gXFx0d2lwaHlfd29ya19pbml0KFxcdTAwMjZyZGV2LVxcdTAwM2VzY2hlZF9zY2FuX3N0b3Bfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcF93ayk7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlc2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7XFxuK1xcdHdpcGh5X3dvcmtfaW5pdChcXHUwMDI2cmRldi1cXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drLCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayk7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlcmVnX2xlYXZlX25hbl93aywgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZyZGV2LVxcdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxcbiBcXHRcXHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnJkZXYtXFx1MDAzZXByb3BhZ2F0ZV9jYWNfZG9uZV93aywgY2ZnODAyMTFfcHJvcGFnYXRlX2NhY19kb25lX3drKTtcXG5AQCAtMTM0NSw2ICsxMzQ2LDcgQEAgdm9pZCB3aXBoeV91bnJlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cmRldi1cXHUwMDNlZGZzX3VwZGF0ZV9jaGFubmVsc193ayk7XFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cmRldi1cXHUwMDNlYmFja2dyb3VuZF9jYWNfZG9uZV93ayk7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnJkZXYtXFx1MDAzZWRlc3Ryb3lfd29yayk7XFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNnJkZXYtXFx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xcbiBcXHRmbHVzaF93b3JrKFxcdTAwMjZyZGV2LVxcdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drKTtcXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2cmRldi1cXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drKTtcXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2cmRldi1cXHUwMDNlbWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7XFxuQEAgLTE3NTgsOSArMTc2MCw5IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0d2lwaHlfbG9jayhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbiBcXHRcXHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXFx1MDAzZWlmdHlwZSwgLTEpO1xcbiBcXHRcXHRpZiAocmRldi1cXHUwMDNlc2Nhbl9yZXEgXFx1MDAyNlxcdTAwMjYgcmRldi1cXHUwMDNlc2Nhbl9yZXEtXFx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcXG4tXFx0XFx0XFx0aWYgKFdBUk5fT04oIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHxcXG4tXFx0XFx0XFx0XFx0ICAgICAhcmRldi1cXHUwMDNlaW50X3NjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCkpKVxcbitcXHRcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHxcXG4rXFx0XFx0XFx0ICAgICAhcmRldi1cXHUwMDNlaW50X3NjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCkpXFxuIFxcdFxcdFxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xcbiBcXHRcXHRcXHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXFxuaW5kZXggYjQ2MTBmNjY4NWRjYi4uNjEzOGQyMDdjYWY0MSAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbkBAIC0yNCw2ICsyNCwxNiBAQFxcbiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7XFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gaW5mbztcXG4gXFx0Ym9vbCBub3RpZmllZDtcXG4rXFx0LypcXG4rXFx0ICogc2V0IHdoaWxlIHRoZSByZXF1ZXN0IGlzIGhhbmRlZCB0byB0aGUgZHJpdmVyLCBpLmUuIGJldHdlZW5cXG4rXFx0ICogcmRldl9zY2FuKCkgYW5kIGNmZzgwMjExX3NjYW5fZG9uZSgpXFxuK1xcdCAqL1xcbitcXHRib29sIGRyaXZlcl9vd25zO1xcbitcXHQvKlxcbitcXHQgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGxcXG4rXFx0ICogb3ducyBpdCwgc28gdGhhdCBjZmc4MDIxMV9zY2FuX2RvbmUoKSBrbm93cyB0byBqdXN0IGZyZWUgaXRcXG4rXFx0ICovXFxuK1xcdGJvb2wgc3RhbGU7XFxuIFxcdC8qIG11c3QgYmUgbGFzdCAtIHZhcmlhYmxlIG1lbWJlcnMgKi9cXG4gXFx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCByZXE7XFxuIH07XFxuQEAgLTEwNCw2ICsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrO1xcbiBcXHRzdHJ1Y3Qgd2lwaHlfd29yayBzY2hlZF9zY2FuX3N0b3Bfd2s7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcXG4rXFx0c3RydWN0IHdpcGh5X3dvcmsgcmVnX2NoZWNrX2NoYW5zX3drO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVnX2xlYXZlX25hbl93aztcXG4gXFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiByYWRhcl9jaGFuZGVmO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93aztcXG5AQCAtMjgwLDggKzI5Miw3IEBAIHN0cnVjdCBjZmc4MDIxMV9ldmVudCB7XFxuIFxcdFxcdFxcdGJvb2wgbG9jYWxseV9nZW5lcmF0ZWQ7XFxuIFxcdFxcdH0gZGM7XFxuIFxcdFxcdHN0cnVjdCB7XFxuLVxcdFxcdFxcdHU4IGJzc2lkW0VUSF9BTEVOXTtcXG4tXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsO1xcbitcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XFxuIFxcdFxcdH0gaWo7XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdHU4IHBlZXJfYWRkcltFVEhfQUxFTl07XFxuQEAgLTM0NCw4ICszNTUsNyBAQCBpbnQgX19jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xcbiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTtcXG4tdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7XFxuK3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpO1xcbiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvaWJzcy5jIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuY1xcbisrKyBiL25ldC93aXJlbGVzcy9pYnNzLmNcXG5AQCAtMTYsMjYgKzE2LDE4IEBAXFxuICNpbmNsdWRlIFxcXCJyZGV2LW9wcy5oXFxcIlxcbiBcXG4gXFxuLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXFxuK3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpXFxuIHtcXG4gXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4tXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG4gXFx0dW5pb24gaXdyZXFfZGF0YSB3cnF1O1xcbiAjZW5kaWZcXG4gXFxuIFxcdGlmIChXQVJOX09OKHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0Z290byBwdXRfYnNzO1xcbiBcXG4gXFx0aWYgKCF3ZGV2LVxcdTAwM2V1Lmlic3Muc3NpZF9sZW4pXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGJzcyA9IGNmZzgwMjExX2dldF9ic3Mod2Rldi1cXHUwMDNld2lwaHksIGNoYW5uZWwsIGJzc2lkLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XFxuLVxcbi1cXHRpZiAoV0FSTl9PTighYnNzKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRnb3RvIHB1dF9ic3M7XFxuIFxcbiBcXHRpZiAod2Rldi1cXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKSB7XFxuIFxcdFxcdGNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi1cXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKTtcXG5AQCAtNDMsMTcgKzM1LDIyIEBAIHZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXFxuIFxcdH1cXG4gXFxuIFxcdGNmZzgwMjExX2hvbGRfYnNzKGJzc19mcm9tX3B1Yihic3MpKTtcXG4rXFx0LyogdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBldmVudCBpcyB0cmFuc2ZlcnJlZCB0byBjdXJyZW50X2JzcyAqL1xcbiBcXHR3ZGV2LVxcdTAwM2V1Lmlic3MuY3VycmVudF9ic3MgPSBic3NfZnJvbV9wdWIoYnNzKTtcXG4gXFxuIFxcdGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMod2Rldik7XFxuIFxcbi1cXHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXFx1MDAzZXdpcGh5KSwgZGV2LCBic3NpZCxcXG4rXFx0bmw4MDIxMV9zZW5kX2lic3NfYnNzaWQod2lwaHlfdG9fcmRldih3ZGV2LVxcdTAwM2V3aXBoeSksIGRldiwgYnNzLVxcdTAwM2Vic3NpZCxcXG4gXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbiBcXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLVxcdG1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTtcXG4rXFx0bWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3MtXFx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XFxuIFxcdHdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsIFxcdTAwMjZ3cnF1LCBOVUxMKTtcXG4gI2VuZGlmXFxuK1xcdHJldHVybjtcXG4rXFxuK3B1dF9ic3M6XFxuK1xcdGNmZzgwMjExX3B1dF9ic3Mod2Rldi1cXHUwMDNld2lwaHksIGJzcyk7XFxuIH1cXG4gXFxuIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxcbkBAIC02Miw2ICs1OSw3IEBAIHZvaWQgY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxcbiBcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdkZXYtXFx1MDAzZXdpcGh5KTtcXG4gXFx0c3RydWN0IGNmZzgwMjExX2V2ZW50ICpldjtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0dHJhY2VfY2ZnODAyMTFfaWJzc19qb2luZWQoZGV2LCBic3NpZCwgY2hhbm5lbCk7XFxuQEAgLTY5LDEzICs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4gXFx0aWYgKFdBUk5fT04oIWNoYW5uZWwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtXFx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0ICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xcbitcXHRpZiAoV0FSTl9PTighYnNzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXYgPSBremFsbG9jX29iaigqZXYsIGdmcCk7XFxuLVxcdGlmICghZXYpXFxuK1xcdGlmICghZXYpIHtcXG4rXFx0XFx0Y2ZnODAyMTFfcHV0X2Jzcyh3ZGV2LVxcdTAwM2V3aXBoeSwgYnNzKTtcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRldi1cXHUwMDNldHlwZSA9IEVWRU5UX0lCU1NfSk9JTkVEO1xcbi1cXHRtZW1jcHkoZXYtXFx1MDAzZWlqLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pO1xcbi1cXHRldi1cXHUwMDNlaWouY2hhbm5lbCA9IGNoYW5uZWw7XFxuK1xcdGV2LVxcdTAwM2Vpai5ic3MgPSBic3M7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d2Rldi1cXHUwMDNlZXZlbnRfbG9jaywgZmxhZ3MpO1xcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZldi1cXHUwMDNlbGlzdCwgXFx1MDAyNndkZXYtXFx1MDAzZWV2ZW50X2xpc3QpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXFxuaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxcbisrKyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXFxuQEAgLTQ2NCw3ICs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHR0cmFjZV9yZGV2X3NjYW4oXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCByZXF1ZXN0KTtcXG4rXFx0cmVxdWVzdC1cXHUwMDNlZHJpdmVyX293bnMgPSB0cnVlO1xcbiBcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZXNjYW4oXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBcXHUwMDI2cmVxdWVzdC1cXHUwMDNlcmVxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmVxdWVzdC1cXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcXG4gXFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcXG5pbmRleCBhODMzNmJhZjg1ZGM2Li4xMTY2NWUwYTdlZmM4IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xcbkBAIC0yMzQ1LDcgKzIzNDUsNyBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuIFxcdGlmdHlwZSA9IHdkZXYtXFx1MDAzZWlmdHlwZTtcXG4gXFxuIFxcdC8qIG1ha2Ugc3VyZSB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZSAqL1xcbi1cXHRpZiAoIXdkZXYtXFx1MDAzZW5ldGRldiB8fCAhbmV0aWZfcnVubmluZyh3ZGV2LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKiBOQU4gZG9lc24ndCBoYXZlIGxpbmtzLCBoYW5kbGUgaXQgc2VwYXJhdGVseSAqL1xcbkBAIC0yNDQ2LDE5ICsyNDQ2LDUyIEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuIFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7XFxuLVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbitcXG4rXFx0cmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsXFxuK1xcdFxcdFxcdCAgICByZWdfbGVhdmVfbmFuX3drKTtcXG4rXFxuK1xcdC8qIHN0b3BwaW5nIE5BTiBjbG9zZXMgaXRzIGRhdGEgaW50ZXJmYWNlcywgd2hpY2ggbmVlZHMgdGhlIFJUTkwgKi9cXG4rXFx0cnRubF9sb2NrKCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0Ym9vbCB2YWxpZDtcXG4gXFxuLVxcdFxcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXFxuLVxcdFxcdFxcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XFxuK1xcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KVxcbitcXHRcXHRcXHR2YWxpZCA9IHJlZ193ZGV2X2NoYW5fdmFsaWQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2KTtcXG4gXFx0XFx0aWYgKCF2YWxpZClcXG4gXFx0XFx0XFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xcbiBcXHR9XFxuK1xcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbitcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2d2lwaHktXFx1MDAzZW10eCk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRlYXJpbmcgZG93biBOQU4gbmVlZHMgdGhlIFJUTkwgZm9yIGNsb3NpbmcgTkFOX0RBVEFcXG4rXFx0XFx0ICogaW50ZXJmYWNlcywgaGFuZGxlIHRoYXQgc2VwYXJhdGVseS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxcbitcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZyZGV2LVxcdTAwM2VyZWdfbGVhdmVfbmFuX3drKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjZmc4MDIxMV9sZWF2ZV9sb2NrZWQocmRldiwgd2RldiwgLTEpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5AQCAtMjQ2NiwxMiArMjQ5OSwxMyBAQCBzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcXFxuXFxcIik7XFxuLVxcdHJ0bmxfbG9jaygpO1xcbiBcXG4tXFx0Zm9yX2VhY2hfcmRldihyZGV2KVxcbi1cXHRcXHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRydG5sX3VubG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KVxcbitcXHRcXHR3aXBoeV93b3JrX3F1ZXVlKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXJlZ19jaGVja19jaGFuc193ayk7XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5oIGIvbmV0L3dpcmVsZXNzL3JlZy5oXFxuaW5kZXggZmMzMWM1ZjlhNjFhYi4uYzU4NzA3OWVhZDhmYiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmhcXG4rKysgYi9uZXQvd2lyZWxlc3MvcmVnLmhcXG5AQCAtMTc4LDYgKzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcXG4gICovXFxuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xcbiBcXG4rLyoqXFxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drIC0gY2hlY2sgaWYgY2hhbm5lbHMgYXJlIG5vIGxvbmdlciB1c2FibGUgYW5kIGxlYXZlXFxuKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXFxuKyAqIEB3b3JrOiB0aGUgd29yayBzdHJ1Y3RcXG4rICovXFxuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xcbitcXG4rLyoqXFxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGVcXG4rICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxcbisgKlxcbisgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cXG4rICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soKSB3aGljaCBydW5zIHdpdGggdGhlIHdpcGh5IG11dGV4IGhlbGQuXFxuKyAqL1xcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitcXG4gZXh0ZXJuIGNvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcXG4gZXh0ZXJuIGNvbnN0IHU4IGV4dHJhX3JlZ2RiX2NlcnRzW107XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbkBAIC0xMTE0LDYgKzExMTQsMjEgQEAgaW50IGNmZzgwMjExX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxcbisgKiBlLmcuIG1hYzgwMjExIG1heSBjYW5jZWwgaXQgYXN5bmNocm9ub3VzbHkgYW5kIHN0aWxsIHVzZSBpdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxcbit7XFxuK1xcdGlmICghcmVxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAocmVxLVxcdTAwM2Vkcml2ZXJfb3ducylcXG4rXFx0XFx0cmVxLVxcdTAwM2VzdGFsZSA9IHRydWU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a2ZyZWUocmVxKTtcXG4rfVxcbitcXG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHQgICBib29sIHNlbmRfbWVzc2FnZSlcXG4ge1xcbkBAIC0xMTczLDEwICsxMTg4LDEwIEBAIHZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFxuIFxcdGRldl9wdXQod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuLVxcdGtmcmVlKHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcSk7XFxuK1xcdGNmZzgwMjExX3B1dF9zY2FuX3JlcShyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEpO1xcbiBcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xcbiBcXG4tXFx0a2ZyZWUocmRldi1cXHUwMDNlc2Nhbl9yZXEpO1xcbitcXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cXHUwMDNlc2Nhbl9yZXEpO1xcbiBcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcSA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoIXNlbmRfbWVzc2FnZSlcXG5AQCAtMTE5OSw2ICsxMjE0LDE4IEBAIHZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsXFxuIFxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX2luZm8gb2xkX2luZm8gPSBpbnRyZXEtXFx1MDAzZWluZm87XFxuIFxcbiBcXHR0cmFjZV9jZmc4MDIxMV9zY2FuX2RvbmUoaW50cmVxLCBpbmZvKTtcXG4rXFxuK1xcdGludHJlcS1cXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcXG4rXFxuK1xcdGlmIChpbnRyZXEtXFx1MDAzZXN0YWxlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBzY2FuIGlzIGFscmVhZHkgY29tcGxldGVkIGFzIGZhciBhcyB3ZSdyZSBjb25jZXJuZWQsXFxuK1xcdFxcdCAqIGl0IHdhcyBqdXN0IGtlcHQgYXJvdW5kIGZvciB0aGUgZHJpdmVyIC0gZG9uZSBub3csIGZyZWUgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRrZnJlZShpbnRyZXEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXFx1MDAzZXNjYW5fcmVxIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdGludHJlcSAhPSByZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEpO1xcbiBcXG5AQCAtMjA1MCw2ICsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdGlmICghaGlkZGVuKVxcbiBcXHRcXHRcXHRcXHRoaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQlNTX0NNUF9ISURFX05VTCk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcXG4rXFx0XFx0XFx0ICogYmVhY29uIGRhdGEgY2FuIG5ldmVyIGJlIGZpbGxlZC91cGRhdGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGhpZGRlbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tXFx1MDAzZXB1Yi5iZWFjb25faWVzKSlcXG4rXFx0XFx0XFx0XFx0aGlkZGVuID0gTlVMTDtcXG4gXFx0XFx0XFx0aWYgKGhpZGRlbikge1xcbiBcXHRcXHRcXHRcXHRuZXctXFx1MDAzZXB1Yi5oaWRkZW5fYmVhY29uX2JzcyA9IFxcdTAwMjZoaWRkZW4tXFx1MDAzZXB1YjtcXG4gXFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ldy1cXHUwMDNlaGlkZGVuX2xpc3QsXFxuQEAgLTM0NjgsMTEgKzM1MDIsNiBAQCB2b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0Y2Jzcy1cXHUwMDNlcHViLmNoYW5uZWwgPSBjaGFuO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShic3MsIFxcdTAwMjZyZGV2LVxcdTAwM2Vic3NfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAoIWNmZzgwMjExX2Jzc190eXBlX21hdGNoKGJzcy1cXHUwMDNlcHViLmNhcGFiaWxpdHksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgYnNzLVxcdTAwM2VwdWIuY2hhbm5lbC1cXHUwMDNlYmFuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB3ZGV2LVxcdTAwM2Vjb25uX2Jzc190eXBlKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbiBcXHRcXHRpZiAoYnNzID09IGNic3MpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmNcXG5pbmRleCAzZTU4NGQwY2EzZTI2Li5mMjQ2NGQyY2UwZDVhIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcXG4rKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jXFxuQEAgLTEwMzksMTIgKzEwMzksMzAgQEAgdW5zaWduZWQgaW50IGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbi1cXHRcXHRkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcF9oZHIoc2tiKSkgXFx1MDAyNiAweGZjO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0XFx0c3RydWN0IGlwaGRyIF9pcGg7XFxuK1xcbitcXHRcXHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkciksXFxuK1xcdFxcdFxcdFxcdFxcdCBzaXplb2YoKmlwaCksIFxcdTAwMjZfaXBoKTtcXG4rXFx0XFx0aWYgKCFpcGgpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0ZHNjcCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKSBcXHUwMDI2IDB4ZmM7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbi1cXHRcXHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2X2hkcihza2IpKSBcXHUwMDI2IDB4ZmM7XFxuK1xcdH1cXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFx0XFx0c3RydWN0IGlwdjZoZHIgX2lwNmg7XFxuK1xcbitcXHRcXHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxcbitcXHRcXHRcXHRcXHRcXHQgIHNpemVvZigqaXA2aCksIFxcdTAwMjZfaXA2aCk7XFxuK1xcdFxcdGlmICghaXA2aClcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHRkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKSBcXHUwMDI2IDB4ZmM7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19VQyk6XFxuIFxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcXG4gXFx0XFx0c3RydWN0IG1wbHNfbGFiZWwgbXBsc190bXAsICptcGxzO1xcbkBAIC0xMjE3LDggKzEyMzUsNyBAQCB2b2lkIGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IWV2LVxcdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEVWRU5UX0lCU1NfSk9JTkVEOlxcbi1cXHRcXHRcXHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXFx1MDAzZW5ldGRldiwgZXYtXFx1MDAzZWlqLmJzc2lkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXYtXFx1MDAzZWlqLmNoYW5uZWwpO1xcbitcXHRcXHRcXHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXFx1MDAzZW5ldGRldiwgZXYtXFx1MDAzZWlqLmJzcyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEVWRU5UX1NUT1BQRUQ6XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTI0NzcsMTYgKzI0OTQsMTUgQEAgc3RhdGljIHZvaWQgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIG5ld19iZWFjb25faW50LFxcbiBcXHRcXHRpZiAod2Rldi1cXHUwMDNldmFsaWRfbGlua3MpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0d2Rldl9iaSA9IGNmZzgwMjExX3dkZXZfYmkod2Rldik7XFxuK1xcdFxcdGlmICghd2Rldl9iaSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHQvKiBza2lwIHdkZXZzIG5vdCBhY3RpdmUgb24gdGhlIGdpdmVuIHdpcGh5IHJhZGlvICovXFxuIFxcdFxcdGlmIChyYWRpb19pZHggXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIShyZGV2X2dldF9yYWRpb19tYXNrKHJkZXYsIHdkZXYtXFx1MDAzZW5ldGRldikgXFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0d2Rldl9iaSA9IGNmZzgwMjExX3dkZXZfYmkod2Rldik7XFxuLVxcbi1cXHRcXHRpZiAoIXdkZXZfYmkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4gXFx0XFx0aWYgKCEqYmVhY29uX2ludF9nY2QpIHtcXG4gXFx0XFx0XFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjE4LjMzMjYzMjc3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc4MjA2NTU0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc2Nhbl9kb25lXCIsXG4gICAgXCJfX19jZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tcIixcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJjZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiX19jZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICAgIFwiX19jZmc4MDIxMV9ic3NfdXBkYXRlXCIsXG4gICAgXCJjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5XCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VcIixcbiAgICBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNjcxNWUwMWVkMDcxYmIxNjQ0MTE5M2I0Y2Q3NWM1NDdiZDJiNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjUwOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMjQ0LDkgKzI0NCw4IEBAIHZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gXG4gXHRpZiAocmRldi1cdTAwM2VzY2FuX3JlcSBcdTAwMjZcdTAwMjYgcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VyZXEud2RldiA9PSB3ZGV2KSB7XG4tXHRcdGlmIChXQVJOX09OKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0ICAgICAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKSlcbitcdFx0aWYgKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcbiBcdH1cbkBAIC02NDYsNiArNjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmssIGNmZzgwMjExX2Rlc3Ryb3lfaWZhY2Vfd2spO1xuIFx0d2lwaHlfd29ya19pbml0KFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9zdG9wX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Bfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7XG4rXHR3aXBoeV93b3JrX2luaXQoXHUwMDI2cmRldi1cdTAwM2VyZWdfY2hlY2tfY2hhbnNfd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKTtcbitcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxuIFx0XHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spO1xuQEAgLTEzNDUsNiArMTM0Niw3IEBAIHZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJkZXYtXHUwMDNlZGZzX3VwZGF0ZV9jaGFubmVsc193ayk7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cmRldi1cdTAwM2ViYWNrZ3JvdW5kX2NhY19kb25lX3drKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmspO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9jYWNfZG9uZV93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlbWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7XG5AQCAtMTc1OCw5ICsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuIFx0XHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXNjYW5fcmVxIFx1MDAyNlx1MDAyNiByZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0XHQgICAgICFyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2Vub3RpZmllZCkpKVxuK1x0XHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fFxuK1x0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSlcbiBcdFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0XHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtMjQsNiArMjQsMTYgQEBcbiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIGluZm87XG4gXHRib29sIG5vdGlmaWVkO1xuK1x0LypcbitcdCAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuXG4rXHQgKiByZGV2X3NjYW4oKSBhbmQgY2ZnODAyMTFfc2Nhbl9kb25lKClcbitcdCAqL1xuK1x0Ym9vbCBkcml2ZXJfb3ducztcbitcdC8qXG4rXHQgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGxcbitcdCAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0XG4rXHQgKi9cbitcdGJvb2wgc3RhbGU7XG4gXHQvKiBtdXN0IGJlIGxhc3QgLSB2YXJpYWJsZSBtZW1iZXJzICovXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHJlcTtcbiB9O1xuQEAgLTEwNCw2ICsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yaztcbiBcdHN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93aztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcbitcdHN0cnVjdCB3aXBoeV93b3JrIHJlZ19jaGVja19jaGFuc193aztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWdfbGVhdmVfbmFuX3drO1xuIFxuIFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHJhZGFyX2NoYW5kZWY7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93aztcbkBAIC0yODAsOCArMjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHtcbiBcdFx0XHRib29sIGxvY2FsbHlfZ2VuZXJhdGVkO1xuIFx0XHR9IGRjO1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7XG4rXHRcdFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0XHR9IGlqO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHU4IHBlZXJfYWRkcltFVEhfQUxFTl07XG5AQCAtMzQ0LDggKzM1NSw3IEBAIGludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTtcbiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xuLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4tXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7XG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7XG4gaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXG4rKysgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5AQCAtMTYsMjYgKzE2LDE4IEBAXG4gI2luY2x1ZGUgXCJyZGV2LW9wcy5oXCJcbiBcbiBcbi12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcylcbiB7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4tXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XG4gI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG4gXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4gI2VuZGlmXG4gXG4gXHRpZiAoV0FSTl9PTih3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpXG4tXHRcdHJldHVybjtcbitcdFx0Z290byBwdXRfYnNzO1xuIFxuIFx0aWYgKCF3ZGV2LVx1MDAzZXUuaWJzcy5zc2lkX2xlbilcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4tXG4tXHRpZiAoV0FSTl9PTighYnNzKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpIHtcbiBcdFx0Y2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XG5AQCAtNDMsMTcgKzM1LDIyIEBAIHZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4gXHR9XG4gXG4gXHRjZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7XG4rXHQvKiB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGV2ZW50IGlzIHRyYW5zZmVycmVkIHRvIGN1cnJlbnRfYnNzICovXG4gXHR3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2JzcyA9IGJzc19mcm9tX3B1Yihic3MpO1xuIFxuIFx0Y2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTtcbiBcbi1cdG5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSksIGRldiwgYnNzaWQsXG4rXHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cdTAwM2Vic3NpZCxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7XG4rXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFx0d2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgXHUwMDI2d3JxdSwgTlVMTCk7XG4gI2VuZGlmXG4rXHRyZXR1cm47XG4rXG4rcHV0X2JzczpcbitcdGNmZzgwMjExX3B1dF9ic3Mod2Rldi1cdTAwM2V3aXBoeSwgYnNzKTtcbiB9XG4gXG4gdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG5AQCAtNjIsNiArNTksNyBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2O1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHRyYWNlX2NmZzgwMjExX2lic3Nfam9pbmVkKGRldiwgYnNzaWQsIGNoYW5uZWwpO1xuQEAgLTY5LDEzICs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdGlmIChXQVJOX09OKCFjaGFubmVsKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbitcdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4rXHRpZiAoV0FSTl9PTighYnNzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXYgPSBremFsbG9jX29iaigqZXYsIGdmcCk7XG4tXHRpZiAoIWV2KVxuK1x0aWYgKCFldikge1xuK1x0XHRjZmc4MDIxMV9wdXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGJzcyk7XG4gXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdGV2LVx1MDAzZXR5cGUgPSBFVkVOVF9JQlNTX0pPSU5FRDtcbi1cdG1lbWNweShldi1cdTAwM2Vpai5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcbi1cdGV2LVx1MDAzZWlqLmNoYW5uZWwgPSBjaGFubmVsO1xuK1x0ZXYtXHUwMDNlaWouYnNzID0gYnNzO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2d2Rldi1cdTAwM2VldmVudF9sb2NrLCBmbGFncyk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmV2LVx1MDAzZWxpc3QsIFx1MDAyNndkZXYtXHUwMDNlZXZlbnRfbGlzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTQ2NCw3ICs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0cmFjZV9yZGV2X3NjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmVxdWVzdCk7XG4rXHRyZXF1ZXN0LVx1MDAzZWRyaXZlcl9vd25zID0gdHJ1ZTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZXNjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgXHUwMDI2cmVxdWVzdC1cdTAwM2VyZXEpO1xuK1x0aWYgKHJldClcbitcdFx0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IGZhbHNlO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLjExNjY1ZTBhN2VmYzggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTIzNDUsNyArMjM0NSw3IEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiBcdGlmdHlwZSA9IHdkZXYtXHUwMDNlaWZ0eXBlO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRoZSBpbnRlcmZhY2UgaXMgYWN0aXZlICovXG4tXHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKHdkZXYtXHUwMDNlbmV0ZGV2KSlcbitcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIE5BTiBkb2Vzbid0IGhhdmUgbGlua3MsIGhhbmRsZSBpdCBzZXBhcmF0ZWx5ICovXG5AQCAtMjQ0NiwxOSArMjQ0Niw1MiBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSlcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1xuK1x0cmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsXG4rXHRcdFx0ICAgIHJlZ19sZWF2ZV9uYW5fd2spO1xuK1xuK1x0Lyogc3RvcHBpbmcgTkFOIGNsb3NlcyBpdHMgZGF0YSBpbnRlcmZhY2VzLCB3aGljaCBuZWVkcyB0aGUgUlROTCAqL1xuK1x0cnRubF9sb2NrKCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdGJvb2wgdmFsaWQ7XG4gXG4tXHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXG4tXHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTtcbitcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuK1x0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2KTtcbiBcdFx0aWYgKCF2YWxpZClcbiBcdFx0XHRjZmc4MDIxMV9sZWF2ZShyZGV2LCB3ZGV2LCAtMSk7XG4gXHR9XG4rXG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxuK3tcbitcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1x0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2lwaHktXHUwMDNlbXR4KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBUZWFyaW5nIGRvd24gTkFOIG5lZWRzIHRoZSBSVE5MIGZvciBjbG9zaW5nIE5BTl9EQVRBXG4rXHRcdCAqIGludGVyZmFjZXMsIGhhbmRsZSB0aGF0IHNlcGFyYXRlbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxuK1x0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VyZWdfbGVhdmVfbmFuX3drKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNmZzgwMjExX2xlYXZlX2xvY2tlZChyZGV2LCB3ZGV2LCAtMSk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbkBAIC0yNDY2LDEyICsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwiVmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cIik7XG4tXHRydG5sX2xvY2soKTtcbiBcbi1cdGZvcl9lYWNoX3JkZXYocmRldilcbi1cdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRydG5sX3VubG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KVxuK1x0XHR3aXBoeV93b3JrX3F1ZXVlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIFx1MDAyNnJkZXYtXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drKTtcbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaFxuaW5kZXggZmMzMWM1ZjlhNjFhYi4uYzU4NzA3OWVhZDhmYiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oXG5AQCAtMTc4LDYgKzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcbiAgKi9cbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTtcbiBcbisvKipcbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayAtIGNoZWNrIGlmIGNoYW5uZWxzIGFyZSBubyBsb25nZXIgdXNhYmxlIGFuZCBsZWF2ZVxuKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXG4rICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxuKyAqL1xuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xuK1xuKy8qKlxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGVcbisgKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4rICpcbisgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC5cbisgKi9cbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuK1xuIGV4dGVybiBjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW107XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcbiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xMTE0LDYgKzExMTQsMjEgQEAgaW50IGNmZzgwMjExX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxuKyAqIGUuZy4gbWFjODAyMTEgbWF5IGNhbmNlbCBpdCBhc3luY2hyb25vdXNseSBhbmQgc3RpbGwgdXNlIGl0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxuK3tcbitcdGlmICghcmVxKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVxLVx1MDAzZWRyaXZlcl9vd25zKVxuK1x0XHRyZXEtXHUwMDNlc3RhbGUgPSB0cnVlO1xuK1x0ZWxzZVxuK1x0XHRrZnJlZShyZXEpO1xuK31cbitcbiB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgYm9vbCBzZW5kX21lc3NhZ2UpXG4ge1xuQEAgLTExNzMsMTAgKzExODgsMTAgQEAgdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFxuIFx0ZGV2X3B1dCh3ZGV2LVx1MDAzZW5ldGRldik7XG4gXG4tXHRrZnJlZShyZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xuIFxuLVx0a2ZyZWUocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4gXHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbiBcbiBcdGlmICghc2VuZF9tZXNzYWdlKVxuQEAgLTExOTksNiArMTIxNCwxOCBAQCB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LFxuIFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBvbGRfaW5mbyA9IGludHJlcS1cdTAwM2VpbmZvO1xuIFxuIFx0dHJhY2VfY2ZnODAyMTFfc2Nhbl9kb25lKGludHJlcSwgaW5mbyk7XG4rXG4rXHRpbnRyZXEtXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcbitcbitcdGlmIChpbnRyZXEtXHUwMDNlc3RhbGUpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHNjYW4gaXMgYWxyZWFkeSBjb21wbGV0ZWQgYXMgZmFyIGFzIHdlJ3JlIGNvbmNlcm5lZCxcbitcdFx0ICogaXQgd2FzIGp1c3Qga2VwdCBhcm91bmQgZm9yIHRoZSBkcml2ZXIgLSBkb25lIG5vdywgZnJlZSBpdC5cbitcdFx0ICovXG4rXHRcdGtmcmVlKGludHJlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2XG4gXHRcdGludHJlcSAhPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4gXG5AQCAtMjA1MCw2ICsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0aWYgKCFoaWRkZW4pXG4gXHRcdFx0XHRoaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsXG4gXHRcdFx0XHRcdFx0ICAgICBCU1NfQ01QX0hJREVfTlVMKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcbitcdFx0XHQgKiBiZWFjb24gZGF0YSBjYW4gbmV2ZXIgYmUgZmlsbGVkL3VwZGF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGhpZGRlbiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tXHUwMDNlcHViLmJlYWNvbl9pZXMpKVxuK1x0XHRcdFx0aGlkZGVuID0gTlVMTDtcbiBcdFx0XHRpZiAoaGlkZGVuKSB7XG4gXHRcdFx0XHRuZXctXHUwMDNlcHViLmhpZGRlbl9iZWFjb25fYnNzID0gXHUwMDI2aGlkZGVuLVx1MDAzZXB1YjtcbiBcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ldy1cdTAwM2VoaWRkZW5fbGlzdCxcbkBAIC0zNDY4LDExICszNTAyLDYgQEAgdm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRjYnNzLVx1MDAzZXB1Yi5jaGFubmVsID0gY2hhbjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLVx1MDAzZXB1Yi5jYXBhYmlsaXR5LFxuLVx0XHRcdFx0XHQgICAgIGJzcy1cdTAwM2VwdWIuY2hhbm5lbC1cdTAwM2ViYW5kLFxuLVx0XHRcdFx0XHQgICAgIHdkZXYtXHUwMDNlY29ubl9ic3NfdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChic3MgPT0gY2JzcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZjI0NjRkMmNlMGQ1YSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbisrKyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0xMDM5LDEyICsxMDM5LDMwIEBAIHVuc2lnbmVkIGludCBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4tXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcihza2IpKSBcdTAwMjYgMHhmYztcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0XHRzdHJ1Y3QgaXBoZHIgX2lwaDtcbitcbitcdFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuK1x0XHRcdFx0XHQgc2l6ZW9mKCppcGgpLCBcdTAwMjZfaXBoKTtcbitcdFx0aWYgKCFpcGgpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi1cdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSkgXHUwMDI2IDB4ZmM7XG4rXHR9XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0XHRzdHJ1Y3QgaXB2NmhkciBfaXA2aDtcbitcbitcdFx0aXA2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcbitcdFx0XHRcdFx0ICBzaXplb2YoKmlwNmgpLCBcdTAwMjZfaXA2aCk7XG4rXHRcdGlmICghaXA2aClcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcbiBcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcbiBcdFx0c3RydWN0IG1wbHNfbGFiZWwgbXBsc190bXAsICptcGxzO1xuQEAgLTEyMTcsOCArMTIzNSw3IEBAIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0XHRcdFx0XHRcdCFldi1cdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRVZFTlRfSUJTU19KT0lORUQ6XG4tXHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzaWQsXG4tXHRcdFx0XHRcdCAgICAgICBldi1cdTAwM2Vpai5jaGFubmVsKTtcbitcdFx0XHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXHUwMDNlbmV0ZGV2LCBldi1cdTAwM2Vpai5ic3MpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVWRU5UX1NUT1BQRUQ6XG4gXHRcdFx0LypcbkBAIC0yNDc3LDE2ICsyNDk0LDE1IEBAIHN0YXRpYyB2b2lkIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBuZXdfYmVhY29uX2ludCxcbiBcdFx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuK1x0XHRpZiAoIXdkZXZfYmkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi9cbiBcdFx0aWYgKHJhZGlvX2lkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi1cdTAwM2VuZXRkZXYpIFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuLVxuLVx0XHRpZiAoIXdkZXZfYmkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghKmJlYWNvbl9pbnRfZ2NkKSB7XG4gXHRcdFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjE4LjMzMjYzNDI2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODI4ODA0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLCBhcyBhbHdheXMuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYG5ldC93aXJlbGVzc2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYGNmZzgwMjExYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgYWxzbyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV2YWx1YXRpbmcgdGhlIHZ1bG5lcmFiaWxpdHkgcG90ZW50aWFsIG9mIHRoZSBwYXRjaC4gVGhlIGZpbGVzIHRvdWNoZWQgc3BhbiBhIGRlY2VudCBjaHVuayBvZiB0aGUgYGNmZzgwMjExYCBjb2RlLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczogRmlyc3QsIHRoZSByZW1vdmFsIG9mIGBXQVJOX09OYCBpbiBzY2FuIGFib3J0IGhhbmRsaW5nLiBUaGF0J3MgYSBjbGFzc2ljIHNpZ25hbCBvZiBwb3RlbnRpYWxseSByZWxheGVkIGVycm9yIGNoZWNrczsgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgYSBiaXQgdGhlcmUuIFNlY29uZCwgdGhlIGluaXRpYWxpemF0aW9uL2ZsdXNoaW5nIG9mIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgaW4gYHdpcGh5X25ld19ubWAgc3VnZ2VzdHMgY2hhbmdlcyB0byB3b3JrIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIHBsYWNlIHRvIHdhdGNoIGNsb3NlbHksIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIGNvbnRleHQuIFRoaXJkLCB0aGUgc2NhbiByZXF1ZXN0IGxpZmV0aW1lIG1hbmFnZW1lbnQgaXMgYmVpbmcgb3ZlcmhhdWxlZCB3aXRoIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgZmxhZ3MuIFRoYXQgc291bmRzIGxpa2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2FpdGluZyB0byBoYXBwZW4uIFRoZSBsb2dpYyBhcm91bmQgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBzY2FuIHJlcXVlc3RzIGlzIG9mdGVuIHRyaWNreS5cblxuVGhlIGZvdXJ0aCBjaGFuZ2UsIHdoaWNoIGhhcyB0byBkbyB3aXRoIGhvdyBgY2ZnODAyMTFfYnNzYCByZWZlcmVuY2VzIGFyZSBiZWluZyBoYW5kbGVkIGFuZCB0aGVpciByZWxhdGVkIHJlZmVyZW5jZSBjb3VudGluZyBiZWluZyB0aWdodGVuZWQsIGlzIGFub3RoZXIgYXJlYSB0byBmb2N1cyBvbi4gRmlmdGgsIHRoZSBjaGFubmVsIGludmFsaWRhdGlvbiBzcGxpdCBhbmQgd29ya3F1ZXVlIGNoYW5nZSBmcm9tIFJUTkwgbG9ja2luZyB0byBSQ1UgaW4gYHJlZy5jYCBpcyBzaWduaWZpY2FudC4gVGhhdCdzIGEgZ29vZCBtb3ZlIHRvIGltcHJvdmUgY29uY3VycmVuY3ksIGJ1dCBpdCBhbHNvIG9wZW5zIHRoZSBkb29yIHRvIHBvdGVudGlhbCBzdWJ0bGUgaXNzdWVzIGlmIG5vdCBpbXBsZW1lbnRlZCBwZXJmZWN0bHkuIFRoZSB1c2Ugb2YgYHdkZXZfcnVubmluZyh3ZGV2KWAgc3VnZ2VzdHMgc29tZSByZWxhdGVkIGNoYW5nZXMgaW4gdGhlIHJ1bnRpbWUgc3RhdGUgb2YgYSB3aXJlbGVzcyBkZXZpY2UuIFNpeHRoIGFuZCBzZXZlbnRoIHRoZSBjaGFuZ2VzIGluIGBzY2FuLmNgIGFuZCBgdXRpbC5jYCBsb29rIGxpa2UgaW5jcmVtZW50YWwgY2hhbmdlcyB3aXRoIHBvdGVudGlhbCBpbXBhY3QuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSBmdXp6IHRoaXMgd2l0aCBzeXprYWxsZXI/IFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGtub3csIGBjZmc4MDIxMWAsIGBtYWM4MDIxMWAsIGFuZCBhc3NvY2lhdGVkIGNvbXBvbmVudHMgYXJlIGluZGVlZCBmdXp6YWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgYG1hYzgwMjExX2h3c2ltYCBpbnRlcmZhY2UsIE5MODAyMTEsIGFuZCBzaW11bGF0ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyBhcmUgYWxsIGhlYXZpbHkgdXNlZCBpbiBzeXprYWxsZXIuIFRoYXQncyBhIGJpZyBwbHVzLCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLlxuXG5Pa2F5LCBJJ20gZ29pbmcgdG8gc3RhcnQgcnVubmluZyBzb21lIGdyZXBzIG9yIGNvZGUgaW5zcGVjdGlvbnMgdG8gY29uZmlybS4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBzaG90LCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzY3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6MjQuMTE1NTE3MTU1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODI3MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI0LjIwNzM0NzQ3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTM5NTQ0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvZiBDRkc4MDIxMS4gV2hhdCBmZWF0dXJlcyByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IGhpZGRlbiwgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkgbWlnaHQgb3Zlcmxvb2s/IEEgZGV0YWlsZWQgcmV2aWV3IGhlcmUgd2lsbCBoZWxwIGVuc3VyZSB0aGUgZW50aXJlIHN5c3RlbSBpcyBjb25maWd1cmVkIGFzIGV4cGVjdGVkIGFuZCBhdm9pZCBhbnkgcnVudGltZSBzdXJwcmlzZXMgbGF0ZXIuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIG5haWxpbmcgZG93biBhbGwgdGhlIGNvbm5lY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI2LjAyMTMwNDA2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGlmIENGRzgwMjExXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuICAzOTpcXHRcXHRib29sIFxcXCJubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcXFwiXFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI2LjAyMTM4NDMyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMjI2OTQ4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBIYXJkd2FyZSBTaW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgdHJvdWJsZXNob290aW5nIHBhdGgsIEkgc2hvdWxkIHJlYWxseSBkb3VibGUtY2hlY2sgdGhlIGBtYWM4MDIxMV9od3NpbWAgS2NvbmZpZyBzZXR0aW5ncy4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBoaWdoZXItbGV2ZWwgZHJpdmVycywgYnV0IGEgbWlzY29uZmlndXJhdGlvbiB0aGVyZSBjb3VsZCBiZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUuIEEgc2ltcGxlIG92ZXJzaWdodCBpbiB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudCdzIGJ1aWxkIG9wdGlvbnMgY291bGQgZXhwbGFpbiB0aGUgb2RkIGJlaGF2aW9yIEknbSBzZWVpbmcuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBidXQgb25lIHRoYXQgY291bGQgc2F2ZSBtZSBhIGxvdCBvZiB0aW1lIGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGFsbCBzcXVhcmVkIGF3YXkgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyLiBUaGF0IGhhcmR3YXJlIHNpbXVsYXRpb24gY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSB2ZXJpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI4LjA0NDA4MDkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTc3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjI4LjE0MzA2MTEwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjc4NDc0MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBBbmFseXNpcyBmb3IgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBhcyBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgcGF0Y2guIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyB0aGF0IGFyZSBlaXRoZXIgcHVibGljIG9yIG90aGVyd2lzZSBzaWduaWZpY2FudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gncyBjaGFuZ2VzLlxuXG5GaXJzdCwgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50OlxuXG4qICAgYGNmZzgwMjExX3N0b3BfcDJwX2RldmljZWBcbiogICBgd2lwaHlfbmV3X25tYFxuKiAgIGB3aXBoeV91bnJlZ2lzdGVyYFxuKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGBcbiogICBgX19jZmc4MDIxMV9pYnNzX2pvaW5lZGBcbiogICBgY2ZnODAyMTFfaWJzc19qb2luZWRgXG4qICAgYHJkZXZfc2NhbmAgKGlubGluZSkgLSBJJ2xsIG5lZWQgdG8gY2hlY2sgYHNjYW4uY2AgZm9yIGNhbGwgc2l0ZXMgb3IgcmVsYXRlZCBmdW5jdGlvbnMuXG4qICAgYHJlZ193ZGV2X2NoYW5fdmFsaWRgXG4qICAgYHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a2BcbiogICBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgXG4qICAgYHJlZ19jaGVja19jaGFuc193b3JrYFxuKiAgIGBjZmc4MDIxMV9wdXRfc2Nhbl9yZXFgIChzdGF0aWMpIC0gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIG9uZS5cbiogICBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYFxuKiAgIGBjZmc4MDIxMV9zY2FuX2RvbmVgXG4qICAgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWBcbiogICBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWBcbiogICBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGBcbiogICBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2BcbiogICBgY2ZnODAyMTFfY2FsY3VsYXRlX2JpX2RhdGFgXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZmlsdGVyIHRoaXMgbGlzdC4gSSdsbCBmbGFnIHRoZSBzdGF0aWMgb25lcywgbGlrZSBgY2ZnODAyMTFfcHV0X3NjYW5fcmVxYCBhbmQgYHJlZ19jaGVja19jaGFuc193b3JrYCwgYXMgcG90ZW50aWFsbHkgbGVzcyBpbXBvcnRhbnQgdW5sZXNzIHRoZXkgaGF2ZSBzaWduaWZpY2FudCBpbnRlcm5hbCBkZXBlbmRlbmNpZXMgb3IgYXJlIGNhbGxlZCBmcm9tIG91dHNpZGUuIFRoZSBpbmxpbmUgYHJkZXZfc2NhbmAgd2lsbCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuTmV4dCwgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgc291cmNlIGZpbGVzIHRoZW1zZWx2ZXMgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGU6IGBzY2FuLmNgLCBgaWJzcy5jYCwgYHJlZy5jYCwgYHV0aWwuY2AsIGFuZCBgY29yZS5jYCBhcHBlYXIgdG8gYmUgdGhlIGtleSBhcmVhcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gc2VlIHdoYXQgSSBtaWdodCBiZSBtaXNzaW5nLlxuXG5CYXNlZCBvbiB0aGF0LCBhIHNtYWxsZXIgc2V0IG9mIGNhbmRpZGF0ZXMgZW1lcmdlcyBhcyBwYXJ0aWN1bGFybHkgY3JpdGljYWwgdG8gaGlnaGxpZ2h0OlxuXG4qICAgYGNmZzgwMjExX3NjYW5fZG9uZWBcbiogICBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYFxuKiAgIGBjZmc4MDIxMV9zY2FuYCAoSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGluIHRoZSBwYXRjaCBzY29wZSlcbiogICBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYFxuKiAgIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193a2BcbiogICBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIC8gYHJlZ19jaGVja19jaGFubmVsc2BcbiogICBgY2ZnODAyMTFfaWJzc19qb2luZWRgXG4qICAgYF9fY2ZnODAyMTFfaWJzc19qb2luZWRgXG4qICAgYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgXG4qICAgYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWBcbiogICBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWBcbiogICBgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlYFxuKiAgIGBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbGBcblxuRmluYWxseSwgSSdsbCBkbyBhIHF1aWNrIGNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIGFjdHVhbGx5IHByZXNlbnQgYW5kIGRlZmluZWQgd2l0aGluIHRoZSB1cGRhdGVkIGNvZGViYXNlLiBUaGF0J3MgdGhlIGxhc3QgdmVyaWZpY2F0aW9uIEkgbmVlZCB0byBtYWtlIGJlZm9yZSBJJ20gc2F0aXNmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo0MC40MjE1MzgyOTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzI2MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9zY2FuLmM9MTIwMz12b2lkIF9fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3aylcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTIwNy1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEyMDg6dm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCxcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMDktXFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyAqaW5mbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NDAuNDc5ODcxNzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTczMzIxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFub21hbGllcyBpbiBMZWF2ZSBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsZWF2ZSByZWdpc3RyYXRpb24gZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBoYW5kbGluZyBtaXNzaW5nIG9yIGludmFsaWQgdmFsdWVzIGNvcnJlY3RseSwgZXNwZWNpYWxseSBhcm91bmQgbGVhdmUgcmVxdWVzdHMuIE15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHR3byBzcGVjaWZpYyB2YXJpYWJsZXM6IGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgLiBJIHN1c3BlY3QgdGhlc2UgdmFyaWFibGVzIGFyZSBrZXkgaW4gZmxhZ2dpbmcgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgbGVhdmUgZW50cmllcy4gSSBleHBlY3QgYHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a2AgdG8gYWRkcmVzcyB3ZWVrcyB3aXRoIG1pc3NpbmcgbnVtZXJpY2FsIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBwcmVzZW50IGFuZCBJIGFsc28gZXhwZWN0IGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193a2AgdG8gYWRkcmVzcyB3ZWVrcyB3aXRoIGluY29ycmVjdCBvciBtaXNzaW5nIGNoYW5uZWwgaW5mb3JtYXRpb24gdGllZCB0byB0aGUgbGVhdmUgcmVxdWVzdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRhdGEgYWN0dWFsbHkgdGVsbHMgdXMgYWJvdXQgdGhlc2UgdmFyaWFibGVzLiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo0Mi40MzcyMDY2OTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTIxMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ19sZWF2ZV9pbnZhbGlkX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuYz01NDg9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY0Ny1cXHRJTklUX1dPUksoXFx1MDAyNnJkZXYtXFx1MDAzZXNjaGVkX3NjYW5fcmVzX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHNfd2spO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjQ4OlxcdHdpcGh5X3dvcmtfaW5pdChcXHUwMDI2cmRldi1cXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drLCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo2NDk6XFx0SU5JVF9XT1JLKFxcdTAwMjZyZGV2LVxcdTAwM2VyZWdfbGVhdmVfbmFuX3drLCByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2spO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjUwLVxcdElOSVRfV09SSyhcXHUwMDI2cmRldi1cXHUwMDNlcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93ayxcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMzM3PXN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDQ4LVxcbm5ldC93aXJlbGVzcy9yZWcuYzoyNDQ5OnZvaWQgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ1MC17XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ3NC1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ3NTp2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc2LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuaD0xNzk9dm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZCk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTgxLS8qKlxcbm5ldC93aXJlbGVzcy9yZWcuaDoxODI6ICogcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2sgLSBjaGVjayBpZiBjaGFubmVscyBhcmUgbm8gbG9uZ2VyIHVzYWJsZSBhbmQgbGVhdmVcXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTgzLSAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTg1LSAqL1xcbm5ldC93aXJlbGVzcy9yZWcuaDoxODY6dm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5oLTE4Ny1cXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTg4LS8qKlxcbm5ldC93aXJlbGVzcy9yZWcuaDoxODk6ICogcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drIC0gY2hlY2sgY2hhbm5lbHMgYW5kIHRlYXIgZG93biBOQU4gd2hlbiB1bnVzYWJsZVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xOTAtICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5oLTE5Mi0gKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTkzOiAqIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKCkgd2hpY2ggcnVucyB3aXRoIHRoZSB3aXBoeSBtdXRleCBoZWxkLlxcbm5ldC93aXJlbGVzcy9yZWcuaC0xOTQtICovXFxubmV0L3dpcmVsZXNzL3JlZy5oOjE5NTp2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC93aXJlbGVzcy9yZWcuaC0xOTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjQyLjQ4NjMzMTAzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTMzNDUxMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBCU1MgVXBkYXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IEJTUyBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIHRoZSB3aXJlbGVzcyBzdGFjaywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGFzc29jaWF0aW9uIHVwZGF0ZXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhbmQgYGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlgLiBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIG1hbmFnaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhY2Nlc3MgcG9pbnRzIGFuZCBob3cgb3VyIGRldmljZSBhc3NvY2lhdGVzIHdpdGggdGhlbSwgc28gSSB3YW50IGEgY2xlYXIgcGljdHVyZS4gSSdtIGltYWdpbmluZyBgX19jZmc4MDIxMV9ic3NfdXBkYXRlYCBhcyB0aGUgZm91bmRhdGlvbmFsIGZ1bmN0aW9uLCB0aGUgbG93ZXItbGV2ZWwgd29ya2hvcnNlIHRoYXQgbGlrZWx5IGRvZXMgdGhlIGJ1bGsgb2YgdGhlIGRpcnR5IHdvcmsuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLCB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgQlNTIGVudHJ5IHdpdGggbmV3IGluZm9ybWF0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0aGluZ3MgZ2V0IGNvbmNyZXRlLiBGcm9tIHRoZXJlIEknbSBndWVzc2luZyBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWAgcHJvYmFibHkgc2l0cyBhIGxldmVsIGhpZ2hlciBhbmQgbWFrZXMgZGVjaXNpb25zIGFib3V0IHdoYXQgbmVlZHMgdXBkYXRpbmcsIGNhbGxzIGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFzIG5lZWRlZCwgYW5kIHBlcmhhcHMgZGVhbHMgd2l0aCBtb3JlIGFzc29jaWF0aW9uLXNwZWNpZmljIGxvZ2ljLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYF9fY2ZnODAyMTFfYnNzX3VwZGF0ZWAgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBjb25jdXJyZW50IGFjY2Vzcy4gQXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQgYW5kIGhvdyBhcmUgdGhvc2Ugc3RydWN0dXJlcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnM/IFdoYXQgaWYgdGhlIHNhbWUgQlNTIGVudHJ5IGlzIGJlaW5nIHVwZGF0ZWQgZnJvbSBtdWx0aXBsZSBzb3VyY2VzPyBUaGVuIEknbGwgaGF2ZSB0byBzZWUgaWYgdGhlIHNlY29uZCBmdW5jdGlvbiBtYWtlcyBhIHNlcGFyYXRlIGNoZWNrLiBJdCBpcyBtb3N0IGxpa2VseSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGFzc29jaWF0aW9uIHByb2Nlc3Mgb3IgYSByZWxhdGVkIGNvbm5lY3Rpb24gc3RhdGUuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgaW5mb3JtYXRpb24gY29tZXMgZnJvbSB0aGF0IGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBCU1MgZW50cnk6IElzIGl0IGZyb20gdGhlIGZpcm13YXJlLCB0aGUgZHJpdmVyLCBvciBmcm9tIHRoZSBzY2FuIHJlc3VsdHM/IFRoZW4gSSdsbCBjaGVjayBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgcmVndWxhdG9yeSBkYXRhYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyOTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo0NS42MTk3ODU5MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzI0MjEyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NmZzgwMjExX2Jzc191cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9zY2FuLmM9MjAzND1zdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoyMDM1Ol9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yMDM2LVxcdFxcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnRtcCxcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM9MjE0NT1jZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjE1MS1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19sb2NrKTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjIxNTI6XFx0cmVzID0gX19jZmc4MDIxMV9ic3NfdXBkYXRlKHJkZXYsIHRtcCwgc2lnbmFsX3ZhbGlkLCB0cyk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yMTUzLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyZGV2LVxcdTAwM2Vic3NfbG9jayk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTIzMjU9Y2ZnODAyMTFfaW5mb3JtX3NpbmdsZV9ic3NfZGF0YShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDM5LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cmRldi1cXHUwMDNlYnNzX2xvY2spO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MjQ0MDpcXHRyZXMgPSBfX2NmZzgwMjExX2Jzc191cGRhdGUocmRldiwgXFx1MDAyNnRtcCwgc2lnbmFsX3ZhbGlkLCB0cyk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDQxLVxcdGlmICghcmVzKVxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNDYyLVxcdHRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoXFx1MDAyNnJlcy1cXHUwMDNlcHViKTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjI0NjM6XFx0LyogX19jZmc4MDIxMV9ic3NfdXBkYXRlIGdpdmVzIHVzIGEgcmVmZXJlbmNlZCByZXN1bHQgKi9cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTI0NjQtXFx0cmV0dXJuIFxcdTAwMjZyZXMtXFx1MDAzZXB1YjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NDYuMDUzMDMxNjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNzk1ODk4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGludm9sdmVkIGluIHRoZSA4MDIuMUQgY2xhc3NpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGNmZzgwMjExIGZyYW1ld29yay4gR2l2ZW4gdGhlIG5hbWUsIEknbSBiZXR0aW5nIGl0IGhhbmRsZXMgY2xhc3NpZnlpbmcgdHJhZmZpYyBiYXNlZCBvbiB0aGUgODAyLjFEIHN0YW5kYXJkLCBwcm9iYWJseSByZWxhdGVkIHRvIFZMQU4gdGFnZ2luZywgcHJpb3JpdHkgYml0cywgb3Igc29tZSBraW5kIG9mIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKSBkZXRlcm1pbmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBpdCdzIGRvaW5nIHRoZSBjbGFzc2lmaWNhdGlvbi4gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgYml0d2lzZSBjaGVjaz8gRG9lcyBpdCB1dGlsaXplIGxvb2t1cCB0YWJsZXMgb3Igc29tZSBtb3JlIGNvbXBsZXggYWxnb3JpdGhtPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/XG5cbkkgc2hvdWxkIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyB0byB0aGlzIGZ1bmN0aW9uOiB3aGF0IGtpbmQgb2YgcGFja2V0IGluZm9ybWF0aW9uIGlzIGl0IHJlY2VpdmluZz8gSXMgaXQgdGhlIGVudGlyZSBFdGhlcm5ldCBmcmFtZSwganVzdCB0aGUgVkxBTiBoZWFkZXIsIG9yIHNvbWV0aGluZyBlbHNlPyBUaGVuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgb3V0cHV0cyBhcmUg4oCTIGlzIGl0IHJldHVybmluZyBhIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgYSBwcmlvcml0eSB2YWx1ZSwgb3IgbW9kaWZ5aW5nIHNvbWUga2luZCBvZiBpbnRlcm5hbCBzdGF0ZT8gSSdsbCBwcm9iYWJseSBsb29rIGZvciB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgc29tZSBkZWNlbnQgY29tbWVudHMgd2l0aGluIHRoZSBmdW5jdGlvbiBvciBzdXJyb3VuZGluZyBjb2RlIHRoYXQgd2lsbCBoZWxwLiBLbm93aW5nIHRoZSBpbnRlcm5hbHMgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFFvUyBmbG93LCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IGluIGFueSBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBtYWtlLCBvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjI4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NDkuMzMyNjI0NTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMwNzU2ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3V0aWwuYz0xMDEyPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKTtcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMTAxNC0vKiBHaXZlbiBhIGRhdGEgZnJhbWUgZGV0ZXJtaW5lIHRoZSA4MDIuMXAvMWQgdGFnIHRvIHVzZS4gKi9cXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEwMTU6dW5zaWduZWQgaW50IGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEwMTYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9xb3NfbWFwICpxb3NfbWFwKVxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMTY2LX1cXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjExNjc6RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKTtcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTExNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjQ5LjYyNTcwMzQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjcyMzc2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCBgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UgdGhpcyBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGFzeW5jaHJvbm91cyB3aXJlbGVzcyBkZXZpY2UgZXZlbnRzIHdpdGhpbiB0aGUgY2ZnODAyMTEgY29yZSwgcmlnaHQ/IFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV2ZW50cyBhcmUgcXVldWVkLCBwcm9jZXNzZWQsIGFuZCB1bHRpbWF0ZWx5IGRlbGl2ZXJlZCB0byB0aGUgcmVsZXZhbnQgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZmxvdy4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBzb21lIHNvcnQgb2Ygd29ya3F1ZXVlIG9yIHRhc2tsZXQgbWVjaGFuaXNtLCBjb25zaWRlcmluZyB0aGUgbmVlZCB0byBkZWNvdXBsZSBldmVudCBnZW5lcmF0aW9uIGZyb20gdGhlIGNvbnRleHQgd2hlcmUgdGhlIGV2ZW50IG9jY3Vycy4gSSdtIGtlZW4gdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBtYW5hZ2VkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIHdpcmVsZXNzIGRldmljZXMuIElzIHRoZXJlIGEgbG9jayBwcm90ZWN0aW5nIHRoZSBldmVudCBxdWV1ZSwgYW5kIGlmIHNvLCB3aGF0J3MgaXRzIGdyYW51bGFyaXR5PyBXaGF0IGFib3V0IGV2ZW50IG9yZGVyaW5nPyBJcyB0aGVyZSBhIGd1YXJhbnRlZSBldmVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gYSBzcGVjaWZpYyBzZXF1ZW5jZSwgb3IgaXMgaXQgaGFuZGxlZCBpbiBhIFwiYmVzdCBlZmZvcnRcIiBzdHlsZT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGRpZmZlcmVudCBldmVudCB0eXBlcyAoZS5nLiwgc2NhbiByZXN1bHRzLCBjb25uZWN0aW9uIHN0YXR1cyB1cGRhdGVzLCByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzKSBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgaXMgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgZXZlbnRzLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGB3aXBoeWAgc3RydWN0dXJlcyBjb21lIGludG8gcGxheSwgYXMgdGhpcyBpcyB0aGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSBpbiBjZmc4MDIxMSB0aGF0IHJlcHJlc2VudHMgdGhlIHdpcmVsZXNzIGRldmljZSwgYW5kIG5lZWRzIHRvIGJlIHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo1Mi4wNTI5NDMyNThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDA2OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9MTQxMD1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NjQtXFx0ICovXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDY1OlxcdGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHMod2Rldik7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDY2LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD00ODE9dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dpcGh5X3dvcmtzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTQ4Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCB3aXBoeV93b3JrICplbmQpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDgzOnZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTQ4NC1cXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmM9MTE4MT12b2lkIGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMTIwOC1cXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyMDk6dm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMjEwLXtcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmM9MTI2NT12b2lkIGNmZzgwMjExX3Byb2Nlc3NfcmRldl9ldmVudHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0xMjcxLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdClcXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjEyNzI6XFx0XFx0Y2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyh3ZGV2KTtcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTEyNzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MDo1Mi4wOTk5NTYyNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyODY3NjIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGNhbGN1bGF0aW5nIHRoZSBiZWFjb24gaW50ZXJ2YWwgZGF0YSwgd2hpY2ggaXMgZnVuZGFtZW50YWwgZm9yIFdpLUZpIGNvbW11bmljYXRpb24g4oCTIGVuc3VyaW5nIGRldmljZXMga25vdyB3aGVuIHRvIGxpc3RlbiBmb3IgbWFuYWdlbWVudCBmcmFtZXMgYW5kIHN5bmNocm9uaXplIHRoZWlyIHRyYW5zbWlzc2lvbnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgaG93IGJlYWNvbiBpbnRlcnZhbHMsIERUSU0gcGVyaW9kcywgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycyBhcmUgaW50ZXJjb25uZWN0ZWQgd2l0aGluIHRoZSBicm9hZGVyIDgwMi4xMSBmcmFtZXdvcmsuIEknbSBpbW1lZGlhdGVseSBnb2luZyB0byBiZSBsb29raW5nIGZvcjpcblxuKiAgICoqSW5wdXQgcGFyYW1ldGVyczoqKiBXaGF0IGRhdGEgZG9lcyBpdCB0YWtlIGFzIGlucHV0PyBJIGV4cGVjdCB0aGluZ3MgbGlrZSBjaGFubmVsIGluZm9ybWF0aW9uLCBzdXBwb3J0ZWQgcmF0ZXMsIGNhcGFiaWxpdGllcywgYW5kIHBvdGVudGlhbGx5IHNldHRpbmdzIHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBvciB2aXJ0dWFsIGludGVyZmFjZXMgdG8gYmUgY3JpdGljYWwuIEtub3dpbmcgdGhlIGlucHV0IGNvbnRleHQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhbGdvcml0aG0uIEknbGwgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBtZW50YWxseSB2YWxpZGF0ZSB0aGF0IHRoZSBleHBlY3RlZCBhcmd1bWVudHMgYXJlIGNvcnJlY3RseSBzdXBwbGllZC5cbiogICAqKkNhbGN1bGF0aW9uczoqKiBXaGF0IGFjdHVhbCBjb21wdXRhdGlvbnMgYXJlIHBlcmZvcm1lZD8gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBiZWFjb24gaW50ZXJ2YWwsIERUSU0gcGVyaW9kLCBhbmQgb3RoZXIgcmVsYXRlZCBmaWVsZHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHBvcHVsYXRlZCwgYW5kIGhvdyB0aGVzZSB2YWx1ZXMgYXJlIGRlcml2ZWQgZnJvbSBhbnkgZXh0ZXJuYWwgY29uZmlndXJhdGlvbi4gQWxzbywgYW55IG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucyB3aWxsIGJlIGluIG15IGZvY3VzLlxuKiAgICoqRXJyb3IgaGFuZGxpbmcvRWRnZSBjYXNlczoqKiBXaGF0IGRvZXMgaXQgZG8gaW4gYW5vbWFsb3VzIHNpdHVhdGlvbnM/IEZvciBleGFtcGxlLCB3aGF0IGhhcHBlbnMgaWYgdGhlIGlucHV0IGlzIGluY29uc2lzdGVudCwgb3IgaWYgdGhlcmUncyBhbiB1bnN1cHBvcnRlZCByYXRlIGNvbWJpbmF0aW9uPyBIb3cgZG9lcyBpdCBoYW5kbGUgemVybyB2YWx1ZXMgb3IgdW5yZWFzb25hYmxlIHJlcXVlc3RzIGZvciBpbnRlcnZhbHM/IEhvdyByb2J1c3QgaXMgdGhlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRoZSBoYW5kbGluZyBvZiBleGNlcHRpb25hbCBvciB1bmV4cGVjdGVkIGlucHV0P1xuKiAgICoqUmV0dXJuIHZhbHVlcy9TaWRlIGVmZmVjdHM6KiogV2hhdCBkb2VzIGl0IHJldHVybiBvciBtb2RpZnk/IEkgYXNzdW1lIGl0IG1pZ2h0IGJlIHJldHVybmluZyB0aGUgY2FsY3VsYXRlZCBiZWFjb24gZGF0YSBpbiBhIHNwZWNpZmljIHN0cnVjdHVyZS4gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHMgb24gYW55IGdsb2JhbCB2YXJpYWJsZXM/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbnkgb3RoZXIgcGFydHMgb2YgdGhlIGRyaXZlciBvciBrZXJuZWw/XG4qICAgKipPcHRpbWl6YXRpb24gR29hbHM6KiogSXMgdGhlcmUgYW55IHdvcmsgZG9uZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvcmUgbG9naWMgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEknbGwgcHJvYmFibHkgc3RlcCB0aHJvdWdoIHRoZSBjb2RlIG1lbnRhbGx5LCBvciB3aXRoIGEgZGVidWdnZXIsIGlmIG5lZWRlZCwgbWFraW5nIG5vdGVzIG9uIGFueXRoaW5nIHRoYXQgc2VlbXMgbm9uLW9idmlvdXMgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBrZXkgdG8gZGVidWdnaW5nIGFueSB3aXJlbGVzcyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTA6NTUuNzI4NjM0OTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL3V0aWwuYz0yNDYwPXN0YXRpYyBpbnQgY2ZnODAyMTFfd2Rldl9iaShzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNDc3LVxcbm5ldC93aXJlbGVzcy91dGlsLmM6MjQ3ODpzdGF0aWMgdm9pZCBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgbmV3X2JlYWNvbl9pbnQsXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNDc5LVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKmJlYWNvbl9pbnRfZ2NkLFxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNTI1PWludCBjZmc4MDIxMV92YWxpZGF0ZV9iZWFjb25faW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMS1cXHQgKiB0byBjZmc4MDIxMV9jaGVja19jb21iaW5hdGlvbnMoKSwgaW4gd2hpY2ggY2FzZSB3ZSdsbCB2YWxpZGF0ZSBtb3JlXFxubmV0L3dpcmVsZXNzL3V0aWwuYzoyNTMyOlxcdCAqIHRocm91Z2ggdGhlIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKCkgY2FsbCBhbmQgY29kZSBpblxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjUzMy1cXHQgKiBjZmc4MDIxMV9pdGVyX2NvbWJpbmF0aW9ucygpLlxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNTQyPWludCBjZmc4MDIxMV9pdGVyX2NvbWJpbmF0aW9ucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNTcwLVxcdCAqL1xcbm5ldC93aXJlbGVzcy91dGlsLmM6MjU3MTpcXHRjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YSh3aXBoeSwgcGFyYW1zLVxcdTAwM2VuZXdfYmVhY29uX2ludCxcXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTI1NzItXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmJlYWNvbl9pbnRfZ2NkLCBcXHUwMDI2YmVhY29uX2ludF9kaWZmZXJlbnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUwOjU1Ljc3NTM0NTc1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDMwNDE0MjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQcm9wb3NlZCBjZmc4MDIxMSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgdGhpcyBjb2RlIGlzIGNhbGxlZC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYGNmZzgwMjExX2l0ZXJfY29tYmluYXRpb25zYCBhbmQgb3RoZXIgY2FsbGVycyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGVuIEknbGwgbWV0aWN1bG91c2x5IHJldmlldyB0aGUgY2hhbmdlcyB0aGlzIHBhdGNoIG1ha2VzLlxuXG5GaXJzdCwgd2l0aGluIGBuZXQvd2lyZWxlc3MvY29yZS5jYCwgdGhlIHBhdGNoIHJlbW92ZXMgc29tZSBgV0FSTl9PTmAgY2hlY2tzIGluIGBjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VgIGFuZCBgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIC0gcHJvYmFibHkgd29ydGggYSBjbG9zZXIgbG9vayB0byBzZWUgd2h5IHRoZXNlIGNoZWNrcyB3ZXJlIGRlZW1lZCB1bm5lY2Vzc2FyeS4gSXQgYWxzbyBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyBgcmVnX2NoZWNrX2NoYW5zX3drYCBhbmQgYHJlZ19sZWF2ZV9uYW5fd2tgIGluIHRoZSByZWdpc3RlcmVkIGRldmljZSBsaWZlY3ljbGUuXG5cbmBuZXQvd2lyZWxlc3MvY29yZS5oYCBzaG93cyBzdHJ1Y3QgY2hhbmdlczogYWRkaW5nIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgdG8gYGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnRgLCBhbmQgYWRkaW5nIGByZWdfY2hlY2tfY2hhbnNfd2tgIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdGhlIGBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZWAgc3RydWN0LiBBbHNvLCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiBmb3IgYGlqYCBub3cgaG9sZHMgYSBgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzYC5cblxuYG5ldC93aXJlbGVzcy9pYnNzLmNgIG1vZGlmaWVzIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYCBhbmQgYGNmZzgwMjExX2lic3Nfam9pbmVkYCByZWxhdGVkIHRvIEJTUyByZWZlcmVuY2UgY291bnRpbmcgYW5kIHBhc3NpbmcgYSBCU1MgcG9pbnRlciBhY3Jvc3MgZXZlbnRzLlxuXG5gbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhgIGhhcyB0aGUgYHJkZXZfc2NhbmAgZnVuY3Rpb24gc2V0dGluZyBgZHJpdmVyX293bnNgIHRvIHRydWUsIGFuZCBjbGVhcmluZyBpdCBvbiBlcnJvci5cblxuYG5ldC93aXJlbGVzcy9yZWcuY2AgaW50cm9kdWNlcyBhc3luYyB3b3JrZXJzIGByZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tgIGZvciByZWd1bGF0b3J5IGNoYW5uZWwvTkFOIGxlYXZlcywgYW5kIGByZWdfY2hlY2tfY2hhbnNfd29ya2AgdG8gcXVldWUgYHJlZ19jaGVja19jaGFuc193a2AgZm9yIGFsbCByZGV2cyB1bmRlciBSQ1UuIEl0IGFsc28gdXNlcyBgd2Rldl9ydW5uaW5nKHdkZXYpYCBpbiBgcmVnX3dkZXZfY2hhbl92YWxpZGAuXG5cbmBuZXQvd2lyZWxlc3Mvc2Nhbi5jYCBjb25jZXJucyBpdHNlbGYgd2l0aCB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBzY2FuIHJlcXVlc3RzIHZpYSBgc3RhbGVgIGFuZCBgZHJpdmVyX293bnNgIGluIGBjZmc4MDIxMV9wdXRfc2Nhbl9yZXFgLCBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYCwgYW5kIGBjZmc4MDIxMV9zY2FuX2RvbmVgLiBUaGUgcGF0Y2ggYWxzbyB2YWxpZGF0ZXMgYmVhY29uIGRhdGEgZm9yIGhpZGRlbiBCU1MgdmlhIGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBzaW1wbGlmaWVzIGEgY2hlY2sgaW4gYGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlgLlxuXG5GaW5hbGx5LCBgbmV0L3dpcmVsZXNzL3V0aWwuY2AgdXNlcyBgc2tiX2hlYWRlcl9wb2ludGVyYCBzYWZlbHkgYWNjZXNzIHBhY2tldCBoZWFkZXJzIGluIGBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkYCwgaGFuZGxlcyBhbiB1cGRhdGVkIGBFVkVOVF9JQlNTX0pPSU5FRGAgd2l0aCB0aGUgQlNTIHBvaW50ZXIgaW4gYGNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNgLCBhbmQgZml4ZXMgYmVhY29uIGludGVydmFsIGNhbGN1bGF0aW9uIGluIGBjZmc4MDIxMV9jYWxjdWxhdGVfYmlfZGF0YWAuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdpdGhpbiBhIGZ1enppbmcgY29udGV4dCBsaWtlIFFFTVUgYW5kIHN5emthbGxlci4gU2luY2UgYGNmZzgwMjExYCBpcyB0aGUgY29yZSwgYW5kIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIG5sODAyMTEgc29ja2V0cywgbWFjODAyMTEvbWFjODAyMTFfaHdzaW0sIHdpcmVsZXNzIGV4dGVuc2lvbnMsIHBhY2tldCBzb2NrZXRzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBpcyBrbm93biB0byB0YXJnZXQgbmw4MDIxMSBleHRlbnNpdmVseS5cblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBrZXkuIFdlIG5lZWQgYENGRzgwMjExYCwgb2J2aW91c2x5LiBXZSBhbHNvIG5lZWQgYE1BQzgwMjExX0hXU0lNYCBhbmQgb3IgYE5MODAyMTFgLiBJJ2xsIGNvbmZpcm0gdGhhdCBgQ0ZHODAyMTFgIGRvZXNuJ3QgcmVxdWlyZSBhbnl0aGluZyBlbHNlLCBidXQgSSBzYXcgYSBtZW50aW9uIG9mIGBDRkc4MDIxMV9XRVhUYCBpbiBgaWJzcy5jYCwgc28gSSdsbCBpbmNsdWRlIGl0LiBTbywgYENGRzgwMjExYCwgYENGRzgwMjExX1dFWFRgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBzaG91bGQgYmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGluY2x1ZGUuXG5cbk5vdyBmb3IgdGhlIHRhcmdldGVkIHN5bWJvbHM6IFdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBtb2RpZmllZCBvciBuZXdseSBpbXBsZW1lbnRlZCBmdW5jdGlvbnM6IGBjZmc4MDIxMV9zY2FuX2RvbmVgLCBgX19fY2ZnODAyMTFfc2Nhbl9kb25lYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a2AsIGByZWdfY2hlY2tfXG5cbiIsIklucHV0VG9rZW5zIjoxODYxMCwiT3V0cHV0VG9rZW5zIjozNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjA2LjA3OTQ5MTA5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzk0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcIl9fX2NmZzgwMjExX3NjYW5fZG9uZVwiLFxuICAgIFwicmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2tcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX25hbl93a1wiLFxuICAgIFwicmVnX2NoZWNrX2NoYW5zX3dvcmtcIixcbiAgICBcImNmZzgwMjExX2lic3Nfam9pbmVkXCIsXG4gICAgXCJfX2NmZzgwMjExX2lic3Nfam9pbmVkXCIsXG4gICAgXCJjZmc4MDIxMV9jbGFzc2lmeTgwMjFkXCIsXG4gICAgXCJfX2NmZzgwMjExX2Jzc191cGRhdGVcIixcbiAgICBcImNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnlcIixcbiAgICBcImNmZzgwMjExX3N0b3BfcDJwX2RldmljZVwiLFxuICAgIFwiY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBjZmc4MDIxMSBzY2FuIHJlcXVlc3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGhhbmRsaW5nIGFzeW5jaHJvbm91cyBkcml2ZXIgY2FuY2VsbGF0aW9uIGFuZCBzdGFsZSByZXF1ZXN0IGZyZWVpbmcpLCByZWZhY3RvcnMgcmVndWxhdG9yeSBjaGFubmVsIGxlYXZlIHdvcmtlcnMgYW5kIGxvY2tpbmcgKHNwbGl0dGluZyBOQU4gdGVhcmRvd24gaW50byBzZXBhcmF0ZSB3b3JrIHdpdGggUlROTCBsb2NrIHZzIHdpcGh5IHdvcmspLCB1cGRhdGVzIEJTUyBvYmplY3QgcmVmY291bnRpbmcgZHVyaW5nIElCU1Mgam9pbiBldmVudHMsIGFuZCBpbXByb3ZlcyBoZWFkZXIgcGFyc2luZyBzYWZldHkgaW4gY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCB1c2luZyBza2JfaGVhZGVyX3BvaW50ZXIuIEFsbCBtb2RpZmllZCBwYXRocyBhcmUgZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBubDgwMjExL2NmZzgwMjExIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyBhbmQgc2ltdWxhdGVkIHdpcmVsZXNzIGhhcmR3YXJlIChtYWM4MDIxMV9od3NpbSkgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTFfc2Nhbl9kb25lXCIsXG4gICAgXCJfX19jZmc4MDIxMV9zY2FuX2RvbmVcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9uYW5fd2tcIixcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJjZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiX19jZmc4MDIxMV9pYnNzX2pvaW5lZFwiLFxuICAgIFwiY2ZnODAyMTFfY2xhc3NpZnk4MDIxZFwiLFxuICAgIFwiX19jZmc4MDIxMV9ic3NfdXBkYXRlXCIsXG4gICAgXCJjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5XCIsXG4gICAgXCJjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2VcIixcbiAgICBcImNmZzgwMjExX3Byb2Nlc3Nfd2Rldl9ldmVudHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gY2ZnODAyMTEgc2NhbiByZXF1ZXN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChoYW5kbGluZyBhc3luY2hyb25vdXMgZHJpdmVyIGNhbmNlbGxhdGlvbiBhbmQgc3RhbGUgcmVxdWVzdCBmcmVlaW5nKSwgcmVmYWN0b3JzIHJlZ3VsYXRvcnkgY2hhbm5lbCBsZWF2ZSB3b3JrZXJzIGFuZCBsb2NraW5nIChzcGxpdHRpbmcgTkFOIHRlYXJkb3duIGludG8gc2VwYXJhdGUgd29yayB3aXRoIFJUTkwgbG9jayB2cyB3aXBoeSB3b3JrKSwgdXBkYXRlcyBCU1Mgb2JqZWN0IHJlZmNvdW50aW5nIGR1cmluZyBJQlNTIGpvaW4gZXZlbnRzLCBhbmQgaW1wcm92ZXMgaGVhZGVyIHBhcnNpbmcgc2FmZXR5IGluIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgdXNpbmcgc2tiX2hlYWRlcl9wb2ludGVyLiBBbGwgbW9kaWZpZWQgcGF0aHMgYXJlIGV4ZWN1dGFibGUgYW5kIHJlYWNoYWJsZSB2aWEgbmw4MDIxMS9jZmc4MDIxMSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHNpbXVsYXRlZCB3aXJlbGVzcyBoYXJkd2FyZSAobWFjODAyMTFfaHdzaW0pIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MTowNi4xNTMyOTI1MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzgwNzAxNzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTE6MDYuMTUzNzMyNzAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc3ODAyNTcwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgbGlmZXRpbWUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHBhY2tldCBwYXJzaW5nIGFjcm9zcyBjZmc4MDIxMTpcXG4xLiBTY2FuIHJlcXVlc3QgdHJhY2tpbmcgKGRyaXZlcl9vd25zL3N0YWxlKTogRml4ZXMgdXNlLWFmdGVyLWZyZWUgYW5kIHByZW1hdHVyZSBmcmVlcyBvZiBzY2FuIHJlcXVlc3RzIGFjcm9zcyBkcml2ZXIgY2FuY2VsbGF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgVUFGIGlzc3VlcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgc2NhbiByZXF1ZXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MsIHNvIGFsbCBuZXcgc3RydWN0IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4yLiBSZWd1bGF0b3J5IHdvcmtxdWV1ZSBzcGxpdDogU29sdmVzIGxvY2sgb3JkZXJpbmcvZGVhZGxvY2tzIGJldHdlZW4gcnRubF9sb2NrIGFuZCB3aXBoeSBtdXRleCBkdXJpbmcgcmVndWxhdG9yeSBpbnRlcmZhY2UgdGVhcmRvd24uIFRoaXMgZmFsbHMgc3RyaWN0bHkgdW5kZXIgTE9DS0RFUC5cXG4zLiBJQlNTIGV2ZW50IGhhbmRsaW5nOiBQYXNzZXMgQlNTIHJlZmVyZW5jZXMgZGlyZWN0bHkgdG8gZXZlbnQgcHJvY2Vzc2luZyByYXRoZXIgdGhhbiByZS1sb29raW5nIHRoZW0gdXA7IGFsbCBldmVudCBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXMgcHJvcGVybHkgbWFuYWdlZC5cXG40LiBQYWNrZXQgY2xhc3NpZmljYXRpb24gKHNrYl9oZWFkZXJfcG9pbnRlcik6IEZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIG5vbi1saW5lYXIgc2ticyBieSBzYWZlbHkgY2hlY2tpbmcgaGVhZGVyIGxlbmd0aHMgd2l0aCBza2JfaGVhZGVyX3BvaW50ZXIuIEFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJyZWFkcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIEtBU0FOIGFuZCBMT0NLREVQIGZ1bGx5IGNvdmVyIHRoZSByaXNrcyBpbiB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNjcxNWUwMWVkMDcxYmIxNjQ0MTE5M2I0Y2Q3NWM1NDdiZDJiNjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAxOjUwOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjY2ODM4MGRlZWM3ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMjQ0LDkgKzI0NCw4IEBAIHZvaWQgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gXG4gXHRpZiAocmRldi1cdTAwM2VzY2FuX3JlcSBcdTAwMjZcdTAwMjYgcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2VyZXEud2RldiA9PSB3ZGV2KSB7XG4tXHRcdGlmIChXQVJOX09OKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0ICAgICAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKSlcbitcdFx0aWYgKCFyZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZW5vdGlmaWVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fCAhcmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEtXHUwMDNlbm90aWZpZWQpKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcbiBcdH1cbkBAIC02NDYsNiArNjQ1LDggQEAgc3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmssIGNmZzgwMjExX2Rlc3Ryb3lfaWZhY2Vfd2spO1xuIFx0d2lwaHlfd29ya19pbml0KFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9zdG9wX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Bfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlc2NoZWRfc2Nhbl9yZXNfd2ssIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0c193ayk7XG4rXHR3aXBoeV93b3JrX2luaXQoXHUwMDI2cmRldi1cdTAwM2VyZWdfY2hlY2tfY2hhbnNfd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKTtcbitcdElOSVRfV09SSyhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2ssIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayk7XG4gXHRJTklUX1dPUksoXHUwMDI2cmRldi1cdTAwM2Vwcm9wYWdhdGVfcmFkYXJfZGV0ZWN0X3drLFxuIFx0XHQgIGNmZzgwMjExX3Byb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnJkZXYtXHUwMDNlcHJvcGFnYXRlX2NhY19kb25lX3drLCBjZmc4MDIxMV9wcm9wYWdhdGVfY2FjX2RvbmVfd2spO1xuQEAgLTEzNDUsNiArMTM0Niw3IEBAIHZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJkZXYtXHUwMDNlZGZzX3VwZGF0ZV9jaGFubmVsc193ayk7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cmRldi1cdTAwM2ViYWNrZ3JvdW5kX2NhY19kb25lX3drKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VkZXN0cm95X3dvcmspO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXJlZ19sZWF2ZV9uYW5fd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9yYWRhcl9kZXRlY3Rfd2spO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZyZGV2LVx1MDAzZXByb3BhZ2F0ZV9jYWNfZG9uZV93ayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnJkZXYtXHUwMDNlbWdtdF9yZWdpc3RyYXRpb25zX3VwZGF0ZV93ayk7XG5AQCAtMTc1OCw5ICsxNzYwLDkgQEAgc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFx0XHR3aXBoeV9sb2NrKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuIFx0XHRjZmc4MDIxMV91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdkZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXNjYW5fcmVxIFx1MDAyNlx1MDAyNiByZGV2LVx1MDAzZXNjYW5fcmVxLVx1MDAzZXJlcS53ZGV2ID09IHdkZXYpIHtcbi1cdFx0XHRpZiAoV0FSTl9PTighcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgICAoIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxIHx8XG4tXHRcdFx0XHQgICAgICFyZGV2LVx1MDAzZWludF9zY2FuX3JlcS1cdTAwM2Vub3RpZmllZCkpKVxuK1x0XHRcdGlmICghcmRldi1cdTAwM2VzY2FuX3JlcS1cdTAwM2Vub3RpZmllZCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgKCFyZGV2LVx1MDAzZWludF9zY2FuX3JlcSB8fFxuK1x0XHRcdCAgICAgIXJkZXYtXHUwMDNlaW50X3NjYW5fcmVxLVx1MDAzZW5vdGlmaWVkKSlcbiBcdFx0XHRcdHJkZXYtXHUwMDNlc2Nhbl9yZXEtXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcbiBcdFx0XHRfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjYxMzhkMjA3Y2FmNDEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtMjQsNiArMjQsMTYgQEBcbiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIGluZm87XG4gXHRib29sIG5vdGlmaWVkO1xuK1x0LypcbitcdCAqIHNldCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBoYW5kZWQgdG8gdGhlIGRyaXZlciwgaS5lLiBiZXR3ZWVuXG4rXHQgKiByZGV2X3NjYW4oKSBhbmQgY2ZnODAyMTFfc2Nhbl9kb25lKClcbitcdCAqL1xuK1x0Ym9vbCBkcml2ZXJfb3ducztcbitcdC8qXG4rXHQgKiBzZXQgd2hlbiBjZmc4MDIxMSBpcyBkb25lIHdpdGggdGhlIHJlcXVlc3QgYnV0IHRoZSBkcml2ZXIgc3RpbGxcbitcdCAqIG93bnMgaXQsIHNvIHRoYXQgY2ZnODAyMTFfc2Nhbl9kb25lKCkga25vd3MgdG8ganVzdCBmcmVlIGl0XG4rXHQgKi9cbitcdGJvb2wgc3RhbGU7XG4gXHQvKiBtdXN0IGJlIGxhc3QgLSB2YXJpYWJsZSBtZW1iZXJzICovXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHJlcTtcbiB9O1xuQEAgLTEwNCw2ICsxMTQsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2Uge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yaztcbiBcdHN0cnVjdCB3aXBoeV93b3JrIHNjaGVkX3NjYW5fc3RvcF93aztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc193aztcbitcdHN0cnVjdCB3aXBoeV93b3JrIHJlZ19jaGVja19jaGFuc193aztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWdfbGVhdmVfbmFuX3drO1xuIFxuIFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHJhZGFyX2NoYW5kZWY7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvcGFnYXRlX3JhZGFyX2RldGVjdF93aztcbkBAIC0yODAsOCArMjkyLDcgQEAgc3RydWN0IGNmZzgwMjExX2V2ZW50IHtcbiBcdFx0XHRib29sIGxvY2FsbHlfZ2VuZXJhdGVkO1xuIFx0XHR9IGRjO1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7XG4rXHRcdFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0XHR9IGlqO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHU4IHBlZXJfYWRkcltFVEhfQUxFTl07XG5AQCAtMzQ0LDggKzM1NSw3IEBAIGludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTtcbiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpO1xuLXZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4tXHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7XG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7XG4gaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbmluZGV4IGIxZDc0OGJkYjUwNGUuLjdmNjc3OWQzMjZiODEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXG4rKysgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5AQCAtMTYsMjYgKzE2LDE4IEBAXG4gI2luY2x1ZGUgXCJyZGV2LW9wcy5oXCJcbiBcbiBcbi12b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpXG4rdm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcylcbiB7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4tXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7XG4gI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG4gXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4gI2VuZGlmXG4gXG4gXHRpZiAoV0FSTl9PTih3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpXG4tXHRcdHJldHVybjtcbitcdFx0Z290byBwdXRfYnNzO1xuIFxuIFx0aWYgKCF3ZGV2LVx1MDAzZXUuaWJzcy5zc2lkX2xlbilcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4tXG4tXHRpZiAoV0FSTl9PTighYnNzKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIHB1dF9ic3M7XG4gXG4gXHRpZiAod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpIHtcbiBcdFx0Y2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XG5AQCAtNDMsMTcgKzM1LDIyIEBAIHZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG4gXHR9XG4gXG4gXHRjZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7XG4rXHQvKiB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGV2ZW50IGlzIHRyYW5zZmVycmVkIHRvIGN1cnJlbnRfYnNzICovXG4gXHR3ZGV2LVx1MDAzZXUuaWJzcy5jdXJyZW50X2JzcyA9IGJzc19mcm9tX3B1Yihic3MpO1xuIFxuIFx0Y2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTtcbiBcbi1cdG5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSksIGRldiwgYnNzaWQsXG4rXHRubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19yZGV2KHdkZXYtXHUwMDNld2lwaHkpLCBkZXYsIGJzcy1cdTAwM2Vic3NpZCxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7XG4rXHRtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFx0d2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgXHUwMDI2d3JxdSwgTlVMTCk7XG4gI2VuZGlmXG4rXHRyZXR1cm47XG4rXG4rcHV0X2JzczpcbitcdGNmZzgwMjExX3B1dF9ic3Mod2Rldi1cdTAwM2V3aXBoeSwgYnNzKTtcbiB9XG4gXG4gdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsXG5AQCAtNjIsNiArNTksNyBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjExX3B0cjtcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2Rldi1cdTAwM2V3aXBoeSk7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2O1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHRyYWNlX2NmZzgwMjExX2lic3Nfam9pbmVkKGRldiwgYnNzaWQsIGNoYW5uZWwpO1xuQEAgLTY5LDEzICs2NywxOSBAQCB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbiBcdGlmIChXQVJOX09OKCFjaGFubmVsKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LVx1MDAzZXdpcGh5LCBjaGFubmVsLCBic3NpZCwgTlVMTCwgMCxcbitcdFx0XHQgICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0lCU1MsIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XG4rXHRpZiAoV0FSTl9PTighYnNzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXYgPSBremFsbG9jX29iaigqZXYsIGdmcCk7XG4tXHRpZiAoIWV2KVxuK1x0aWYgKCFldikge1xuK1x0XHRjZmc4MDIxMV9wdXRfYnNzKHdkZXYtXHUwMDNld2lwaHksIGJzcyk7XG4gXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdGV2LVx1MDAzZXR5cGUgPSBFVkVOVF9JQlNTX0pPSU5FRDtcbi1cdG1lbWNweShldi1cdTAwM2Vpai5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcbi1cdGV2LVx1MDAzZWlqLmNoYW5uZWwgPSBjaGFubmVsO1xuK1x0ZXYtXHUwMDNlaWouYnNzID0gYnNzO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2d2Rldi1cdTAwM2VldmVudF9sb2NrLCBmbGFncyk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmV2LVx1MDAzZWxpc3QsIFx1MDAyNndkZXYtXHUwMDNlZXZlbnRfbGlzdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNDY4NDlmZThkMGIzOS4uYWRjZmQwMjc4ZGEzMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTQ2NCw3ICs0NjQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcmRldl9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0cmFjZV9yZGV2X3NjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmVxdWVzdCk7XG4rXHRyZXF1ZXN0LVx1MDAzZWRyaXZlcl9vd25zID0gdHJ1ZTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZXNjYW4oXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgXHUwMDI2cmVxdWVzdC1cdTAwM2VyZXEpO1xuK1x0aWYgKHJldClcbitcdFx0cmVxdWVzdC1cdTAwM2Vkcml2ZXJfb3ducyA9IGZhbHNlO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLjExNjY1ZTBhN2VmYzggMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTIzNDUsNyArMjM0NSw3IEBAIHN0YXRpYyBib29sIHJlZ193ZGV2X2NoYW5fdmFsaWQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiBcdGlmdHlwZSA9IHdkZXYtXHUwMDNlaWZ0eXBlO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRoZSBpbnRlcmZhY2UgaXMgYWN0aXZlICovXG4tXHRpZiAoIXdkZXYtXHUwMDNlbmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKHdkZXYtXHUwMDNlbmV0ZGV2KSlcbitcdGlmICghd2Rldl9ydW5uaW5nKHdkZXYpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIE5BTiBkb2Vzbid0IGhhdmUgbGlua3MsIGhhbmRsZSBpdCBzZXBhcmF0ZWx5ICovXG5AQCAtMjQ0NiwxOSArMjQ0Niw1MiBAQCBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSlcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuK1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldjtcbi1cdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1xuK1x0cmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsXG4rXHRcdFx0ICAgIHJlZ19sZWF2ZV9uYW5fd2spO1xuK1xuK1x0Lyogc3RvcHBpbmcgTkFOIGNsb3NlcyBpdHMgZGF0YSBpbnRlcmZhY2VzLCB3aGljaCBuZWVkcyB0aGUgUlROTCAqL1xuK1x0cnRubF9sb2NrKCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsIFx1MDAyNnJkZXYtXHUwMDNld2lwaHkud2Rldl9saXN0LCBsaXN0KSB7XG4gXHRcdGJvb2wgdmFsaWQ7XG4gXG4tXHRcdHNjb3BlZF9ndWFyZCh3aXBoeSwgd2lwaHkpXG4tXHRcdFx0dmFsaWQgPSByZWdfd2Rldl9jaGFuX3ZhbGlkKHdpcGh5LCB3ZGV2KTtcbitcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2NvcGVkX2d1YXJkKHdpcGh5LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KVxuK1x0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2KTtcbiBcdFx0aWYgKCF2YWxpZClcbiBcdFx0XHRjZmc4MDIxMV9sZWF2ZShyZGV2LCB3ZGV2LCAtMSk7XG4gXHR9XG4rXG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxuK3tcbitcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuK1x0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2lwaHktXHUwMDNlbXR4KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXHUwMDI2cmRldi1cdTAwM2V3aXBoeS53ZGV2X2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHJlZ193ZGV2X2NoYW5fdmFsaWQod2lwaHksIHdkZXYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBUZWFyaW5nIGRvd24gTkFOIG5lZWRzIHRoZSBSVE5MIGZvciBjbG9zaW5nIE5BTl9EQVRBXG4rXHRcdCAqIGludGVyZmFjZXMsIGhhbmRsZSB0aGF0IHNlcGFyYXRlbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxuK1x0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmRldi1cdTAwM2VyZWdfbGVhdmVfbmFuX3drKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNmZzgwMjExX2xlYXZlX2xvY2tlZChyZGV2LCB3ZGV2LCAtMSk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbkBAIC0yNDY2LDEyICsyNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwiVmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cIik7XG4tXHRydG5sX2xvY2soKTtcbiBcbi1cdGZvcl9lYWNoX3JkZXYocmRldilcbi1cdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRydG5sX3VubG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KVxuK1x0XHR3aXBoeV93b3JrX3F1ZXVlKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIFx1MDAyNnJkZXYtXHUwMDNlcmVnX2NoZWNrX2NoYW5zX3drKTtcbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaFxuaW5kZXggZmMzMWM1ZjlhNjFhYi4uYzU4NzA3OWVhZDhmYiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oXG5AQCAtMTc4LDYgKzE3OCwyMiBAQCBpbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcbiAgKi9cbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTtcbiBcbisvKipcbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193ayAtIGNoZWNrIGlmIGNoYW5uZWxzIGFyZSBubyBsb25nZXIgdXNhYmxlIGFuZCBsZWF2ZVxuKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRvIGNoZWNrXG4rICogQHdvcms6IHRoZSB3b3JrIHN0cnVjdFxuKyAqL1xuK3ZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNfd2soc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xuK1xuKy8qKlxuKyAqIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayAtIGNoZWNrIGNoYW5uZWxzIGFuZCB0ZWFyIGRvd24gTkFOIHdoZW4gdW51c2FibGVcbisgKiBAd29yazogdGhlIHdvcmsgc3RydWN0XG4rICpcbisgKiBTdG9wcGluZyBhIE5BTiBpbnRlcmZhY2UgbmVlZHMgdGhlIFJUTkwsIHNvIGl0IGNhbm5vdCBiZSBkb25lIGZyb21cbisgKiByZWdfbGVhdmVfaW52YWxpZF9jaGFuc193aygpIHdoaWNoIHJ1bnMgd2l0aCB0aGUgd2lwaHkgbXV0ZXggaGVsZC5cbisgKi9cbit2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX25hbl93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuK1xuIGV4dGVybiBjb25zdCB1OCBzaGlwcGVkX3JlZ2RiX2NlcnRzW107XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbjtcbiBleHRlcm4gY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xuaW5kZXggOWU5MzRiMTg1ZTM0MS4uY2FhOWM2NDk1ZjIwYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xMTE0LDYgKzExMTQsMjEgQEAgaW50IGNmZzgwMjExX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmVsZWFzZSB0aGUgc2NhbiByZXF1ZXN0LCBidXQgZnJlZSBpdCBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgYWxzbyBkb25lLFxuKyAqIGUuZy4gbWFjODAyMTEgbWF5IGNhbmNlbCBpdCBhc3luY2hyb25vdXNseSBhbmQgc3RpbGwgdXNlIGl0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNmZzgwMjExX3B1dF9zY2FuX3JlcShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxKVxuK3tcbitcdGlmICghcmVxKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVxLVx1MDAzZWRyaXZlcl9vd25zKVxuK1x0XHRyZXEtXHUwMDNlc3RhbGUgPSB0cnVlO1xuK1x0ZWxzZVxuK1x0XHRrZnJlZShyZXEpO1xuK31cbitcbiB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgYm9vbCBzZW5kX21lc3NhZ2UpXG4ge1xuQEAgLTExNzMsMTAgKzExODgsMTAgQEAgdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFxuIFx0ZGV2X3B1dCh3ZGV2LVx1MDAzZW5ldGRldik7XG4gXG4tXHRrZnJlZShyZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEpO1xuIFx0cmRldi1cdTAwM2VpbnRfc2Nhbl9yZXEgPSBOVUxMO1xuIFxuLVx0a2ZyZWUocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4rXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cdTAwM2VzY2FuX3JlcSk7XG4gXHRyZGV2LVx1MDAzZXNjYW5fcmVxID0gTlVMTDtcbiBcbiBcdGlmICghc2VuZF9tZXNzYWdlKVxuQEAgLTExOTksNiArMTIxNCwxOCBAQCB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LFxuIFx0c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBvbGRfaW5mbyA9IGludHJlcS1cdTAwM2VpbmZvO1xuIFxuIFx0dHJhY2VfY2ZnODAyMTFfc2Nhbl9kb25lKGludHJlcSwgaW5mbyk7XG4rXG4rXHRpbnRyZXEtXHUwMDNlZHJpdmVyX293bnMgPSBmYWxzZTtcbitcbitcdGlmIChpbnRyZXEtXHUwMDNlc3RhbGUpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHNjYW4gaXMgYWxyZWFkeSBjb21wbGV0ZWQgYXMgZmFyIGFzIHdlJ3JlIGNvbmNlcm5lZCxcbitcdFx0ICogaXQgd2FzIGp1c3Qga2VwdCBhcm91bmQgZm9yIHRoZSBkcml2ZXIgLSBkb25lIG5vdywgZnJlZSBpdC5cbitcdFx0ICovXG4rXHRcdGtmcmVlKGludHJlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdFdBUk5fT04oaW50cmVxICE9IHJkZXYtXHUwMDNlc2Nhbl9yZXEgXHUwMDI2XHUwMDI2XG4gXHRcdGludHJlcSAhPSByZGV2LVx1MDAzZWludF9zY2FuX3JlcSk7XG4gXG5AQCAtMjA1MCw2ICsyMDc3LDEzIEBAIF9fY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0aWYgKCFoaWRkZW4pXG4gXHRcdFx0XHRoaWRkZW4gPSByYl9maW5kX2JzcyhyZGV2LCB0bXAsXG4gXHRcdFx0XHRcdFx0ICAgICBCU1NfQ01QX0hJREVfTlVMKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE9ubHkgZ3JvdXAgd2l0aCBhbiBlbnRyeSB3aXRoIGJlYWNvbiBkYXRhLCBvdGhlcndpc2VcbitcdFx0XHQgKiBiZWFjb24gZGF0YSBjYW4gbmV2ZXIgYmUgZmlsbGVkL3VwZGF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGhpZGRlbiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihoaWRkZW4tXHUwMDNlcHViLmJlYWNvbl9pZXMpKVxuK1x0XHRcdFx0aGlkZGVuID0gTlVMTDtcbiBcdFx0XHRpZiAoaGlkZGVuKSB7XG4gXHRcdFx0XHRuZXctXHUwMDNlcHViLmhpZGRlbl9iZWFjb25fYnNzID0gXHUwMDI2aGlkZGVuLVx1MDAzZXB1YjtcbiBcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ldy1cdTAwM2VoaWRkZW5fbGlzdCxcbkBAIC0zNDY4LDExICszNTAyLDYgQEAgdm9pZCBjZmc4MDIxMV91cGRhdGVfYXNzb2NfYnNzX2VudHJ5KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRjYnNzLVx1MDAzZXB1Yi5jaGFubmVsID0gY2hhbjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghY2ZnODAyMTFfYnNzX3R5cGVfbWF0Y2goYnNzLVx1MDAzZXB1Yi5jYXBhYmlsaXR5LFxuLVx0XHRcdFx0XHQgICAgIGJzcy1cdTAwM2VwdWIuY2hhbm5lbC1cdTAwM2ViYW5kLFxuLVx0XHRcdFx0XHQgICAgIHdkZXYtXHUwMDNlY29ubl9ic3NfdHlwZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChic3MgPT0gY2JzcylcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZjI0NjRkMmNlMGQ1YSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbisrKyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0xMDM5LDEyICsxMDM5LDMwIEBAIHVuc2lnbmVkIGludCBjZmc4MDIxMV9jbGFzc2lmeTgwMjFkKHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4tXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcihza2IpKSBcdTAwMjYgMHhmYztcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0XHRzdHJ1Y3QgaXBoZHIgX2lwaDtcbitcbitcdFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxuK1x0XHRcdFx0XHQgc2l6ZW9mKCppcGgpLCBcdTAwMjZfaXBoKTtcbitcdFx0aWYgKCFpcGgpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi1cdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSkgXHUwMDI2IDB4ZmM7XG4rXHR9XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0XHRzdHJ1Y3QgaXB2NmhkciBfaXA2aDtcbitcbitcdFx0aXA2aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcbitcdFx0XHRcdFx0ICBzaXplb2YoKmlwNmgpLCBcdTAwMjZfaXA2aCk7XG4rXHRcdGlmICghaXA2aClcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0ZHNjcCA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCkgXHUwMDI2IDB4ZmM7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcbiBcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcbiBcdFx0c3RydWN0IG1wbHNfbGFiZWwgbXBsc190bXAsICptcGxzO1xuQEAgLTEyMTcsOCArMTIzNSw3IEBAIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0XHRcdFx0XHRcdCFldi1cdTAwM2VkYy5sb2NhbGx5X2dlbmVyYXRlZCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRVZFTlRfSUJTU19KT0lORUQ6XG4tXHRcdFx0X19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LVx1MDAzZW5ldGRldiwgZXYtXHUwMDNlaWouYnNzaWQsXG4tXHRcdFx0XHRcdCAgICAgICBldi1cdTAwM2Vpai5jaGFubmVsKTtcbitcdFx0XHRfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtXHUwMDNlbmV0ZGV2LCBldi1cdTAwM2Vpai5ic3MpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVWRU5UX1NUT1BQRUQ6XG4gXHRcdFx0LypcbkBAIC0yNDc3LDE2ICsyNDk0LDE1IEBAIHN0YXRpYyB2b2lkIGNmZzgwMjExX2NhbGN1bGF0ZV9iaV9kYXRhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBuZXdfYmVhY29uX2ludCxcbiBcdFx0aWYgKHdkZXYtXHUwMDNldmFsaWRfbGlua3MpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuK1x0XHRpZiAoIXdkZXZfYmkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIHNraXAgd2RldnMgbm90IGFjdGl2ZSBvbiB0aGUgZ2l2ZW4gd2lwaHkgcmFkaW8gKi9cbiBcdFx0aWYgKHJhZGlvX2lkeCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJkZXZfZ2V0X3JhZGlvX21hc2socmRldiwgd2Rldi1cdTAwM2VuZXRkZXYpIFx1MDAyNiBCSVQocmFkaW9faWR4KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdkZXZfYmkgPSBjZmc4MDIxMV93ZGV2X2JpKHdkZXYpO1xuLVxuLVx0XHRpZiAoIXdkZXZfYmkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghKmJlYWNvbl9pbnRfZ2NkKSB7XG4gXHRcdFx0KmJlYWNvbl9pbnRfZ2NkID0gd2Rldl9iaTtcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjA2LjE1MzczMzgwMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDQxMjk0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBpbiBhZGRpdGlvbiB0byBvdXIgc3RhbmRhcmQgS0FTQU4gZWZmb3J0cy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGRpZmYuXG5cbkknbSBzZWVpbmcgYSBudW1iZXIgb2YgY2hhbmdlcywgYW5kIG15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyB0aGUgd2lyZWxlc3MgY29yZSBpcyBiZWluZyB0b3VjaGVkIGhlYXZpbHkuIFRoZSBtb3N0IGludGVyZXN0aW5nIGFyZWFzIGFyZSBsaWtlbHkgdGhvc2UgdGhhdCB0b3VjaCBtZW1vcnkgYWxsb2NhdGlvbiwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlc2UgYXNwZWN0czpcblxuMS4gICoqRGF0YSBTdHJ1Y3R1cmUgQ2hhbmdlczoqKiBUaGUgYWRkaXRpb24gb2YgYGRyaXZlcl9vd25zYCwgYHN0YWxlYCwgYHJlZ19jaGVja19jaGFuc193a2AsIGFuZCBgcmVnX2xlYXZlX25hbl93a2AgdG8gdmFyaW91cyBzdHJ1Y3RzIGlzIGludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGFyZSBpbml0aWFsaXplZCBhbmQgdXNlZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIGFyZSBwb3NzaWJsZS4gVGhlIGNoYW5nZXMgdG8gYGNmZzgwMjExX2V2ZW50YCBhbmQgYF9fY2ZnODAyMTFfaWJzc19qb2luZWRgIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgdGhlIGFsbG9jYXRpb24gb2YgYGJzc2AgYW5kIHRoZSByZWZlcmVuY2UgaGFuZGxpbmcuIEFueSB0aW1lIGEgYGJzc2AgaXMgbWFuaXB1bGF0ZWQsIEknbSBhbHJlYWR5IGNhdXRpb3VzLlxuXG4yLiAgKipXb3JrcXVldWUgSW50cm9kdWN0aW9uczoqKiBUaGUgaW50cm9kdWN0aW9uIG9mIHdvcmtxdWV1ZXMgKGByZWdfY2hlY2tfY2hhbnNfd2tgLCBgcmVnX2xlYXZlX2ludmFsaWRfbmFuX3drYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zX3drYCkgYWx3YXlzIGRlbWFuZHMgc2NydXRpbnkuIFdvcmtxdWV1ZXMgb2Z0ZW4gaW52b2x2ZSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhbmQgY2FuIGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIExvY2tpbmcgaW1wcm92ZW1lbnRzIGFyZSBnb29kLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhleSBhcmUgY29ycmVjdCBhbmQgcm9idXN0LlxuXG4zLiAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBJIG5lZWQgdG8gY2xvc2VseSBpbnZlc3RpZ2F0ZSBgY2ZnODAyMTFfcHV0X3NjYW5fcmVxYCAod2l0aCBgZHJpdmVyX293bnNgIGFuZCBgc3RhbGVgKSBhbmQgZW5zdXJlIHNjYW4gcmVxdWVzdHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LCBhdm9pZGluZyBtZW1vcnkgbGVha3Mgb3IgZG91YmxlLWZyZWVzLlxuXG40LiAgKipgc2tiX2hlYWRlcl9wb2ludGVyYCBVc2FnZToqKiBUaGUgdXNhZ2Ugb2YgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW4gYGNmZzgwMjExX2NsYXNzaWZ5ODAyMWRgIGlzIGEgcHJpbWUgc3VzcGVjdC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBwYXJ0aWN1bGFybHkgc2luY2UgaXQgaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20gdGhlIFNLQi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzIHByb3Blcmx5IHNpemVkIGFuZCB0aGF0IHRoZSBjb3B5IGRvZXNuJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIFNLQiwgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLiBJIGtub3cgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgZGV0YWlscy4gSG93ZXZlciwgSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkIGFmdGVyIHRoZSBgc2tiX2hlYWRlcl9wb2ludGVyYCBjYWxsLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgbG9vayBhdCBsaW5lIDEwMzkgaW4gYG5ldC93aXJlbGVzcy91dGlsLmNgLiBUaGlzIGlzIG15IHByaW1hcnkgYXJlYSBvZiBjb25jZXJuIGJlY2F1c2UgaXQgaXMgdG91Y2hpbmcgbWVtb3J5LlxuXG41LiAqKldBUk5fT04gcmVtb3ZhbHM6KiogV2hpbGUgdGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgcmVtb3ZpbmcgYFdBUk5fT05gIHN0YXRlbWVudHMgaXMgYWxzbyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhdHRlbnRpb24uIFdBUk5fT04gc3RhdGVtZW50cyBhcmUgZ2VuZXJhbGx5IHRoZXJlIGZvciBhIHJlYXNvbiwgbmFtZWx5IHRvIHN0b3AgdGhpbmdzIGZyb20gcHJvY2VlZGluZyB0aGF0IHRoZSBkZXZlbG9wZXIgZGlkbid0IGV4cGVjdCB0byBoYXBwZW4uIFdpdGhvdXQgaXQsIHlvdSBhcmUgbW9yZSBsaWtlbHkgdG8gcnVuIGludG8gdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGVzZSBhcmVhcy4gSSB3aWxsIHNwZWNpZmljYWxseSBjaGVjayBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uLiBCYXNlZCBvbiBteSBmaW5kaW5ncyBmcm9tIHRoaXMgbW9yZSBpbi1kZXB0aCBhbmFseXNpcywgSSB3aWxsIG1ha2UgdGhlIGZpbmFsIGRlY2lzaW9uIGFib3V0IHNwaW5uaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToxMy4xOTUwMzE2ODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy91dGlsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzMDpcXHRcXHR9XFxuMTAzMTpcXHRcXG4xMDMyOlxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuMTAzMzpcXHRcXHRcXHR2bGFuX3ByaW9yaXR5ID0gKHNrYl92bGFuX3RhZ19nZXQoc2tiKSBcXHUwMDI2IFZMQU5fUFJJT19NQVNLKVxcbjEwMzQ6XFx0XFx0XFx0XFx0XFx1MDAzZVxcdTAwM2UgVkxBTl9QUklPX1NISUZUO1xcbjEwMzU6XFx0XFx0XFx0aWYgKHZsYW5fcHJpb3JpdHkgXFx1MDAzZSAwKSB7XFxuMTAzNjpcXHRcXHRcXHRcXHRyZXQgPSB2bGFuX3ByaW9yaXR5O1xcbjEwMzc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzODpcXHRcXHRcXHR9XFxuMTAzOTpcXHRcXHR9XFxuMTA0MDpcXHRcXG4xMDQxOlxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEwNDI6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcXG4xMDQzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xcbjEwNDQ6XFx0XFx0XFx0c3RydWN0IGlwaGRyIF9pcGg7XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdFxcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcXG4xMDQ3OlxcdFxcdFxcdFxcdFxcdFxcdCBzaXplb2YoKmlwaCksIFxcdTAwMjZfaXBoKTtcXG4xMDQ4OlxcdFxcdFxcdGlmICghaXBoKVxcbjEwNDk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA1MDpcXHRcXG4xMDUxOlxcdFxcdFxcdGRzY3AgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCkgXFx1MDAyNiAweGZjO1xcbjEwNTI6XFx0XFx0XFx0YnJlYWs7XFxuMTA1MzpcXHRcXHR9XFxuMTA1NDpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XFxuMTA1NTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4xMDU2OlxcdFxcdFxcdHN0cnVjdCBpcHY2aGRyIF9pcDZoO1xcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHRcXHRpcDZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLFxcbjEwNTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2YoKmlwNmgpLCBcXHUwMDI2X2lwNmgpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKCFpcDZoKVxcbjEwNjE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA2MjpcXHRcXG4xMDYzOlxcdFxcdFxcdGRzY3AgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpIFxcdTAwMjYgMHhmYztcXG4xMDY0OlxcdFxcdFxcdGJyZWFrO1xcbjEwNjU6XFx0XFx0fVxcbjEwNjY6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9NUExTX1VDKTpcXG4xMDY3OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfTVBMU19NQyk6IHtcXG4xMDY4OlxcdFxcdFxcdHN0cnVjdCBtcGxzX2xhYmVsIG1wbHNfdG1wLCAqbXBscztcXG4xMDY5OlxcdFxcbjEwNzA6XFx0XFx0XFx0bXBscyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSxcXG4xMDcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKCptcGxzKSwgXFx1MDAyNm1wbHNfdG1wKTtcXG4xMDcyOlxcdFxcdFxcdGlmICghbXBscylcXG4xMDczOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjEwNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjEzLjE5NTI0NDk2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjEwMjU5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJlY2VudCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgcmVjZW50IGNvZGUgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIHJlZ2FyZGluZyBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAsIEkgbm90aWNlZCBhIGNoYW5nZSBpbiBob3cgdGhlIElQIGhlYWRlciBpcyBhY2Nlc3NlZC4gUHJldmlvdXNseSwgaXQgcmVsaWVkIG9uIGRpcmVjdCBhY2Nlc3MgdmlhIGBpcF9oZHIoc2tiKWAgYW5kIGBpcHY2X2hkcihza2IpYC4gTm93LCBpdCdzIGJlZW4gdXBkYXRlZCB0byB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW5zdGVhZC4gVGhlIHJhdGlvbmFsZSBzZWVtcyBzb3VuZCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXJgIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCBvciB0aGUgaGVhZGVyIGhhc24ndCBiZWVuIHB1bGxlZCB5ZXQuIFRoaXMgcmVwbGFjZW1lbnQgYWxpZ25zIHdpdGggdGhlIGFwcHJvYWNoIHVzZWQgaW4gdGhlIE1QTFMgc2NlbmFyaW8sIGVtcGxveWluZyBgc2tiX2hlYWRlcl9wb2ludGVyYCBmb3Igc2FmZSBjb3B5aW5nIG9yIHJlZmVyZW5jaW5nIG9mIGRhdGEgd2l0aGluIHRoZSBza2IsIHdpdGggbGVuZ3RoIHZhbGlkYXRpb24uIEdvb2QgY2F0Y2gsIG1pdGlnYXRpbmcgcG90ZW50aWFsIGNyYXNoZXMgZHVlIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzcy5cblxuTmV4dCwgSSdsbCBleGFtaW5lIHRoZSBJQlNTIGpvaW4gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGBjZmc4MDIxMV9pYnNzX2pvaW5lZGAgYW5kIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYC4gSW4gYGNmZzgwMjExX2lic3Nfam9pbmVkYCwgdGhlIHVzZSBvZiBga3phbGxvY19vYmpgIGVuc3VyZXMgYSB6ZXJvZWQgYWxsb2NhdGlvbiBmb3IgdGhlIGV2ZW50IHN0cnVjdHVyZS4gVGhpcyBpcyBmb2xsb3dlZCBieSBhc3NpZ25pbmcgdGhlIGV2ZW50IHR5cGUgYW5kIEJTUyBwb2ludGVyLiBUaGUgc3Vic2VxdWVudCBjYWxsIHRvIGBfX2NmZzgwMjExX2lic3Nfam9pbmVkYCBpbnZvbHZlcyBzZW5kaW5nIHRoZSBJQlNTIEJTU0lEIGFuZCBjb3B5aW5nIGl0IHRvIGEgYHdycXVgIHN0cnVjdHVyZS4gVGhlIEJTU0lELCBjcml0aWNhbCBoZXJlLCBpcyBzb3VyY2VkIGZyb20gdGhlIGBjZmc4MDIxMV9ic3NgIHN0cnVjdHVyZSwgd2hpY2ggaXMgcG9wdWxhdGVkIGR1cmluZyBCU1MgY3JlYXRpb24gb3IgZGlzY292ZXJ5LiBFdmVyeXRoaW5nIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBpbiB0ZXJtcyBvZiBkYXRhIGZsb3cuXG5cbkZpbmFsbHksIEknbGwgdHJhY2UgdGhlIHNjYW4gcmVxdWVzdCBsaWZlY3ljbGUuIFRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludGAgaXMgaW5pdGlhdGVkIGluIGBjZmc4MDIxMV9zY2FuYCBhbmQgYG5sODAyMTFfdHJpZ2dlcl9zY2FuYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIHRoZSBleGFjdCBhbGxvY2F0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBzY2FuIHJlcXVlc3Qgc3RydWN0dXJlIGlzIG1hbmFnZWQgdGhyb3VnaG91dCBpdHMgbGlmZXRpbWUsIGluY2x1ZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGBkcml2ZXJfb3duc2AgYW5kIGBzdGFsZWAgc3RhdGVzLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjE3LjQwNTUwODAwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MDU0NjAyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzY2FuX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToxNy45MjM1NzA0NzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI3MTMzMjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBTY2FuIFJlcXVlc3QgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludGAgc3RydWN0dXJlcywgb3Igc3BlY2lmaWNhbGx5IHRoZSBgc2Nhbl9yZXFgIGluc3RhbmNlcywgYXJlIGJlaW5nIGFsbG9jYXRlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byB0aGUgYG5ldC93aXJlbGVzcy9zY2FuLmNgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYyBzdXJyb3VuZGluZyB3aXJlbGVzcyBzY2FubmluZywgc28gSSdsbCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCB3aXRoaW4gdGhhdCBmaWxlIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHMsIHN1Y2ggYXMgYGttYWxsb2NgLCBga3phbGxvY2AsIG9yIGFueSBjdXN0b20gYWxsb2NhdGlvbiBmdW5jdGlvbnMgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSBtaWdodCBlbXBsb3kuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ2llcyBvciBwb29scyBpbiBwbGFjZSBmb3IgdGhpcy4gRnJvbSB0aGVyZSwgSSdsbCB0cmFjZSBob3cgdGhlc2UgYHNjYW5fcmVxYCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgcG9wdWxhdGVkLCBhbmQgdWx0aW1hdGVseSByZWxlYXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToyMy4xOTQ5MDU1NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkyNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjYW5fcmVxLio9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuYz0yMjk9dm9pZCBjZmc4MDIxMV9zdG9wX3AycF9kZXZpY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDUtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoyNDY6XFx0aWYgKHJkZXYtXFx1MDAzZXNjYW5fcmVxIFxcdTAwMjZcXHUwMDI2IHJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2VyZXEud2RldiA9PSB3ZGV2KSB7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0yNDctXFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTI0OC1cXHRcXHQgICAgKCFyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgfHwgIXJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQpKVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MjQ5OlxcdFxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2VpbmZvLmFib3J0ZWQgPSB0cnVlO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMjUwLVxcdFxcdF9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE3MDk9c3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzYxLVxcdFxcdGNmZzgwMjExX3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd2Rldi1cXHUwMDNlaWZ0eXBlLCAtMSk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzYyOlxcdFxcdGlmIChyZGV2LVxcdTAwM2VzY2FuX3JlcSBcXHUwMDI2XFx1MDAyNiByZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlcmVxLndkZXYgPT0gd2Rldikge1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTc2My1cXHRcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZXNjYW5fcmVxLVxcdTAwM2Vub3RpZmllZCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzY1LVxcdFxcdFxcdCAgICAgIXJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlbm90aWZpZWQpKVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTc2NjpcXHRcXHRcXHRcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcS1cXHUwMDNlaW5mby5hYm9ydGVkID0gdHJ1ZTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3NjctXFx0XFx0XFx0X19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTEyNzI9c3RhdGljIGludCBubDgwMjExX3RyaWdnZXJfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTUwMy1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjExNTA0OlxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gcmVxdWVzdDtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExNTA1LVxcdGVyciA9IGNmZzgwMjExX3NjYW4ocmRldik7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExNTE1LSBvdXRfZnJlZTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjExNTE2OlxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gTlVMTDtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExNTE3LVxcdGtmcmVlKHJlcXVlc3QpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMTk2NT1zdGF0aWMgaW50IG5sODAyMTFfc3RhcnRfc2NoZWRfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMTk4Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjExOTgzOlxcdHNjaGVkX3NjYW5fcmVxID0gbmw4MDIxMV9wYXJzZV9zY2hlZF9zY2FuKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTg0LVxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlYXR0cnMsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTk0LVxcdGlmICh3YW50X211bHRpIFxcdTAwMjZcXHUwMDI2IHJkZXYtXFx1MDAzZXdpcGh5Lm1heF9zY2hlZF9zY2FuX3JlcXMgXFx1MDAzZSAxKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTE5OTU6XFx0XFx0c2NoZWRfc2Nhbl9yZXEtXFx1MDAzZXJlcWlkID0gY2ZnODAyMTFfYXNzaWduX2Nvb2tpZShyZGV2KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTExOTk2LVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDAxOlxcdHNjaGVkX3NjYW5fcmVxLVxcdTAwM2VkZXYgPSBkZXY7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjAwMjpcXHRzY2hlZF9zY2FuX3JlcS1cXHUwMDNld2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwMy1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMDA0LVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU09DS0VUX09XTkVSXSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDA1OlxcdFxcdHNjaGVkX3NjYW5fcmVxLVxcdTAwM2Vvd25lcl9ubHBvcnRpZCA9IGluZm8tXFx1MDAzZXNuZF9wb3J0aWQ7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjAwNi1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjA2ODc9c3RhdGljIGludCBubDgwMjExX2FkZF9zY2FuX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY4OS17XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDY5MDpcXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxID0gcmRldi1cXHUwMDNlc2Nhbl9yZXE7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDY5MS1cXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzEyNz1zdGF0aWMgaW50IG5sODAyMTFfbmV0bGlua19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTQ2LVxcdFxcdFxcdFxcdFxcdGxpc3QpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMTQ3OlxcdFxcdFxcdGlmIChzY2hlZF9zY2FuX3JlcS1cXHUwMDNlb3duZXJfbmxwb3J0aWQgPT0gbm90aWZ5LVxcdTAwM2Vwb3J0aWQpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMTQ4OlxcdFxcdFxcdFxcdHNjaGVkX3NjYW5fcmVxLVxcdTAwM2VubF9vd25lcl9kZWFkID0gdHJ1ZTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTQ5LVxcdFxcdFxcdFxcdHdpcGh5X3dvcmtfcXVldWUoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz04NDQ9c3RhdGljIGludCBjZmc4MDIxMV9zY2FuXzZnaHooc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy04NDktXFx0aW50IG5fY2hhbm5lbHMsIGNvdW50ID0gMCwgZXJyO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6ODUwOlxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpyZXF1ZXN0LCAqcmRldl9yZXEgPSByZGV2LVxcdTAwM2VzY2FuX3JlcTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg1MS1cXHRMSVNUX0hFQUQoY29sb2NfYXBfbGlzdCk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNDUtXFx0aWYgKHJlcXVlc3QtXFx1MDAzZXJlcS5uX2NoYW5uZWxzKSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMDQ2OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpvbGQgPSByZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXE7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDQ3LVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA0ODpcXHRcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSByZXF1ZXN0O1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA0OS1cXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA1NC1cXHRcXHRpZiAoIWZpcnN0X3BhcnQgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT04oIW9sZCkpXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMDU1OlxcdFxcdFxcdHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcS1cXHUwMDNlaW5mbyA9IG9sZC1cXHUwMDNlaW5mbztcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNTYtXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEwNTgtXFx0XFx0aWYgKGVycikge1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTA1OTpcXHRcXHRcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSBvbGQ7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDYwLVxcdFxcdFxcdGtmcmVlKHJlcXVlc3QpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMDcyPWludCBjZmc4MDIxMV9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTA3NC1cXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqcmVxdWVzdDtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjEwNzU6XFx0c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdF9pbnQgKnJkZXZfcmVxID0gcmRldi1cXHUwMDNlc2Nhbl9yZXE7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMDc2LVxcdHUzMiBuX2NoYW5uZWxzID0gMCwgaWR4LCBpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTEyLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTExMzpcXHRyZGV2LVxcdTAwM2VpbnRfc2Nhbl9yZXEgPSByZXF1ZXN0O1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTExNC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM9MTEzMj12b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExOTEtXFx0Y2ZnODAyMTFfcHV0X3NjYW5fcmVxKHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcSk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTkyOlxcdHJkZXYtXFx1MDAzZWludF9zY2FuX3JlcSA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTkzLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE5NC1cXHRjZmc4MDIxMV9wdXRfc2Nhbl9yZXEocmRldi1cXHUwMDNlc2Nhbl9yZXEpO1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTE5NTpcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcSA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTk2LVxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMjA4PXZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTAte1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTIxMTpcXHRzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0X2ludCAqaW50cmVxID1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTEyMTItXFx0XFx0Y29udGFpbmVyX29mKHJlcXVlc3QsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50LCByZXEpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0xMzk2PWludCBfX2NmZzgwMjExX3N0b3Bfc2NoZWRfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTE0MDItXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxNDAzOlxcdHNjaGVkX3NjYW5fcmVxID0gY2ZnODAyMTFfZmluZF9zY2hlZF9zY2FuX3JlcShyZGV2LCByZXFpZCk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xNDA0LVxcdGlmICghc2NoZWRfc2Nhbl9yZXEpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTM1NjY9aW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTcxLVxcdHN0cnVjdCB3aXBoeSAqd2lwaHk7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNTcyOlxcdHN0cnVjdCBpd19zY2FuX3JlcSAqd3JlcSA9IE5VTEw7XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTczLVxcdHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50ICpjcmVxO1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNjk0LVxcdHNjb3BlZF9ndWFyZCh3aXBoeSwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNjk1OlxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gY3JlcTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM2OTYtXFx0XFx0ZXJyID0gcmRldl9zY2FuKHJkZXYsIGNyZXEpO1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzY5Ny1cXHRcXHRpZiAoZXJyKSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzozNjk4OlxcdFxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gTlVMTDtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM2OTktXFx0XFx0XFx0LyogY3JlcSB3aWxsIGJlIGZyZWVkIGJlbG93ICovXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9NjQ9c3RhdGljIGludCBjZmc4MDIxMV9jb25uX3NjYW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzEtXFxubmV0L3dpcmVsZXNzL3NtZS5jOjEzMjpcXHRyZGV2LVxcdTAwM2VzY2FuX3JlcSA9IHJlcXVlc3Q7XFxubmV0L3dpcmVsZXNzL3NtZS5jLTEzMy1cXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzktXFx0fSBlbHNlIHtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTQwOlxcdFxcdHJkZXYtXFx1MDAzZXNjYW5fcmVxID0gTlVMTDtcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTQxLVxcdFxcdGtmcmVlKHJlcXVlc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMTo1MToyMy4yNDUxMDE1MjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MzkzNzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgU2NhbiBSZXF1ZXN0IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBjZmc4MDIxMV9zY2FuX3JlcXVlc3RfaW50YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc2NhbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiB0cmlnZ2VyZWQgdmlhIGBubDgwMjExX3RyaWdnZXJfc2NhbmAgb3IgZGlyZWN0bHkgdGhyb3VnaCBgY2ZnODAyMTFfc2NhbmAuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uLlxuXG5JJ2xsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmw4MDIxMS5jYCwgYW5kIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDExMzAwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBraW5kcyBvZiBhbGxvY2F0aW9ucyBoYXBwZW4sIHNvIGhvcGVmdWxseSwgdGhlIGNyZWF0aW9uIG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmlnaHQgdGhlcmUgaW4gZnJvbnQgb2YgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyB0aGUgc2NhbiBpbml0aWF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mzk5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDE6NTE6MjUuMzM5MDQwOTUxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzMDA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExMzAxOlxcdFxcdFxcdHNjYW5fZnJlcXMgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRX0tIWl07XFxuMTEzMDI6XFx0XFx0XFx0c2Nhbl9mcmVxc19raHogPSB0cnVlO1xcbjExMzAzOlxcdFxcdH0gZWxzZSBpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKVxcbjExMzA0OlxcdFxcdFxcdHNjYW5fZnJlcXMgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU107XFxuMTEzMDU6XFx0XFxuMTEzMDY6XFx0XFx0aWYgKHNjYW5fZnJlcXMpIHtcXG4xMTMwNzpcXHRcXHRcXHRuX2NoYW5uZWxzID0gdmFsaWRhdGVfc2Nhbl9mcmVxcyhzY2FuX2ZyZXFzKTtcXG4xMTMwODpcXHRcXHRcXHRpZiAoIW5fY2hhbm5lbHMpXFxuMTEzMDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTEzMTA6XFx0XFx0fSBlbHNlIHtcXG4xMTMxMTpcXHRcXHRcXHRuX2NoYW5uZWxzID0gaWVlZTgwMjExX2dldF9udW1fc3VwcG9ydGVkX2NoYW5uZWxzKHdpcGh5KTtcXG4xMTMxMjpcXHRcXHR9XFxuMTEzMTM6XFx0XFxuMTEzMTQ6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSlcXG4xMTMxNTpcXHRcXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwgdG1wKVxcbjExMzE2OlxcdFxcdFxcdFxcdG5fc3NpZHMrKztcXG4xMTMxNzpcXHRcXG4xMTMxODpcXHRcXHRpZiAobl9zc2lkcyBcXHUwMDNlIHdpcGh5LVxcdTAwM2VtYXhfc2Nhbl9zc2lkcylcXG4xMTMxOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTMyMDpcXHRcXG4xMTMyMTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSlcXG4xMTMyMjpcXHRcXHRcXHRpZV9sZW4gPSBubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9JRV0pO1xcbjExMzIzOlxcdFxcdGVsc2VcXG4xMTMyNDpcXHRcXHRcXHRpZV9sZW4gPSAwO1xcbjExMzI1OlxcdFxcbjExMzI2OlxcdFxcdGlmIChpZV9sZW4gXFx1MDAzZSB3aXBoeS1cXHUwMDNlbWF4X3NjYW5faWVfbGVuKVxcbjExMzI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExMzI4OlxcdFxcbjExMzI5OlxcdFxcdHNpemUgPSBzdHJ1Y3Rfc2l6ZShyZXF1ZXN0LCByZXEuY2hhbm5lbHMsIG5fY2hhbm5lbHMpO1xcbjExMzMwOlxcdFxcdHNzaWRzX29mZnNldCA9IHNpemU7XFxuMTEzMzE6XFx0XFx0c2l6ZSA9IHNpemVfYWRkKHNpemUsIGFycmF5X3NpemUoc2l6ZW9mKCpyZXF1ZXN0LVxcdTAwM2VyZXEuc3NpZHMpLCBuX3NzaWRzKSk7XFxuMTEzMzI6XFx0XFx0aWVfb2Zmc2V0ID0gc2l6ZTtcXG4xMTMzMzpcXHRcXHRzaXplID0gc2l6ZV9hZGQoc2l6ZSwgaWVfbGVuKTtcXG4xMTMzNDpcXHRcXHRyZXF1ZXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4xMTMzNTpcXHRcXHRpZiAoIXJlcXVlc3QpXFxuMTEzMzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTEzMzc6XFx0XFxuMTEzMzg6XFx0XFx0aWYgKG5fc3NpZHMpXFxuMTEzMzk6XFx0XFx0XFx0cmVxdWVzdC1cXHUwMDNlcmVxLnNzaWRzID0gKHZvaWQgKilyZXF1ZXN0ICsgc3NpZHNfb2Zmc2V0O1xcbjExMzQwOlxcdFxcdHJlcXVlc3QtXFx1MDAzZXJlcS5uX3NzaWRzID0gbl9zc2lkcztcXG4xMTM0MTpcXHRcXHRpZiAoaWVfbGVuKVxcbjExMzQyOlxcdFxcdFxcdHJlcXVlc3QtXFx1MDAzZXJlcS5pZSA9ICh2b2lkICopcmVxdWVzdCArIGllX29mZnNldDtcXG4xMTM0MzpcXHRcXG4xMTM0NDpcXHRcXHRpID0gMDtcXG4xMTM0NTpcXHRcXHRpZiAoc2Nhbl9mcmVxcykge1xcbjExMzQ2OlxcdFxcdFxcdC8qIHVzZXIgc3BlY2lmaWVkLCBiYWlsIG91dCBpZiBjaGFubmVsIG5vdCBmb3VuZCAqL1xcbjExMzQ3OlxcdFxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgc2Nhbl9mcmVxcywgdG1wKSB7XFxuMTEzNDg6XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuO1xcbjExMzQ5OlxcdFxcdFxcdFxcdGludCBmcmVxID0gbmxhX2dldF91MzIoYXR0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjI1LjM0MDYzNDEyMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTkzMzMzMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIElkZW50aWZpZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoZSBjb3JlIGZvY3VzIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIG9uIGhhcmRlbmluZyB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IHNhZmV0eSwgYW5kIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLCBkZXNwaXRlIHRoaXMgYmVpbmcgYSBrZXJuZWwgY29kZSByZXZpZXcgYW5kIG5vdCBhIGZ1enppbmcgZXhlcmNpc2UuXG5cbkZpcnN0LCBJIG5vdGUgdGhlIHVzZSBvZiBga3phbGxvY2AgZm9yIHRoZSBgcmVxdWVzdGAgc3RydWN0dXJlLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgYGRyaXZlcl9vd25zYCBhbmQgYHN0YWxlYCB0byBmYWxzZSAoMCksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5zdXJpbmcgYSBrbm93biBzdGF0ZS4gVGhlbiwgSSBleGFtaW5lZCB0aGUgYGNmZzgwMjExX2V2ZW50YCB1bmlvbiwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc2l0aW9uIGZyb20gYGlqYCB0byBgYnNzYCBpbiBgY2ZnODAyMTFfaWJzc19qb2luZWRgLiBUaGUgYGt6YWxsb2NgIGFsbG9jYXRpb24gYW5kIHN1YnNlcXVlbnQgYXNzaWdubWVudCAoYGV2LVx1MDAzZWlqLmJzcyA9IGJzcztgKSBzaG91bGQsIGluIHByaW5jaXBsZSwgcHJldmVudCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZSBzdWJzZXF1ZW50IHVzYWdlIGluIGBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzYCBzZWVtcyBzYWZlIGdpdmVuIHRoaXMgaW5pdGlhbGl6YXRpb24uXG5cbkkgdGhlbiBsb29rZWQgYXQgdGhlIHdvcmtxdWV1ZSBjaGFuZ2VzIGluIGByZWcuY2AgYW5kIHRoZWlyIHJlbGF0aW9uIHRvIGBjZmc4MDIxMV9sZWF2ZWAgY2FsbHMuIFRoZSB1c2Ugb2YgYHdpcGh5X3dvcmtfaW5pdGAgYW5kIGBJTklUX1dPUktgIGNvdXBsZWQgd2l0aCB0aGUgY2hlY2tzIHdpdGhpbiBgcmVnX3dkZXZfY2hhbl92YWxpZGAgc3VnZ2VzdHMgdGhlIGludGVudGlvbiBpcyB0byBhdm9pZCBsb2NraW5nIGludmVyc2lvbnMuIFRoZSBjb21tZW50cyBhYm91dCBMT0NLREVQIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHJlaW5mb3JjZSB0aGlzLiBJIHNlZSB0aGlzIGFzIGEgc3RhbmRhcmQgYXBwcm9hY2ggdG8gYXZvaWQgZGVhZGxvY2tzOyB0aGlzIGlzIG1vcmUgYW4gaXNzdWUgZm9yIExPQ0tERVAgYW5kIGxlc3MgYSBLTVNBTiBjb25jZXJuLlxuXG5UaGUgcmVtb3ZhbCBvZiB0aGUgYFdBUk5fT04oLi4uKWAgd3JhcHBlciBpbiBgY2ZnODAyMTFfc3RvcF9wMnBfZGV2aWNlYCBhbmQgYGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsYCBpcyBtb3N0bHkgYSBjb3NtZXRpYyBjaGFuZ2UsIGJ1dCBJIHN0aWxsIHRha2UgdGhlIHRpbWUgdG8gY29uc2lkZXIgdGhlIGNvbmRpdGlvbiB3aXRoaW4uXG5cblRoZSBzY2FuIHJlcXVlc3QgcmVmZXJlbmNlIG1hbmFnZW1lbnQgaW4gYHNjYW4uY2AgYW5kIGByZGV2LW9wcy5oYCBpcyBwcm9taXNpbmcsIGFzIHRoZXkgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUuXG5cblRoZSBgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZGAgY2hhbmdlIHVzaW5nIGBza2JfaGVhZGVyX3BvaW50ZXJgIGlzIGEgZ29vZCBwcmFjdGljZS4gVXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgdG8gaGFuZGxlIHBhY2tldCBkYXRhIHJlZHVjZXMgdGhlIHJpc2sgb2Ygb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgZGF0YSBsZWFrcywgd2hpY2ggYXJlIHByaW1hcmlseSBoYW5kbGVkIGJ5IEtBU0FOLlxuXG5GaW5hbGx5LCB0aGUgQlNTIGhhbmRsaW5nIGNoYW5nZXMgKGBfX2NmZzgwMjExX2Jzc191cGRhdGVgIGFuZCBgY2ZnODAyMTFfdXBkYXRlX2Fzc29jX2Jzc19lbnRyeWApIGFwcGVhciB0byBiZSBtaW5vciByZWZpbmVtZW50cyByZWdhcmRpbmcgZGF0YSBhY2Nlc3MgYW5kIHJlZHVuZGFudCBjaGVja3MuIGByY3VfYWNjZXNzX3BvaW50ZXJgIGlzIHByb3Blcmx5IHVzZWQsIGFkZHJlc3NpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuXG5cbk5vdywgdG8gZXhwbGljaXRseSBhZGRyZXNzIHRoZSBLTVNBTiBxdWVzdGlvbnM6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBObywgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGluZm8tbGVha3MuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBga3phbGxvY2AgaXMgdXNlZCBhbmQgbG9jYWwgdmFyaWFibGVzIGFyZSB3ZWxsIGhhbmRsZWQuXG5cbjMuICAqKkFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHByZXNlbnQuXG5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObywgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaXMgdXNlZCBjb3JyZWN0bHkgYW5kIGRlZmVuc2l2ZWx5LlxuXG5HaXZlbiB0aGlzIHRob3JvdWdoIHJldmlldywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBBbGwgaWRlbnRpZmllZCBpc3N1ZXMgcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgYm91bmRhcnkgY2hlY2tzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGFyZSBwcmVzZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEknbGwgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGFzIGFsd2F5cywgdG8gYmUgY2VydGFpbiwgYW5kIHRoZW4gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjMzLCJPdXRwdXRUb2tlbnMiOjI5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAxOjUxOjMzLjkzMzk3MDM0NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgcGFja2V0IHBhcnNpbmcgYWNyb3NzIGNmZzgwMjExOlxcbjEuIFNjYW4gcmVxdWVzdCB0cmFja2luZyAoZHJpdmVyX293bnMvc3RhbGUpOiBGaXhlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGZyZWVzIG9mIHNjYW4gcmVxdWVzdHMgYWNyb3NzIGRyaXZlciBjYW5jZWxsYXRpb24gcGF0aHMuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBzY2FuIHJlcXVlc3Qgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYywgc28gYWxsIG5ldyBzdHJ1Y3QgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxcbjMuIElCU1MgZXZlbnQgaGFuZGxpbmc6IFBhc3NlcyBCU1MgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBldmVudCBwcm9jZXNzaW5nIHJhdGhlciB0aGFuIHJlLWxvb2tpbmcgdGhlbSB1cDsgYWxsIGV2ZW50IHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB2aWEga3phbGxvY19vYmogYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpcyBwcm9wZXJseSBtYW5hZ2VkLlxcbjQuIFBhY2tldCBjbGFzc2lmaWNhdGlvbiAoc2tiX2hlYWRlcl9wb2ludGVyKTogRml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gbm9uLWxpbmVhciBza2JzIGJ5IHNhZmVseSBjaGVja2luZyBoZWFkZXIgbGVuZ3RocyB3aXRoIHNrYl9oZWFkZXJfcG9pbnRlci4gQW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJlYWRzIGFyZSBjYXVnaHQgYnkgS0FTQU4uXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgS0FTQU4gYW5kIExPQ0tERVAgZnVsbHkgY292ZXIgdGhlIHJpc2tzIGluIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBsaWZldGltZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgcGFja2V0IHBhcnNpbmcgYWNyb3NzIGNmZzgwMjExOlxcbjEuIFNjYW4gcmVxdWVzdCB0cmFja2luZyAoZHJpdmVyX293bnMvc3RhbGUpOiBGaXhlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgcHJlbWF0dXJlIGZyZWVzIG9mIHNjYW4gcmVxdWVzdHMgYWNyb3NzIGRyaXZlciBjYW5jZWxsYXRpb24gcGF0aHMuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBzY2FuIHJlcXVlc3Qgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvYywgc28gYWxsIG5ldyBzdHJ1Y3QgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFJlZ3VsYXRvcnkgd29ya3F1ZXVlIHNwbGl0OiBTb2x2ZXMgbG9jayBvcmRlcmluZy9kZWFkbG9ja3MgYmV0d2VlbiBydG5sX2xvY2sgYW5kIHdpcGh5IG11dGV4IGR1cmluZyByZWd1bGF0b3J5IGludGVyZmFjZSB0ZWFyZG93bi4gVGhpcyBmYWxscyBzdHJpY3RseSB1bmRlciBMT0NLREVQLlxcbjMuIElCU1MgZXZlbnQgaGFuZGxpbmc6IFBhc3NlcyBCU1MgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBldmVudCBwcm9jZXNzaW5nIHJhdGhlciB0aGFuIHJlLWxvb2tpbmcgdGhlbSB1cDsgYWxsIGV2ZW50IHN0cnVjdHMgYXJlIGFsbG9jYXRlZCB2aWEga3phbGxvY19vYmogYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpcyBwcm9wZXJseSBtYW5hZ2VkLlxcbjQuIFBhY2tldCBjbGFzc2lmaWNhdGlvbiAoc2tiX2hlYWRlcl9wb2ludGVyKTogRml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gbm9uLWxpbmVhciBza2JzIGJ5IHNhZmVseSBjaGVja2luZyBoZWFkZXIgbGVuZ3RocyB3aXRoIHNrYl9oZWFkZXJfcG9pbnRlci4gQW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJlYWRzIGFyZSBjYXVnaHQgYnkgS0FTQU4uXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgS0FTQU4gYW5kIExPQ0tERVAgZnVsbHkgY292ZXIgdGhlIHJpc2tzIGluIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[1] Phase: Succeeded StartedAt: 2026-09-06 01:51:43 +0000 UTC FinishedAt: 2026-09-06 01:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 01:51:43 +0000 UTC FinishedAt: 2026-09-06 01:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2] Phase: Succeeded StartedAt: 2026-09-06 01:51:43 +0000 UTC FinishedAt: 2026-09-06 05:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 01:51:43 +0000 UTC FinishedAt: 2026-09-06 05:33:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 01:51:43 +0000 UTC FinishedAt: 2026-09-06 01:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 01:51:43 +0000 UTC FinishedAt: 2026-09-06 01:51:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflowz6dkv/series-workflowz6dkv-convert-artifact-2683462413/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 01:51:53 +0000 UTC FinishedAt: 2026-09-06 02:08:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 01:51:53 +0000 UTC FinishedAt: 2026-09-06 02:08:18 +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:*af4cb3a3-33c0-4043-ad75-1c41659fa3ea,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-workflowz6dkv/series-workflowz6dkv-convert-artifact-2683462413/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": "c2d9cb91-eea6-4b18-a461-3d6eb23aa250", "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-workflowz6dkv/series-workflowz6dkv-build-action-2427043459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 01:51:53 +0000 UTC FinishedAt: 2026-09-06 02:08:08 +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:*af4cb3a3-33c0-4043-ad75-1c41659fa3ea,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-workflowz6dkv/series-workflowz6dkv-convert-artifact-2683462413/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": "c2d9cb91-eea6-4b18-a461-3d6eb23aa250", "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-workflowz6dkv/series-workflowz6dkv-build-action-2427043459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 02:08:18 +0000 UTC FinishedAt: 2026-09-06 02:08:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 02:08:18 +0000 UTC FinishedAt: 2026-09-06 02:08:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 02:08:18 +0000 UTC FinishedAt: 2026-09-06 02:08:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 02:08:18 +0000 UTC FinishedAt: 2026-09-06 02:08:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflowz6dkv/series-workflowz6dkv-convert-artifact-3486350696/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 02:08:28 +0000 UTC FinishedAt: 2026-09-06 02:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 02:08:28 +0000 UTC FinishedAt: 2026-09-06 02:10:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c2d9cb91-eea6-4b18-a461-3d6eb23aa250,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-workflowz6dkv/series-workflowz6dkv-build-action-2427043459/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-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 02:10:20 +0000 UTC FinishedAt: 2026-09-06 02:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 02:10:20 +0000 UTC FinishedAt: 2026-09-06 02:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 02:10:20 +0000 UTC FinishedAt: 2026-09-06 02:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 02:10:20 +0000 UTC FinishedAt: 2026-09-06 02:26:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*af4cb3a3-33c0-4043-ad75-1c41659fa3ea,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-workflowz6dkv/series-workflowz6dkv-convert-artifact-3486350696/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": "77a25679-909d-4630-8cfa-54df743c7580", "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-workflowz6dkv/series-workflowz6dkv-build-action-4156175636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 02:10:20 +0000 UTC FinishedAt: 2026-09-06 02:26:33 +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:*af4cb3a3-33c0-4043-ad75-1c41659fa3ea,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-workflowz6dkv/series-workflowz6dkv-convert-artifact-3486350696/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": "77a25679-909d-4630-8cfa-54df743c7580", "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-workflowz6dkv/series-workflowz6dkv-build-action-4156175636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 02:26:43 +0000 UTC FinishedAt: 2026-09-06 02:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 02:26:43 +0000 UTC FinishedAt: 2026-09-06 02:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 02:26:43 +0000 UTC FinishedAt: 2026-09-06 02:28:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 02:26:43 +0000 UTC FinishedAt: 2026-09-06 02:28:29 +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:*77a25679-909d-4630-8cfa-54df743c7580,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-workflowz6dkv/series-workflowz6dkv-build-action-4156175636/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-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 02:28:39 +0000 UTC FinishedAt: 2026-09-06 05:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 02:28:39 +0000 UTC FinishedAt: 2026-09-06 05:33:10 +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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"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:*c2d9cb91-eea6-4b18-a461-3d6eb23aa250,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77a25679-909d-4630-8cfa-54df743c7580,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-workflowz6dkv/series-workflowz6dkv-build-action-2427043459/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-workflowz6dkv/series-workflowz6dkv-build-action-4156175636/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 02:28:39 +0000 UTC FinishedAt: 2026-09-06 02:28:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 02:28:39 +0000 UTC FinishedAt: 2026-09-06 02:28:44 +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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"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-workflowz6dkv/series-workflowz6dkv-convert-artifact-3425883297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 02:28:39 +0000 UTC FinishedAt: 2026-09-06 02:28:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 02:28:39 +0000 UTC FinishedAt: 2026-09-06 02:28:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 02:28:39 +0000 UTC FinishedAt: 2026-09-06 02:28:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 02:28:49 +0000 UTC FinishedAt: 2026-09-06 05:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6dkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["cfg80211_scan_done","___cfg80211_scan_done","reg_leave_invalid_chans_wk","reg_leave_invalid_nan_wk","reg_check_chans_work","cfg80211_ibss_joined","__cfg80211_ibss_joined","cfg80211_classify8021d","__cfg80211_bss_update","cfg80211_update_assoc_bss_entry","cfg80211_stop_p2p_device","cfg80211_process_wdev_events"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"e97621ac-6a13-46a9-892b-ef17934a0d3a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 02:28:49 +0000 UTC FinishedAt: 2026-09-06 05:32:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c2d9cb91-eea6-4b18-a461-3d6eb23aa250,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77a25679-909d-4630-8cfa-54df743c7580,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-workflowz6dkv/series-workflowz6dkv-build-action-2427043459/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-workflowz6dkv/series-workflowz6dkv-build-action-4156175636/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-workflowz6dkv/series-workflowz6dkv-convert-artifact-3425883297/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,}