Name: series-workflowfwsst Phase: Succeeded StartedAt: 2026-08-05 11:22:45 +0000 UTC FinishedAt: 2026-08-05 15:34:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[0] Phase: Succeeded StartedAt: 2026-08-05 11:22:45 +0000 UTC FinishedAt: 2026-08-05 11:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 11:22:45 +0000 UTC FinishedAt: 2026-08-05 11:44:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "MACVTAP", "MACVLAN", "TAP", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "MACVTAP", "MACVLAN", "TAP", "VLAN_8021Q" ], "series_id": "56f00092-824c-4022-8d10-c4fbf3cbd3cd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "packet_sendmsg", "packet_sendmsg_spkt", "tap_sendmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtNQUNWVEFQJiMzNDssCiAgICAmIzM0O01BQ1ZMQU4mIzM0OywKICAgICYjMzQ7VEFQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWNrZXRfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc2VuZG1zZ19zcGt0JiMzNDssCiAgICAmIzM0O3RhcF9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWTEFOIHRhZ2dlZCBwYWNrZXRzIGluIHRoZSB0cmFuc21pdCBwYXRocyBvZiBUQVAgZGV2aWNlcyBhbmQgQUZfUEFDS0VUIHNvY2tldHMuIEl0IHVwZGF0ZXMgdGhlIHNrYi1cdTAwM2Vwcm90b2NvbCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgd2hlbiBwcm9jZXNzaW5nIGNyYWZ0ZWQgVkxBTiBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzRmNGVmMTQ5MDAwYTM1OTYyNzIwODllYzI1MWNjODQyODhjZGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTE6NDI6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwLmMgYi9kcml2ZXJzL25ldC90YXAuY1xuaW5kZXggZmFlMTE1OTE1YzhlZi4uYWZjYzQ5MTliZDA0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3RhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90YXAuY1xuQEAgLTEwODEsOSAmIzQzOzEwODEsMTUgQEAgc3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIFx0fVxuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbi1cdGlmIChldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sLCBcdTAwMjZkZXB0aCkgIT0gMClcbi1cdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcbiYjNDM7XHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4mIzQzO1x0XHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZGVwdGgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcm90byAhPSAwKSB7XG4mIzQzO1x0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4mIzQzO1x0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHRhcCA9IHJjdV9kZXJlZmVyZW5jZShxLVx1MDAzZXRhcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbmluZGV4IDBlMTM1NWJlODlmNjQuLmE2MmQ0NDUwNDdjMGUgMTAwNjQ0XG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5AQCAtMTk0NSw5ICYjNDM7MTk0NSwxNSBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbiBcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXHUwMDI2XHUwMDI2XG4tXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4tXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4mIzQzO1x0ICAgIGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKSkge1xuJiM0MztcdFx0X19iZTE2IHByb3RvID0gdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmRlcHRoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJvdG8gIT0gMCkge1xuJiM0MztcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuJiM0MztcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDssCiAgICAmIzM0O01BQ1ZUQVAmIzM0OywKICAgICYjMzQ7TUFDVkxBTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dGFwX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZMQU4gdGFnZ2VkIHBhY2tldHMgaW4gdGhlIHRyYW5zbWl0IHBhdGhzIG9mIFRBUCBkZXZpY2VzIGFuZCBBRl9QQUNLRVQgc29ja2V0cy4gSXQgdXBkYXRlcyB0aGUgc2tiLVx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNGY0ZWYxNDkwMDBhMzU5NjI3MjA4OWVjMjUxY2M4NDI4OGNkZWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxMTo0MjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RhcC5jIGIvZHJpdmVycy9uZXQvdGFwLmMKaW5kZXggZmFlMTE1OTE1YzhlZi4uYWZjYzQ5MTliZDA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdGFwLmMKQEAgLTEwODEsOSAmIzQzOzEwODEsMTUgQEAgc3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCX0KIAogCS8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovCi0JaWYgKGV0aF90eXBlX3ZsYW4oc2tiLSZndDtwcm90b2NvbCkgJmFtcDsmYW1wOwotCSAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItJmd0O3Byb3RvY29sLCAmYW1wO2RlcHRoKSAhPSAwKQotCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpOwomIzQzOwlpZiAoZXRoX3R5cGVfdmxhbihza2ItJmd0O3Byb3RvY29sKSkgewomIzQzOwkJX19iZTE2IHByb3RvID0gdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLSZndDtwcm90b2NvbCwKJiM0MzsJCQkJCQkJICAgJmFtcDtkZXB0aCk7CiYjNDM7CiYjNDM7CQlpZiAocHJvdG8gIT0gMCkgewomIzQzOwkJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7CiYjNDM7CQkJc2tiLSZndDtwcm90b2NvbCA9IHByb3RvOwomIzQzOwkJfQomIzQzOwl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGFwID0gcmN1X2RlcmVmZXJlbmNlKHEtJmd0O3RhcCk7CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAwZTEzNTViZTg5ZjY0Li5hNjJkNDQ1MDQ3YzBlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTE5NDUsOSAmIzQzOzE5NDUsMTUgQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaykKIAogCS8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovCiAJaWYgKGxpa2VseShza2ItJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIpICZhbXA7JmFtcDsKLQkgICAgZXRoX3R5cGVfdmxhbihza2ItJmd0O3Byb3RvY29sKSAmYW1wOyZhbXA7Ci0JICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi0mZ3Q7cHJvdG9jb2wsICZhbXA7ZGVwdGgpICE9IDApCi0JCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7CiYjNDM7CSAgICBldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiYjNDM7CQlfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItJmd0O3Byb3RvY29sLAomIzQzOwkJCQkJCQkgICAmYW1wO2RlcHRoKTsKJiM0MzsKJiM0MzsJCWlmIChwcm90byAhPSAwKSB7CiYjNDM7CQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTsKJiM0MzsJCQlza2ItJmd0O3Byb3RvY29sID0gcHJvdG87CiYjNDM7CQl9CiYjNDM7CX0KIAogCXNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVEFQIGFuZCBBRl9QQUNLRVQgVkxBTiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC90YXAuY2AgYW5kIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gSW50ZXJlc3RpbmcsIGl0JiMzOTtzIHRvdWNoaW5nIGJvdGggVEFQIGFuZCBBRl9QQUNLRVQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFpbWVkIGF0IGEgYnJvYWRlciB1c2UgY2FzZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHRhcF9nZXRfdXNlcl94ZHBgIGFuZCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIGhvdyBWTEFOLXRhZ2dlZCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQuCgpJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgdXBkYXRlcyBgc2tiLSZndDtwcm90b2NvbGAgdG8gdGhlIGlubmVyIHByb3RvY29sIGFmdGVyIGEgY2FsbCB0byBgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoYC4gU28sIGl0JiMzOTtzIGFib3V0IGNvcnJlY3RseSBpZGVudGlmeWluZyB0aGUgZW5jYXBzdWxhdGVkIHByb3RvY29sIHdpdGhpbiBhIFZMQU4gdGFnLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaDsgVkxBTnMgY2FuIG5lc3QsIHNvIGdldHRpbmcgdGhlICpyaWdodCogcHJvdG9jb2wgaXMgY3J1Y2lhbCBmb3IgYW55IGhpZ2hlci1sZXZlbCBwcm9jZXNzaW5nLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IGhpdC4gSSBrbm93IGB0YXBfZ2V0X3VzZXJfeGRwYCBpcyBpbiBgZHJpdmVycy9uZXQvdGFwLmNgLCB0aGF0IG9uZSYjMzk7cyBlYXN5IGVub3VnaCB0byBmaW5kLiBBbmQsIHllYWgsIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCB0aGF0JiMzOTtzIHdoYXQgSSB3b3VsZCBleHBlY3QuIEdvb2QuCgpSaWdodCwgYHRhcF9nZXRfdXNlcl94ZHBgIGlzIGNsZWFybHkgY2FsbGVkIHdoZW4geW91JiMzOTtyZSBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCBhIFRBUCBpbnRlcmZhY2UgKndpdGgqIFhEUCBlbmFibGVkLiBBbmQgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBnb2luZyB0byBiZSB1c2VkIHdpdGggQUZfUEFDS0VUIHNvY2tldHMuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlczsgdGhpcyBpcyBnb2luZyB0byBhZmZlY3QgWERQIHNldHVwcyBhbmQgQUZfUEFDS0VUIHNvY2tldCB1c2Vycy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVxdWlyZWQgY29uZmlncy4gRm9yIGBkcml2ZXJzL25ldC90YXAuY2AsIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBuZWVkcyBgQ09ORklHX01BQ1ZUQVBgIG9yIGBDT05GSUdfVFVOYCB0byBiZSBlbmFibGVkLCBidXQgbGV0JiMzOTtzIGJlIHN1cmUuIFdhaXQsIGB0YXAuY2AgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYENPTkZJR19UQVBgIG9yIGBDT05GSUdfTUFDVlRBUGAsIHNvLCBsZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBmb3IgdGhpcyBwYXRjaCB0byBldmVuIHRha2UgZWZmZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX01BQ1ZMQU4pICYjNDM7PSBtYWN2bGFuLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19NQUNWVEFQKSAmIzQzOz0gbWFjdnRhcC5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfTUlJKSAmIzQzOz0gbWlpLm9cbi0tXG5kcml2ZXJzL25ldC9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfVFVOKSAmIzQzOz0gdHVuLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19UQVApICYjNDM7PSB0YXAub1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMzQtb2JqLSQoQ09ORklHX1ZFVEgpICYjNDM7PSB2ZXRoLm9cbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWTEFOKSAmIzQzOz0gaXB2bGFuLm9cbmRyaXZlcnMvbmV0L2lwdmxhbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JUFZUQVApICYjNDM7PSBpcHZ0YXAub1xuZHJpdmVycy9uZXQvaXB2bGFuL01ha2VmaWxlLTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXB3MngwMC9saWJpcHdfcnguYy0zLSAqIE9yaWdpbmFsIGNvZGUgYmFzZWQgSG9zdCBBUCAoc29mdHdhcmUgd2lyZWxlc3MgTEFOIGFjY2VzcyBwb2ludCkgZHJpdmVyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jOjQ6ICogZm9yIEludGVyc2lsIFByaXNtMi8yLjUvMyAtIGhvc3RhcC5vIG1vZHVsZSwgY29tbW9uIHJvdXRpbmVzXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jLTUtICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBvciBtb2R1bGUsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGZvciBgQ09ORklHX1RBUGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIGRlbHZpbmcgaW50byB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1BBQ0tFVGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBkZXBlbmRlbmN5IGNoYWluLiBHb3R0YSBlbnN1cmUgdGhvc2UgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIGFyZSBiYWtlZCBpbiBzbyBldmVyeXRoaW5nIGZ1bmN0aW9ucyBjb3JyZWN0bHkuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLCBsZXNzIEkgcHVsbCBteSBoYWlyIG91dCBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9wYWNrZXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9NYWtlZmlsZS01LVxubmV0L3BhY2tldC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QQUNLRVQpICYjNDM7PSBhZl9wYWNrZXQub1xubmV0L3BhY2tldC9NYWtlZmlsZS03LW9iai0kKENPTkZJR19QQUNLRVRfRElBRykgJiM0Mzs9IGFmX3BhY2tldF9kaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBhY2tldCBQYXJzaW5nIGFuZCBYRFAgVXNlciBTcGFjZSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRpdmUgaW50byBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGFuZCBhbHNvIHRha2UgYSBsb29rIGF0IGB0YXBfZ2V0X3VzZXJfeGRwYC4gSSBrbm93IGJvdGggb2YgdGhlc2UgYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW4gYSBzeXN0ZW0gaW52b2x2aW5nIG5ldHdvcmsgdHJhZmZpYyBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIFhEUC4gVGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbiBmb3IgaW50ZXJwcmV0aW5nIHRoZSByYXcgZGF0YSBjb21pbmcgaW4sIG1ha2luZyBzdXJlIHdlIGhhdmUgYWxsIHRoZSBpbmZvIHdlIG5lZWQgZnJvbSB0aGUgcGFja2V0IGhlYWRlcnMgdG8gaGFuZGxlIGl0IGNvcnJlY3RseS4gVGhlbiwgdGhlIGB0YXBfZ2V0X3VzZXJfeGRwYCBmdW5jdGlvbiBtdXN0IGJlIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdGFwIGRldmljZSBhbmQgdGhlIHVzZXItc3BhY2UgWERQIHByb2dyYW0gLSBnZXR0aW5nIGl0IHRvIHRhbGsgdG8gZWFjaCBvdGhlciBpcyBwcm9iYWJseSB0aGUga2V5IHRvIG9wdGltaXppbmcgdGhlIHBhY2tldCBmbG93LCBzbywgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoYXQgcHJvY2VzcyBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhlYWRlcnMgYXJlIHBhcnNlZCBpbiByZWxhdGlvbiB0byB0aGUgWERQIHByb2dyYW0gYW5kIHRoZSB0YXAgZGV2aWNlLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNlbnRyYWwgdG8gYW55IGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbi4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfcGFyc2VfaGVhZGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTkzNTpzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM2LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5NjY9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwNzgtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIwNzk6XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDgwLVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU4OD1zdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NjItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI2NjM6XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjY0LVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2ND1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5MC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzA5MTpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgQUZfUEFDS0VUIFNlbmQgUGF0aHMgYW5kIFhEUCBJbnRlZ3JhdGlvbioqCgpSaWdodCwgc28gYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gSG1tLCB0aG9zZSBhbGwgc2NyZWFtICYjMzQ7QUZfUEFDS0VUIHNlbmQgcGF0aHMmIzM0OyB0byBtZSwgb2YgY291cnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBhbmQgaG93IHRoZSBoZWFkZXIgcGFyc2luZyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHNlbmRpbmcgcGFja2V0cyB0aHJvdWdoIHRoZSBBRl9QQUNLRVQgc29ja2V0IGZhbWlseS4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpLgoKSSYjMzk7ZCBiZXR0ZXIgdGFrZSBhIGxvb2sgYXQgYHRhcF9nZXRfdXNlcl94ZHBgIHRvIHNlZSBob3cgWERQIGlzIGJlaW5nIGxldmVyYWdlZCB3aXRoaW4gdGhpcyBlbnRpcmUgZmxvdy4gV2hlcmUgZG9lcyBpdCBpbnRlZ3JhdGU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGhlYWRlciBwYXJzaW5nIGluIHJlbGF0aW9uIHRvIGFueSBYRFAtYmFzZWQgcHJvY2Vzc2luZyBvciBmaWx0ZXJpbmc/IEkmIzM5O20gY3VyaW91cyBpZiB0aGUgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBwcmVwYXJpbmcgcGFja2V0cyBmb3IgWERQLCBvciBob3cgaXQgYWZmZWN0cyBhbnkgWERQLWJhc2VkIHRyYWZmaWMgc3RlZXJpbmcuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IHRoZSB1c2Vyc3BhY2UgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIEFGX1BBQ0tFVCBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwX2dldF91c2VyX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz0xMDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhcF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDQtXG5kcml2ZXJzL25ldC90YXAuYzoxMDQ1OnN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTExMTg9c3RhdGljIGludCB0YXBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTExMjktXHRcdFx0eGRwID0gXHUwMDI2KChzdHJ1Y3QgeGRwX2J1ZmYgKiljdGwtXHUwMDNlcHRyKVtpXTtcbmRyaXZlcnMvbmV0L3RhcC5jOjExMzA6XHRcdFx0dGFwX2dldF91c2VyX3hkcChxLCB4ZHApO1xuZHJpdmVycy9uZXQvdGFwLmMtMTEzMS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTg2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRFAgUGFja2V0IFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcGFja2V0cyBhcmUgc2VudCB0aHJvdWdoIHRoZSBUQVAgZGV2aWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGFwX3NlbmRtc2dgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBoZXJlLCBnaXZlbiBpdHMgY2FsbCB0byBgdGFwX2dldF91c2VyX3hkcGAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdzogYHRhcF9zZW5kbXNnYCBhbmQgdGhlbiBpdHMgcmVsYXRlZCBmdW5jdGlvbnMgYHBhY2tldF9zbmRgLCBgdHBhY2tldF9maWxsX3NrYmAsIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGB0YXBfc2VuZG1zZ2AgaXMgYWN0dWFsbHkgYW4gZXhwb3J0ZWQgc3ltYm9sLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIG9yIGlmIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggd291bGQgbGltaXQgaXRzIHNjb3BlLiBLbm93aW5nIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXBfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz0xMDQ1PXN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTE3LVxuZHJpdmVycy9uZXQvdGFwLmM6MTExODpzdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG5kcml2ZXJzL25ldC90YXAuYy0xMTE5LVx0XHQgICAgICAgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHRhcF9zb2NrZXRfb3BzID0ge1xuZHJpdmVycy9uZXQvdGFwLmM6MTE2NjpcdC5zZW5kbXNnID0gdGFwX3NlbmRtc2csXG5kcml2ZXJzL25ldC90YXAuYy0xMTY3LVx0LnJlY3Ztc2cgPSB0YXBfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBUYXAgRGV2aWNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRhcF9zZW5kbXNnYCBmdW5jdGlvbiDigJMgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCB1c3VhbGx5IHN1Z2dlc3RzIGl0JiMzOTtzIHNjb3BlZCB3aXRoaW4gdGhlIGB0YXAuY2AgZmlsZS4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQmIzM5O3MgYmVpbmcgdXNlZCBhcyBhIGBwcm90b19vcHNgIGNhbGxiYWNrLCBhbmQgdGhhdCBuZWVkcyBjYXJlZnVsIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgcmlnaHQgZnVuY3Rpb24uCgpIbW0sIHNob3VsZCBJIGJlIHVzaW5nIGB0YXBfZ2V0X3VzZXJfeGRwYCBpbnN0ZWFkPyBUaGF0JiMzOTtzIGFsc28gc3RhdGljLCBidXQgaXMgdGhhdCBhIGJldHRlciBmaXQgZm9yIHRoaXMgcGFydGljdWxhciBzaXR1YXRpb24/IFRoaXMgZGVjaXNpb24gbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLgoKQWgsIHdhaXQsIGhvbGQgb24uLi4gYHRhcF9nZXRfdXNlcl94ZHBgIGlzICphbHNvKiBzdGF0aWMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgbWFraW5nIHRoZSBiZXN0IGNob2ljZSwgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHNvIGNhbiBJIGFjdHVhbGx5IHVzZSBgdGFwX3NlbmRtc2dgPyBZZXMsIGl0JiMzOTtzIGEgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4KCkhhbmcgb24uLi4gdGhlcmUmIzM5O3MgYWxzbyBgdGFwX2dldF91c2VyYCBpbiBgdGFwLmNgLiBTbyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZSBmdW5jdGlvbnMgaW4gYHRhcC5jYCBpcyB0aGUgY29ycmVjdCBmdW5jdGlvbiB0byB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NDM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGFwX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNTcxLS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xuZHJpdmVycy9uZXQvdGFwLmM6NTcyOnN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3My1cdFx0XHQgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbm9ibG9jaylcbi0tXG5kcml2ZXJzL25ldC90YXAuYz02OTE9c3RhdGljIHNzaXplX3QgdGFwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNjk5LVxuZHJpdmVycy9uZXQvdGFwLmM6NzAwOlx0cmV0dXJuIHRhcF9nZXRfdXNlcihxLCBOVUxMLCBmcm9tLCBub2Jsb2NrKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTcwMS19XG4tLVxuZHJpdmVycy9uZXQvdGFwLmM9MTAzND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxuZHJpdmVycy9uZXQvdGFwLmM6MTA0NTpzdGF0aWMgaW50IHRhcF9nZXRfdXNlcl94ZHAoc3RydWN0IHRhcF9xdWV1ZSAqcSwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ2LXtcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMTE4PXN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVx0XHRcdHhkcCA9IFx1MDAyNigoc3RydWN0IHhkcF9idWZmICopY3RsLVx1MDAzZXB0cilbaV07XG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlx0XHRcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTExMzEtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTM0LVxuZHJpdmVycy9uZXQvdGFwLmM6MTEzNTpcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgY3RsID8gY3RsLVx1MDAzZXB0ciA6IE5VTEwsIFx1MDAyNm0tXHUwMDNlbXNnX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYy0xMTM2LVx0XHRcdCAgICBtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgRnVuY3Rpb24gQ2FsbCBSZWxhdGlvbnNoaXBzIGluIHRoZSBQYWNrZXQgUHJvY2Vzc2luZyBQYXRoKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvZGUgYW5kIHNlZWluZyBob3cgZGF0YSBmbG93cy4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGB0YXBfZ2V0X3VzZXJfeGRwYCBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiBgdGFwX3NlbmRtc2dgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIEkgc2VlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgYmVpbmcgY2FsbGVkIGluIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gT2theSwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgYWJvdXQgdGhlc2UgcGFydHMgb2YgdGhlIGNvZGUuCgpOb3cgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgZWFjaCBvbmUuIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIHZpc2liaWxpdHkgd2l0aGluIHRoZSBzb3VyY2UgZmlsZS4gV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gYHBhY2tldF9zbmRgIGlzIGFsc28gc3RhdGljPyBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlLCB0aGF0IGFyZSBjYWxsZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjYWxsZ3JhcGggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTI5PXN0YXRpYyB2b2lkIHRwYWNrZXRfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTQ4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTQ5OnN0YXRpYyBpbnQgX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU1MC17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTY0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTY1OnN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NjYtXHRcdFx0XHQgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgaW50IHZuZXRfaGRyX3N6KVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3Ni1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NzpcdHJldCA9IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHZuZXRfaGRyLCAqbGVuKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3OC1cdGlmIChyZXQpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjY4PXN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzM2OnN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM3LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDgtXHRcdFx0bWVtY3B5KFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODQ5Olx0XHRcdGlmIChfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODUwLVx0XHRcdFx0dHBfbGVuID0gLUVJTlZBTDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5Mzg9c3RhdGljIHN0cnVjdCBza19idWZmICpwYWNrZXRfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI5NjQ6c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2NS17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDIwLVx0aWYgKHZuZXRfaGRyX3N6KSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMjE6XHRcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFx1MDAyNmxlbiwgXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAyMi1cdFx0aWYgKGVycilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMxMjI9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTI3LVx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEyODpcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMjktXHQgKi9cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMC1cdGlmIChkYXRhX3JhY2UocG8tXHUwMDNldHhfcmluZy5wZ192ZWMpKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTMxOlx0XHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMzM6XHRyZXR1cm4gcGFja2V0X3NuZChzb2NrLCBtc2csIGxlbik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgU2VuZGluZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHBhY2tldF9zZW5kbXNnYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgdGhlIGRhdGEgaGl0cywgZm9yIGJvdGggYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgLiBXYWl0IGEgbWludXRlLi4uIHRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHRob3VnaHQgYHBhY2tldF9zZW5kbXNnYCB3YXMgc3RhdGljIHRvby4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBMZXQgbWUgY2xhcmlmeSAtIGlzIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gaW4gdGhpcyBjaGFpbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgcGFja2V0cyBhcmUgYWN0dWFsbHkgdHJhbnNtaXR0ZWQuIEJlc3QgdG8gZG91YmxlLWNoZWNrIG15IGluaXRpYWwgYXNzdW1wdGlvbiBhYm91dCBgcGFja2V0X3NlbmRtc2dgLiBUaW1lIHRvIGdvIGRpZ2dpbmcgaW50byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgYW5kIGNvbmZpcm0gZXhhY3RseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZC4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGxvd2VyLWxldmVsIHNlbmRpbmcgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkzNT1zdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk2NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTk2NjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTY3LVx0XHRcdCAgICAgICBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjczNj1zdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NTgtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NTk6XHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc2MC1cdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2ND1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEyMjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMy17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODEtXHQuc2h1dGRvd24gPVx0c29ja19ub19zaHV0ZG93bixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDY4MjpcdC5zZW5kbXNnID1cdHBhY2tldF9zZW5kbXNnX3Nwa3QsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODMtXHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ2ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDItXHQuZ2V0c29ja29wdF9pdGVyID1cdHBhY2tldF9nZXRzb2Nrb3B0LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzAzOlx0LnNlbmRtc2cgPVx0cGFja2V0X3NlbmRtc2csXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDQtXHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRW50cnkgUG9pbnRzIGZvciBOZXR3b3JrIERldmljZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpbml0aWFsbHksIHRoZXkgc2VlbSBzdGF0aWMsIHdoaWNoIGNvdWxkIGJlIGFuIGlzc3VlIGluIHRlcm1zIG9mIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdCwgdGhleSYjMzk7cmUgYWN0dWFsbHkgYHByb3RvX29wc2AgY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5IGFyZSwgaW4gZmFjdCwgZW50cnkgcG9pbnRzLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgdGhlIGluc3RydWN0aW9ucyBJIGhhdmUgaGVyZSBzYXkgSSBzaG91bGQgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMsIGlmIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKU28sIGlmIGBwYWNrZXRfc2VuZG1zZ2AgaXMgc3RhdGljLCBjb3VsZCBpdCBiZSBpbmxpbmVkPyBObywgdGhhdCBjYW4mIzM5O3QgYmUgcmlnaHQ7IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYHBhY2tldF9vcHMuc2VuZG1zZ2AsIHNvIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaHVzLCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgYXQgbGVhc3Qgbm90IGNvbXBsZXRlbHkuIFN0aWxsLCBpZiBJICpjYW4qIGZpbmQgYSBub24tc3RhdGljIG9wdGlvbiwgdGhhdCYjMzk7cyB0aGUgcHJlZmVycmVkIHJvdXRlLgoKSG1tLCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBhcHByb3ByaWF0ZT8gSSBrbm93IGBzb2NrX3NlbmRtc2dgIGlzIHRoZSBnZW5lcmljIG9uZSwgYnV0IHRoYXQmIzM5O3MgYSAqaG90IHBhdGgq4oCUdGhlIGNvZGUgaXMgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UsIHNvIEkgc2hvdWxkIGJlIGNhcmVmdWwgdGhlcmUuIFRoYXQgbWVhbnMgYHBhY2tldF9zZW5kbXNnYCBhbmQgYHBhY2tldF9zZW5kbXNnX3Nwa3RgIGFyZSBnb29kIGNob2ljZXMuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGB0YXAuY2AuIEluIHRoaXMgY2FzZSwgYHRhcF9zZW5kbXNnYCBpcyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gQWgsIGJ1dCB3YWl0LCBgdGFwX3NlbmRtc2dgICppcyogc3RhdGljISBEYW1uLiBPa2F5LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUgaW4gdGhpcyBmaWxlPyBJIG5lZWQgdG8gY2hlY2sgYHRhcF9zZW5kbXNnYCBpbiB0aGUgYGRyaXZlcnMvbmV0L3RhcC5jYCBmaWxlIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcF9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RhcC5jPTEwNDU9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTExMTctXG5kcml2ZXJzL25ldC90YXAuYzoxMTE4OnN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMTktXHRcdCAgICAgICBzaXplX3QgdG90YWxfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdGFwX3NvY2tldF9vcHMgPSB7XG5kcml2ZXJzL25ldC90YXAuYzoxMTY2Olx0LnNlbmRtc2cgPSB0YXBfc2VuZG1zZyxcbmRyaXZlcnMvbmV0L3RhcC5jLTExNjctXHQucmVjdm1zZyA9IHRhcF9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB0YXBfc2VuZG1zZ2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRhcF9zZW5kbXNnYCBpcyBpbmRlZWQgYXNzaWduZWQgdG8gYHRhcF9zb2NrZXRfb3BzLnNlbmRtc2dgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIG5vdCBhbiBpbmxpbmVkIGZ1bmN0aW9uOyBpdCBoYXMgYSBkZWRpY2F0ZWQgc3ltYm9sIGFkZHJlc3MsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgYW5hbHlzaXMuIEdvb2QuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byB3b3JrIHdpdGg6IGB0YXBfc2VuZG1zZ2AgaXRzZWxmLCBgcGFja2V0X3NlbmRtc2dgLCBhbmQgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLgoKTm93LCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgcmVnYXJkaW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19UQVBgIGlzIGVzc2VudGlhbCwgYXMgdGhhdCBkaXJlY3RseSBlbmFibGVzIHRoZSBgZHJpdmVycy9uZXQvdGFwLmNgIGRyaXZlciwgd2hpY2ggaXMgb3VyIHRhcmdldC4gU2ltaWxhcmx5LCBgQ09ORklHX1BBQ0tFVGAgaXMgYWxzbyBhIG11c3QtaGF2ZSBiZWNhdXNlIGl0JiMzOTtzIHJlcXVpcmVkIGZvciB0aGUgcGFja2V0IHNvY2tldCBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cywgSSYjMzk7bGwgcXVpY2tseSBnbGFuY2Ugb3ZlciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBgQ09ORklHX1RBUGAgc2V0dGluZy4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzkxPWNvbmZpZyBUVU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQxNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE1OmNvbmZpZyBUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctNDE2LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgQ09ORklHX1RBUGAuLi4gaXQmIzM5O3MgYSB0cmlzdGF0ZSBvcHRpb24sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSBidWlsdC1pbiwgbW9kdWxhciwgb3Igbm90IGRlZmluZWQgYXQgYWxsLiBBbmQgaW50ZXJlc3RpbmdseSwgaXQgZG9lc24mIzM5O3QgaGF2ZSBpdHMgb3duIGV4cGxpY2l0IHByb21wdCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYW4gJiMzNDtpbXBsZW1lbnRhdGlvbiBkZXRhaWwmIzM0OyBzbyB0byBzcGVhay4gTm93LCB0aGUga2V5IGlzIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhpcyBvcHRpb24gZ2V0cyBzZWxlY3RlZC4gRnJvbSB0aGUgY29udGV4dCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgcHVsbGVkIGluIGFzIGEgZGVwZW5kZW5jeSBieSBib3RoIGBDT05GSUdfTUFDVlRBUGAgYW5kIGBDT05GSUdfSVBWVEFQYC4gU28sIGlmIGVpdGhlciBvZiB0aG9zZSBvcHRpb25zIGFyZSBlbmFibGVkIChlaXRoZXIgYnVpbHQtaW4gb3IgYXMgYSBtb2R1bGUpLCB0aGUga2VybmVsIGJ1aWxkICppbXBsaWNpdGx5KiBicmluZ3MgaW4gYENPTkZJR19UQVBgLiBFc3NlbnRpYWxseSwgYFRBUGAgaXMgYSBzdXBwb3J0aW5nIHN0cnVjdHVyZSBmb3IgdGhvc2UgdHdvIGZlYXR1cmVzLiBJdCBzZWVtcyB0aGF0IGBUQVBgIGlzIGEgbG93LWxldmVsIGJhc2UgZm9yIHZpcnR1YWxpemF0aW9uIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBleHBsYWlucyB3aHkgdGhlcmUmIzM5O3Mgbm8gZGlyZWN0IHByb21wdCwgaXRzIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCAmIzM0O3Vwc3RyZWFtJiMzNDsgYnkgdGhlIG9wdGlvbnMgdGhhdCAqdXNlKiBpdC4gVGhpcyBpcyBnb29kIGRlc2lnbiwgcmVkdWNpbmcgY2x1dHRlciBpbiB0aGUgY29uZmlndXJhdGlvbiBtZW51LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgVEFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODItXHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgzOlx0c2VsZWN0IFRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMTY9Y29uZmlnIElQVlRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjE5LVx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnOjIyMDpcdHNlbGVjdCBUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctMjIxLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIE1BQ1ZUQVAgYW5kIEl0cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGUgYENPTkZJR19UQVBgIGZ1bmN0aW9uYWxpdHkgY29tcGlsZWQuIFRoZSBkb2N1bWVudGF0aW9uIHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgZWl0aGVyIGBDT05GSUdfTUFDVlRBUGAgb3IgYENPTkZJR19JUFZUQVBgIHdpbGwgYWNoaWV2ZSB0aGlzLiBJIHRoaW5rIGBNQUNWVEFQYCBpcyB0aGUgYmV0dGVyIHJvdXRlLCBJJiMzOTtsbCBnbyB3aXRoIHRoYXQgZm9yIG5vdy4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZGVwZW5kZW5jaWVzLiBSaWdodCwgSSByZW1lbWJlciBub3csIGBNQUNWVEFQYCByZWxpZXMgb24gYm90aCBgTUFDVkxBTmAgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBJTkVUYCBzdGFjay4gSSBoYWQgZm9yZ290dGVuIHRvIGZhY3RvciB0aGF0IGluIGluaXRpYWxseS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlIGNlcnRhaW4uIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvciBJ4oCZbGwgZW5jb3VudGVyIGJ1aWxkIGlzc3Vlcy4gQmV0dGVyIHRvIHZlcmlmeSB0aGlzIG5vdyB0aGFuIHRvIHdhc3RlIHRpbWUgZGVidWdnaW5nIGxhdGVyLiBMZXQgbWUganVzdCBjb25maXJtIHRob3NlIGBNQUNWVEFQYCBkZXBlbmRlbmNpZXMgZXhwbGljaXRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQ1ZUQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xNjU9Y29uZmlnIE1BQ1ZMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTc5OmNvbmZpZyBNQUNWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cdHRyaXN0YXRlIFwmIzM0O01BQy1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb246IGBNQUNWVEFQYCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGludm9sdmluZyBgTUFDVlRBUGAsIGl0JiMzOTtzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgbmVjZXNzYXJ5IHBpZWNlcyBhcmUgaW4gcGxhY2UuIEkgY2FuJiMzOTt0IGJ1aWxkIGEgcm9idXN0IHNvbHV0aW9uIG9uIGEgc2hha3kgZm91bmRhdGlvbiwgYW5kIGBNQUNWVEFQYCBpcywgaW4gbXkgZXhwZXJpZW5jZSwgb25lIG9mIHRob3NlIHRoaW5ncyB0aGF0IGNhbiBzb21ldGltZXMgc2lsZW50bHkgdHJpcCB5b3UgdXAgaWYgaXRzIHByZXJlcXVpc2l0ZXMgYXJlbiYjMzk7dCBtZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGV2ZXJ5dGhpbmcgd2hpY2ggc3VwcG9ydHMgdGhpcy4gSSBuZWVkIHRvIGtub3cgd2hhdCBrZXJuZWwgbW9kdWxlcyBhcmUgcmVxdWlyZWQsIHdoYXQgdXNlci1zcGFjZSB1dGlsaXRpZXMgYXJlIGRlcGVuZGVkIHVwb24sIGFuZCBpZGVhbGx5LCBJIHNob3VsZCBrbm93IHdoaWNoIHZlcnNpb25zIGFyZSBrbm93biB0byBwbGF5IG5pY2VseSB0b2dldGhlci4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBhdm9pZGluZyBjb21waWxlIGVycm9yczsgaXQmIzM5O3MgYWJvdXQgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3VlcywgYW5kIGVuc3VyaW5nIEkgZG9uJiMzOTt0IHdhc3RlIHRpbWUgdHJvdWJsZXNob290aW5nIHByb2JsZW1zIHRoYXQgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQgd2l0aCBhIGJpdCBvZiB1cGZyb250IGR1ZSBkaWxpZ2VuY2UuIEEgcXVpY2sgZGVwZW5kZW5jeSBhc3Nlc3NtZW50IGlzIGFsd2F5cyB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipNQUNWTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cdHRyaXN0YXRlIFwmIzM0O01BQy1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBNQUNWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4Mi1cdGRlcGVuZHMgb24gSU5FVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbmV0d29ya2luZyBjb25maWd1cmF0aW9uczoKCioqQnVpbGRpbmcgdGhlIFZpcnR1YWwgTmV0d29yayoqCgpBbHJpZ2h0LCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbmV0d29yayBzZXR1cC4gSXQgbG9va3MgbGlrZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBgTUFDVlRBUGAgYW5kIHRoYXQsIG9mIGNvdXJzZSwgcmVsaWVzIG9uIGBNQUNWTEFOYCBhbmQgYElORVRgIHRvIGdldCBpdHMgam9iIGRvbmUuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGJyaW5nIGluIGBNQUNWTEFOYCBhbmQgdGhlbiBgTUFDVlRBUGAgaXRzZWxmLiBBbmQsIGZvciBnb29kIG1lYXN1cmUsIEkmIzM5O2xsIGFkZCBgUEFDS0VUYCB0byB0aGUgbGlzdC4gTm93LCBgUEFDS0VUYCB1c3VhbGx5IGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgZW5hYmxlZCBleHBsaWNpdGx5LCBpdCYjMzk7cyB0eXBpY2FsbHkgYmFrZWQgaW4gYnkgZGVmYXVsdCwgYnV0IEkmIzM5O20gYSBzdGlja2xlciBmb3IgZG91YmxlLWNoZWNraW5nIHRoZXNlIHRoaW5ncy4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gdmVyaWZ5IHRoZSBvYnZpb3VzIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCBnb3RjaGFzIGRvd24gdGhlIGxpbmUuIFRoYXQmIzM5O3MgdGhlIHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUNLRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L0tjb25maWctNS1cbm5ldC9wYWNrZXQvS2NvbmZpZzo2OmNvbmZpZyBQQUNLRVRcbm5ldC9wYWNrZXQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IHNvY2tldFwmIzM0O1xuLS1cbm5ldC9wYWNrZXQvS2NvbmZpZy0xOC1cbm5ldC9wYWNrZXQvS2NvbmZpZzoxOTpjb25maWcgUEFDS0VUX0RJQUdcbm5ldC9wYWNrZXQvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldDogc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcG90ZW50aWFsIGNoYW5nZXMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHRoZSBmdWxsIHNjb3BlIG9mIGl0cyBpbXBhY3QuIEZpcnN0IHRoaW5ncyBmaXJzdDogaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIGFkZCBgUEFDS0VUYCBhcyBhIHRyaXN0YXRlLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGxldCYjMzk7cyBtYWtlIGEgbm90ZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYFRVTmAgaXMgYWxzbyBhZmZlY3RlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGB0YXAuY2AsIGFuZCB0aGF0JiMzOTtzIHVzZWQgYnkgYE1BQ1ZUQVBgIGFuZCBgSVBWVEFQYC4gSG93ZXZlciwgYFRVTmAgbGl2ZXMgaW4gaXRzIG93biBgdHVuLmNgIGRyaXZlciwgc28gaXQgc2hvdWxkIGJlIGluZGVwZW5kZW50LCBtZWFuaW5nIHdlJiMzOTtyZSBsaWtlbHkgZ29vZCBvbiB0aGF0IGZyb250IGFuZCBubyBmdXJ0aGVyIGFjdGlvbiBpcyByZXF1aXJlZCB0aGVyZS4gYE1BQ1ZUQVBgIGFuZCBgTUFDVkxBTmAgc2VlbSB1bmFmZmVjdGVkLgoKRmluYWxseSwgc2luY2UgdGhlIHBhdGNoIHRvdWNoZXMgVkxBTiBoYW5kbGluZywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgbmVlZCB0byBhZGp1c3QgYW55dGhpbmcgcmVsYXRpbmcgdG8gYFZMQU5fODAyMVFgLiBCZXN0IHRvIGJlIHRob3JvdWdoLCBnaXZlbiB0aGUgY2hhbmdlcyB0byB0aGF0IGFyZWEuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhZGRyZXNzZWQgaW4gdGhlIHVwZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvODAyMXEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHVzaW5nIGBldGhfdHlwZV92bGFuYCBhbmQgYHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aGAuIFRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBlaXRoZXIgb2YgdGhlc2UgZGVwZW5kIG9uIHRoZSBgVkxBTl84MDIxUWAgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24uIElmIHRoZXkgZG8sIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2Ygd2hhdGV2ZXIgY2hhbmdlIGlzIGluIHRoaXMgcGF0Y2ggd2l0aCByZXNwZWN0IHRvIHRoYXQgZGVwZW5kZW5jeS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYnJlYWsgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgODAyLjFRIHN0YW5kYXJkLiBJdCBpcyBlc3NlbnRpYWwgSSB1bmRlcnN0YW5kIGFueSBpbXBsaWNhdGlvbnMgZm9yIHN0YW5kYXJkIFZMQU4gdGFnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9NjU4PXN0YXRpYyBpbmxpbmUgX19iZTE2IHZsYW5fZ2V0X3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNjYzLS8qIFRoaXMgdmVyc2lvbiBvZiBfX3ZsYW5fZ2V0X3Byb3RvY29sKCkgYWxzbyBwdWxscyBtYWMgaGVhZGVyIGluIHNrYi1cdTAwM2VoZWFkICovXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo2NjQ6c3RhdGljIGlubGluZSBfX2JlMTYgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC02NjUtXHRcdFx0XHRcdFx0IF9fYmUxNiB0eXBlLCBpbnQgKmRlcHRoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgUGFja2V0IFRyYW5zbWlzc2lvbiBGb2N1cyoqCgpPa2F5LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIGlubGluZSwgd2hpY2ggbWVhbnMgdGhleSAqc2hvdWxkbiYjMzk7dCogZGVwZW5kIG9uIGBWTEFOXzgwMjFRYCBiZWluZyBjb21waWxlZC4gSG93ZXZlciwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaWYgSSB3YW50IHRvIHRlc3QgVkxBTi10YWdnZWQgcGFja2V0IGZ1bmN0aW9uYWxpdHksIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0aGF0IGZsYWcgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIExldCYjMzk7cyBpbmNsdWRlIGl0LgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gcGFja2V0IHRyYW5zbWlzc2lvbjogYHRhcF9zZW5kbXNnYCwgYHBhY2tldF9zZW5kbXNnYCwgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBhbmQgYHRwYWNrZXRfc25kYC4KCldhaXQgYSBtaW51dGUsIGlzbiYjMzk7dCBgdHBhY2tldF9zbmRgIGEgKnN0YXRpYyogZnVuY3Rpb24/IEJ1dCBJJiMzOTttIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgcGFja2V0X3NlbmRtc2dgIGFuZC4uLm9oLCBubywgSSB0aGluayBJIHdhcyBnZXR0aW5nIG1peGVkIHVwLiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gKm9ubHkqIGBwYWNrZXRfc2VuZG1zZ2AuIFRoZW4uLi4gYHRwYWNrZXRfZmlsbF9za2JgLi4uIGlzbiYjMzk7dCB0aGF0IGZvciByZWNlcHRpb24sIG5vdCB0cmFuc21pc3Npb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHBhY2tldF9maWxsX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU2NT1zdGF0aWMgaW50IHBhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqbGVuLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4Ny1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU4ODpzdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4OS1cdFx0dm9pZCAqZnJhbWUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIGludCB0cF9sZW4sXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg2OC1cdFx0fVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODY5Olx0XHR0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NzAtXHRcdFx0XHRcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgXHUwMDI2c29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMzNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQYWNrZXQgU29ja2V0IFNlbmQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYHRwYWNrZXRfZmlsbF9za2JgIGdldHMgY2FsbGVkIGJ5IGB0cGFja2V0X3NuZGAsIHdoaWNoIHRlbGxzIG1lIHRoYXQgYHRwYWNrZXRfc25kYCBpcyB0aGUgcHJpbWFyeSBzZW5kIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgcGFja2V0IHNvY2tldHMgdXRpbGl6aW5nIHJpbmcgYnVmZmVycy4gVGhlbiB0aGVyZSYjMzk7cyBgcGFja2V0X3NuZGAgd2hpY2ggbG9va3MgdG8gYmUgdGhlIG1haW4gb25lIGZvciByZWd1bGFyIHBhY2tldCBzb2NrZXRzLiBJIHNlZSBgcGFja2V0X3NlbmRtc2dfc3BrdGAgdGhlcmUgdG9vLCB3aGljaCBpcyBmb3IgdGhlLCBub3cgb2Jzb2xldGUsIGBTT0NLX1BBQ0tFVGAgZnVuY3Rpb25hbGl0eSwgYW5kIHdlJiMzOTt2ZSBnb3QgYHRhcF9zZW5kbXNnYCBmb3IgVEFQIGRldmljZXMuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGBwYWNrZXRfc25kYCBzdGF0aWM/IFllcCwgaXQgaXMuIEJ1dCwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHBhY2tldF9zZW5kbXNnYC4gQWgsIHJpZ2h0LCBgcGFja2V0X3NlbmRtc2dgIGdldHMgYXNzaWduZWQgdG8gYHBhY2tldF9vcHMuc2VuZG1zZ2AuIE9rYXksIHNvIGBwYWNrZXRfc2VuZG1zZ2AgaXMgdGhlIHJlYWwgZW50cnkgcG9pbnQuIEdvdCBpdC4gU28gdGhhdCBtZWFucyBJIHNob3VsZCBmb2N1cyBvbiBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdGFwX3NlbmRtc2dgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdG8gdGFyZ2V0LgoKSnVzdCB3YW50IHRvIHZlcmlmeSB3aGVyZSB0aGVzZSBhcmUgbG9jYXRlZC4gYHRhcF9zZW5kbXNnYCBpcyBpbiBgdGFwLmNgLCBqdXN0IGFzIEkmIzM5O2QgZXhwZWN0LiBgcGFja2V0X3NlbmRtc2dgIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAgYXJlIGJvdGggaW4gYGFmX3BhY2tldC5jYC4gUGVyZmVjdC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IHNlbmQtcmVsYXRlZCBmdW5jdGlvbnMgSSBzaG91bGQga25vdyBhYm91dD8gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZSBgdGFwX2dldF91c2VyX3hkcGAgaXMgY2FsbGVkIGZyb20gYHRhcF9zZW5kbXNnYC4gT2theS4gQW5kIHRoZW4sIEkgc2VlIHRoYXQgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBjYWxsZWQgZnJvbSBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gU28gaWYgSSBmdXp6IHRob3NlIHRocmVlLCBpdCYjMzk7bGwgY292ZXIgdGhvc2UgY2FsbCBwYXRocy4gU2VlbXMgbGlrZSB0aGF0IHdvdWxkIHByb3ZpZGUgcHJldHR5IGNvbXByZWhlbnNpdmUgY292ZXJhZ2UuCgpOb3csIG9uZSBsYXN0IHRoaW5nOiBJcyBgcGFja2V0X3NlbmRtc2dgIHRoZSAqb25seSogZW50cnkgcG9pbnQgZm9yIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2A/IEhtbW0uLi4gaXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBhbHNvIGNhbGxlZCBmcm9tIGBwYWNrZXRfcmN2X3Nwa3RgPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gTm9wZSwgbG9va3MgbGlrZSBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGlzICpub3QqIGNhbGxlZCBmcm9tIGBwYWNrZXRfcmN2X3Nwa3RgLiBHb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBPa2F5LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcgSSB3YXMgbG9va2luZyBmb3IuIE5vdywgSSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZW5kIHBhdGhzIHRvIHRhcmdldCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3BhcnNlX2hlYWRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4Njk9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzQtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzU6c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNi17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTY2PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDc4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMDc5Olx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA4MC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1ODg9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjYyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjYzOlx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY2NC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjQ9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwOTAtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwOTE6XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDkyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDczMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkxBTiBUYWdnaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgc2VuZCBwYXRocyBhcmUgdGhlIGtleS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGNvbWluZyBmcm9tIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgLCBhbmQgYHBhY2tldF9zbmRgLiBBbGwgc2VuZCBwYXRocywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIFRoYXQgbmFycm93cyBpdCBkb3duIHRvIGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuCgpUaGUgcGF0Y2ggaXMgYWJvdXQgaG93IFZMQU4gdGFnZ2VkIHBhY2tldHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiwgc3BlY2lmaWNhbGx5IGZvciBUQVAgZGV2aWNlcyBhbmQgQUZfUEFDS0VUIHNvY2tldHMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IG1vZGlmeWluZyBgc2tiLSZndDtwcm90b2NvbGAgdG8gcmVmbGVjdCB0aGUgaW5uZXIgcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHdoaWNoIG1lYW5zIGl0IG5lZWRzIHRvIGJlIGZ1enogdGVzdGVkIHRob3JvdWdobHkuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdpdGggY3JhZnRlZCBWTEFOIHBhY2tldHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlncy4gSSYjMzk7dmUgZ290IGBQQUNLRVRgLCBgTUFDVlRBUGAsIGBNQUNWTEFOYCwgYFRBUGAsIGFuZCBgVkxBTl84MDIxUWAuIEkga25vdyBgQ09ORklHX1RBUGAsIGBDT05GSUdfTUFDVlRBUGAsIGBDT05GSUdfUEFDS0VUYCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAgYWxsIGV4aXN0LCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uSSBhbHNvIHNlZSBgdGFwX2dldF91c2VyX3hkcGAgYmVpbmcgY2FsbGVkIGZyb20gYHRhcF9zZW5kbXNnYCB3aGVuIFhEUCBpcyB1c2VkLiBEb2VzIHRoaXMgcGF0Y2ggaW50ZXJhY3Qgd2l0aCBYRFAgaW4gYW55IHNwZWNpZmljIHdheT8gSSBuZWVkIHRvIGNoZWNrIGB0YXBfc2VuZG1zZ2AgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBYRFAgbm93LiBUaGF0IG1pZ2h0IGFmZmVjdCB0aGUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwX2dldF91c2VyX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz0xMDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhcF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDQtXG5kcml2ZXJzL25ldC90YXAuYzoxMDQ1OnN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTExMTg9c3RhdGljIGludCB0YXBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTExMjktXHRcdFx0eGRwID0gXHUwMDI2KChzdHJ1Y3QgeGRwX2J1ZmYgKiljdGwtXHUwMDNlcHRyKVtpXTtcbmRyaXZlcnMvbmV0L3RhcC5jOjExMzA6XHRcdFx0dGFwX2dldF91c2VyX3hkcChxLCB4ZHApO1xuZHJpdmVycy9uZXQvdGFwLmMtMTEzMS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKlhEUCBhbmQgVGFwIERyaXZlciBRdWlya3MqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcmVsYXRlZCB0byBYRFAgc3VwcG9ydCBpbiB0aGUgYHRhcGAgZHJpdmVyLiBJIGtub3cgWERQIGZ1bmN0aW9uYWxpdHkgaXMgZ2VuZXJhbGx5IGFjY2Vzc2libGUgaWYgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0LCBJJiMzOTttIGEgYml0IHB1enpsZWQgdGhhdCBgdGFwX2dldF91c2VyX3hkcGAgZG9lc24mIzM5O3QgKmFwcGVhciogdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGF0IGZlYXR1cmUgZmxhZy4gVGhhdCBzdHJpa2VzIG1lIGFzIGEgcG90ZW50aWFsIG92ZXJzaWdodCwgb3IgbWF5YmUgYSBkZXNpZ24gY2hvaWNlIEkgaGF2ZW4mIzM5O3QgZnVsbHkgZ3Jhc3BlZCB5ZXQuCgpUbyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBteSBzdXNwaWNpb24uIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBkcml2ZXJzL25ldC90YXAuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBgdGFwX2dldF91c2VyX3hkcGAgZnVuY3Rpb24gYW5kIGl0cyBzdXJyb3VuZGluZyBjb2RlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhbnN3ZXIgaXMgZ29pbmcgdG8gbGllOiB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgaW1wbGljaXQgZGVwZW5kZW5jeSwgc29tZSBvdGhlciBidWlsZCBvcHRpb24gYXQgcGxheSwgb3IgaWYgdGhlcmUmIzM5O3MgaW5kZWVkIGEgcG90ZW50aWFsIGlzc3VlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHRcdC5wb2xsXHRcdD0gdGFwX3BvbGwsXG4xMDQxOlx0XHQudW5sb2NrZWRfaW9jdGxcdD0gdGFwX2lvY3RsLFxuMTA0MjpcdFx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuMTA0MzpcdH07XG4xMDQ0Olx0XG4xMDQ1Olx0c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuMTA0NjpcdHtcbjEwNDc6XHRcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqZ3NvID0geGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydDtcbjEwNDg6XHRcdGludCBidWZsZW4gPSB4ZHAtXHUwMDNlZnJhbWVfc3o7XG4xMDQ5Olx0XHRpbnQgdm5ldF9oZHJfbGVuID0gMDtcbjEwNTA6XHRcdHN0cnVjdCB0YXBfZGV2ICp0YXA7XG4xMDUxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTA1MjpcdFx0aW50IGVyciwgZGVwdGg7XG4xMDUzOlx0XG4xMDU0Olx0XHRpZiAodW5saWtlbHkoeGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGEgXHUwMDNjIEVUSF9ITEVOKSkge1xuMTA1NTpcdFx0XHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZSh4ZHAtXHUwMDNlZGF0YSkpO1xuMTA1NjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTA1NzpcdFx0XHRnb3RvIGVycjtcbjEwNTg6XHRcdH1cbjEwNTk6XHRcbjEwNjA6XHRcdGlmIChxLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVk5FVF9IRFIpXG4xMDYxOlx0XHRcdHZuZXRfaGRyX2xlbiA9IFJFQURfT05DRShxLVx1MDAzZXZuZXRfaGRyX3N6KTtcbjEwNjI6XHRcbjEwNjM6XHRcdHNrYiA9IGJ1aWxkX3NrYih4ZHAtXHUwMDNlZGF0YV9oYXJkX3N0YXJ0LCBidWZsZW4pO1xuMTA2NDpcdFx0aWYgKCFza2IpIHtcbjEwNjU6XHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoeGRwLVx1MDAzZWRhdGEpKTtcbjEwNjY6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjEwNjc6XHRcdFx0Z290byBlcnI7XG4xMDY4Olx0XHR9XG4xMDY5Olx0XG4xMDcwOlx0XHRza2JfcmVzZXJ2ZShza2IsIHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydCk7XG4xMDcxOlx0XHRza2JfcHV0KHNrYiwgeGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGEpO1xuMTA3MjpcdFxuMTA3MzpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIEVUSF9ITEVOKTtcbjEwNzQ6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xMDc1Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfaGRyKHNrYiktXHUwMDNlaF9wcm90bztcbjEwNzY6XHRcbjEwNzc6XHRcdGlmICh2bmV0X2hkcl9sZW4pIHtcbjEwNzg6XHRcdFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVx1MDAzZWZsYWdzLCBza2IsIGdzbyk7XG4xMDc5Olx0XHRcdGlmIChlcnIpXG4xMDgwOlx0XHRcdFx0Z290byBlcnJfa2ZyZWU7XG4xMDgxOlx0XHR9XG4xMDgyOlx0XG4xMDgzOlx0XHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xuMTA4NDpcdFx0aWYgKGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKSkge1xuMTA4NTpcdFx0XHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsXG4xMDg2Olx0XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZkZXB0aCk7XG4xMDg3Olx0XG4xMDg4Olx0XHRcdGlmIChwcm90byAhPSAwKSB7XG4xMDg5Olx0XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NTYKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIFBhY2tldCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSAqYWx3YXlzKiBnZXRzIGNvbXBpbGVkIGluLiBMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHJhbmdlIG9mIG5ldHdvcmsgaW50ZXJmYWNlczogYFBBQ0tFVGAsIGBNQUNWVEFQYCwgYE1BQ1ZMQU5gLCBgVEFQYCwgYW5kIGBWTEFOXzgwMjFRYC4gVGhlc2UgYXJlIHRoZSBrZXkgY29udGV4dHMuCgpNeSBmb2N1cyBpcyBvbiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHRyYW5zbWl0IHBhdGhzIGZvciBgVEFQYCBkZXZpY2VzIGFuZCBgQUZfUEFDS0VUYCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIFZMQU4gdGFnZ2VkIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdXBkYXRpbmcgYHNrYi0mZ3Q7cHJvdG9jb2xgIHRvIHJlZmxlY3QgdGhlICppbm5lciogcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzIGhlcmU6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgYWN0dWFsIHNlbmRpbmcgb2YgcGFja2V0cyBoYXBwZW5zLCBhbmQsIGdpdmVuIHRoZSBwYXRjaCYjMzk7cyBzY29wZSwgdGhleSYjMzk7cmUgdGhlIHByaW1lIHN1c3BlY3RzIGZvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2UgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJlaGF2aW9yIG1ha2VzIG1lIHdhbnQgdG8gZnV6eiB0aGVzZS4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IGRpbGlnZW50OyB0aGVyZSBjb3VsZCBiZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuCgpSaWdodCwgSSYjMzk7bSBnb2luZyB0byBzZXQgc29tZSByZXN1bHRzLCBsZXQmIzM5O3MgY2FsbCBpdC4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUNLRVQmIzM0OywKICAgICYjMzQ7TUFDVlRBUCYjMzQ7LAogICAgJiMzNDtNQUNWTEFOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDt0YXBfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXHUwMDNlcHJvdG9jb2wgdG8gdGhlIGlubmVyIHByb3RvY29sIHdoZW4gYSBWTEFOIHRhZyBpcyBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDssCiAgICAmIzM0O01BQ1ZUQVAmIzM0OywKICAgICYjMzQ7TUFDVkxBTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dGFwX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZMQU4gdGFnZ2VkIHBhY2tldHMgaW4gdGhlIHRyYW5zbWl0IHBhdGhzIG9mIFRBUCBkZXZpY2VzIGFuZCBBRl9QQUNLRVQgc29ja2V0cy4gSXQgdXBkYXRlcyB0aGUgc2tiLVx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MjoxNi4zMTI2MTg0NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMTQwMzc4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJNQUNWTEFOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwidGFwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXFx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MTYuMzEyNjI2NjU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk0NzE4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNGY0ZWYxNDkwMDBhMzU5NjI3MjA4OWVjMjUxY2M4NDI4OGNkZWY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTE6NDI6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwLmMgYi9kcml2ZXJzL25ldC90YXAuY1xcbmluZGV4IGZhZTExNTkxNWM4ZWYuLmFmY2M0OTE5YmQwNDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdGFwLmNcXG4rKysgYi9kcml2ZXJzL25ldC90YXAuY1xcbkBAIC0xMDgxLDkgKzEwODEsMTUgQEAgc3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbi1cXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVxcdTAwM2Vwcm90b2NvbCwgXFx1MDAyNmRlcHRoKSAhPSAwKVxcbi1cXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbitcXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSkge1xcbitcXHRcXHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGVwdGgpO1xcbitcXG4rXFx0XFx0aWYgKHByb3RvICE9IDApIHtcXG4rXFx0XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0dGFwID0gcmN1X2RlcmVmZXJlbmNlKHEtXFx1MDAzZXRhcCk7XFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuaW5kZXggMGUxMzU1YmU4OWY2NC4uYTYyZDQ0NTA0N2MwZSAxMDA2NDRcXG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbkBAIC0xOTQ1LDkgKzE5NDUsMTUgQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFxuIFxcdC8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovXFxuIFxcdGlmIChsaWtlbHkoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVxcdTAwM2Vwcm90b2NvbCwgXFx1MDAyNmRlcHRoKSAhPSAwKVxcbi1cXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbitcXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSkge1xcbitcXHRcXHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGVwdGgpO1xcbitcXG4rXFx0XFx0aWYgKHByb3RvICE9IDApIHtcXG4rXFx0XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MTYuODEzMDQzOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTc3MTM2MDM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJNQUNWTEFOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwidGFwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXFx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzRmNGVmMTQ5MDAwYTM1OTYyNzIwODllYzI1MWNjODQyODhjZGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTE6NDI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YXAuYyBiL2RyaXZlcnMvbmV0L3RhcC5jXG5pbmRleCBmYWUxMTU5MTVjOGVmLi5hZmNjNDkxOWJkMDQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdGFwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3RhcC5jXG5AQCAtMTA4MSw5ICsxMDgxLDE1IEBAIHN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdH1cbiBcbiBcdC8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovXG4tXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4tXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4rXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4rXHRcdF9fYmUxNiBwcm90byA9IHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCxcbitcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmRlcHRoKTtcbitcbitcdFx0aWYgKHByb3RvICE9IDApIHtcbitcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuK1x0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0YXAgPSByY3VfZGVyZWZlcmVuY2UocS1cdTAwM2V0YXApO1xuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAwZTEzNTViZTg5ZjY0Li5hNjJkNDQ1MDQ3YzBlIDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5NDUsOSArMTk0NSwxNSBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbiBcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXHUwMDI2XHUwMDI2XG4tXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4tXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4rXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4rXHRcdF9fYmUxNiBwcm90byA9IHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCxcbitcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmRlcHRoKTtcbitcbitcdFx0aWYgKHByb3RvICE9IDApIHtcbitcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuK1x0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjE2LjgxMzA0NjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg3OTc4NDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBUQVAgYW5kIEFGX1BBQ0tFVCBWTEFOIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3RhcC5jYCBhbmQgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBJbnRlcmVzdGluZywgaXQncyB0b3VjaGluZyBib3RoIFRBUCBhbmQgQUZfUEFDS0VULCBzbyBpdCdzIHByb2JhYmx5IGFpbWVkIGF0IGEgYnJvYWRlciB1c2UgY2FzZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHRhcF9nZXRfdXNlcl94ZHBgIGFuZCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIHJlbGF0ZWQgdG8gaG93IFZMQU4tdGFnZ2VkIHBhY2tldHMgYXJlIHByb2Nlc3NlZC5cblxuSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHVwZGF0ZXMgYHNrYi1cdTAwM2Vwcm90b2NvbGAgdG8gdGhlIGlubmVyIHByb3RvY29sIGFmdGVyIGEgY2FsbCB0byBgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoYC4gU28sIGl0J3MgYWJvdXQgY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2wgd2l0aGluIGEgVkxBTiB0YWcuIFRoYXQncyBhIGdvb2QgYXBwcm9hY2g7IFZMQU5zIGNhbiBuZXN0LCBzbyBnZXR0aW5nIHRoZSAqcmlnaHQqIHByb3RvY29sIGlzIGNydWNpYWwgZm9yIGFueSBoaWdoZXItbGV2ZWwgcHJvY2Vzc2luZy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgaGl0LiBJIGtub3cgYHRhcF9nZXRfdXNlcl94ZHBgIGlzIGluIGBkcml2ZXJzL25ldC90YXAuY2AsIHRoYXQgb25lJ3MgZWFzeSBlbm91Z2ggdG8gZmluZC4gQW5kLCB5ZWFoLCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGlzIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgdGhhdCdzIHdoYXQgSSB3b3VsZCBleHBlY3QuIEdvb2QuXG5cblJpZ2h0LCBgdGFwX2dldF91c2VyX3hkcGAgaXMgY2xlYXJseSBjYWxsZWQgd2hlbiB5b3UncmUgc2VuZGluZyBwYWNrZXRzIHRocm91Z2ggYSBUQVAgaW50ZXJmYWNlICp3aXRoKiBYRFAgZW5hYmxlZC4gQW5kIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgZ29pbmcgdG8gYmUgdXNlZCB3aXRoIEFGX1BBQ0tFVCBzb2NrZXRzLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNoYW5nZXM7IHRoaXMgaXMgZ29pbmcgdG8gYWZmZWN0IFhEUCBzZXR1cHMgYW5kIEFGX1BBQ0tFVCBzb2NrZXQgdXNlcnMuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZXF1aXJlZCBjb25maWdzLiBGb3IgYGRyaXZlcnMvbmV0L3RhcC5jYCwgSSdtIGFzc3VtaW5nIHRoYXQgaXQgbmVlZHMgYENPTkZJR19NQUNWVEFQYCBvciBgQ09ORklHX1RVTmAgdG8gYmUgZW5hYmxlZCwgYnV0IGxldCdzIGJlIHN1cmUuIFdhaXQsIGB0YXAuY2AgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYENPTkZJR19UQVBgIG9yIGBDT05GSUdfTUFDVlRBUGAsIHNvLCBsZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBmb3IgdGhpcyBwYXRjaCB0byBldmVuIHRha2UgZWZmZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MjMuNjkyODM0Njg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzA5OTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19NQUNWTEFOKSArPSBtYWN2bGFuLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTUFDVlRBUCkgKz0gbWFjdnRhcC5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19UVU4pICs9IHR1bi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1RBUCkgKz0gdGFwLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfVkVUSCkgKz0gdmV0aC5vXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWTEFOKSArPSBpcHZsYW4ub1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JUFZUQVApICs9IGlwdnRhcC5vXFxuZHJpdmVycy9uZXQvaXB2bGFuL01ha2VmaWxlLTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jLTMtICogT3JpZ2luYWwgY29kZSBiYXNlZCBIb3N0IEFQIChzb2Z0d2FyZSB3aXJlbGVzcyBMQU4gYWNjZXNzIHBvaW50KSBkcml2ZXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jOjQ6ICogZm9yIEludGVyc2lsIFByaXNtMi8yLjUvMyAtIGhvc3RhcC5vIG1vZHVsZSwgY29tbW9uIHJvdXRpbmVzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXB3MngwMC9saWJpcHdfcnguYy01LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjIzLjk2OTk0MTM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDMwMTYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIG9yIG1vZHVsZSwgYW5kIGl0J3MgY2FsbGluZyBmb3IgYENPTkZJR19UQVBgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIGRlbHZpbmcgaW50byB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1BBQ0tFVGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBkZXBlbmRlbmN5IGNoYWluLiBHb3R0YSBlbnN1cmUgdGhvc2UgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIGFyZSBiYWtlZCBpbiBzbyBldmVyeXRoaW5nIGZ1bmN0aW9ucyBjb3JyZWN0bHkuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLCBsZXNzIEkgcHVsbCBteSBoYWlyIG91dCBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjI3LjQ3Mjk1OTg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDA2NTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9wYWNrZXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9NYWtlZmlsZS01LVxcbm5ldC9wYWNrZXQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUEFDS0VUKSArPSBhZl9wYWNrZXQub1xcbm5ldC9wYWNrZXQvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfUEFDS0VUX0RJQUcpICs9IGFmX3BhY2tldF9kaWFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MjcuNzEzMDMwNzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5ODYyMTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBhY2tldCBQYXJzaW5nIGFuZCBYRFAgVXNlciBTcGFjZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGFuZCBhbHNvIHRha2UgYSBsb29rIGF0IGB0YXBfZ2V0X3VzZXJfeGRwYC4gSSBrbm93IGJvdGggb2YgdGhlc2UgYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW4gYSBzeXN0ZW0gaW52b2x2aW5nIG5ldHdvcmsgdHJhZmZpYyBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIFhEUC4gVGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbiBmb3IgaW50ZXJwcmV0aW5nIHRoZSByYXcgZGF0YSBjb21pbmcgaW4sIG1ha2luZyBzdXJlIHdlIGhhdmUgYWxsIHRoZSBpbmZvIHdlIG5lZWQgZnJvbSB0aGUgcGFja2V0IGhlYWRlcnMgdG8gaGFuZGxlIGl0IGNvcnJlY3RseS4gVGhlbiwgdGhlIGB0YXBfZ2V0X3VzZXJfeGRwYCBmdW5jdGlvbiBtdXN0IGJlIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdGFwIGRldmljZSBhbmQgdGhlIHVzZXItc3BhY2UgWERQIHByb2dyYW0gLSBnZXR0aW5nIGl0IHRvIHRhbGsgdG8gZWFjaCBvdGhlciBpcyBwcm9iYWJseSB0aGUga2V5IHRvIG9wdGltaXppbmcgdGhlIHBhY2tldCBmbG93LCBzbywgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoYXQgcHJvY2VzcyBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhlYWRlcnMgYXJlIHBhcnNlZCBpbiByZWxhdGlvbiB0byB0aGUgWERQIHByb2dyYW0gYW5kIHRoZSB0YXAgZGV2aWNlLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNlbnRyYWwgdG8gYW55IGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbi4gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MzMuNzExNjU0NTA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ5MTg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfcGFyc2VfaGVhZGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4Njk9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzU6c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTY2PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwNzgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMDc5OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDgwLVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTg4PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjYyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY2MzpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY2NC1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2ND1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDkwLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzA5MTpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MzMuODE0MTUwOTEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzODE0OTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBBRl9QQUNLRVQgU2VuZCBQYXRocyBhbmQgWERQIEludGVncmF0aW9uKipcblxuUmlnaHQsIHNvIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gSG1tLCB0aG9zZSBhbGwgc2NyZWFtIFwiQUZfUEFDS0VUIHNlbmQgcGF0aHNcIiB0byBtZSwgb2YgY291cnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBhbmQgaG93IHRoZSBoZWFkZXIgcGFyc2luZyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHNlbmRpbmcgcGFja2V0cyB0aHJvdWdoIHRoZSBBRl9QQUNLRVQgc29ja2V0IGZhbWlseS4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpLlxuXG5JJ2QgYmV0dGVyIHRha2UgYSBsb29rIGF0IGB0YXBfZ2V0X3VzZXJfeGRwYCB0byBzZWUgaG93IFhEUCBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoaXMgZW50aXJlIGZsb3cuIFdoZXJlIGRvZXMgaXQgaW50ZWdyYXRlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBoZWFkZXIgcGFyc2luZyBpbiByZWxhdGlvbiB0byBhbnkgWERQLWJhc2VkIHByb2Nlc3Npbmcgb3IgZmlsdGVyaW5nPyBJJ20gY3VyaW91cyBpZiB0aGUgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBwcmVwYXJpbmcgcGFja2V0cyBmb3IgWERQLCBvciBob3cgaXQgYWZmZWN0cyBhbnkgWERQLWJhc2VkIHRyYWZmaWMgc3RlZXJpbmcuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IHRoZSB1c2Vyc3BhY2UgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIEFGX1BBQ0tFVCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjM3LjM1MjMwNDgyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2Njc5Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhcF9nZXRfdXNlcl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGFwX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxcbmRyaXZlcnMvbmV0L3RhcC5jOjEwNDU6c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTExOD1zdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVxcdFxcdFxcdHhkcCA9IFxcdTAwMjYoKHN0cnVjdCB4ZHBfYnVmZiAqKWN0bC1cXHUwMDNlcHRyKVtpXTtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlxcdFxcdFxcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MzcuODM4OTkwNTQ4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjA1MDM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRFAgUGFja2V0IFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHBhY2tldHMgYXJlIHNlbnQgdGhyb3VnaCB0aGUgVEFQIGRldmljZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRhcF9zZW5kbXNnYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgaGVyZSwgZ2l2ZW4gaXRzIGNhbGwgdG8gYHRhcF9nZXRfdXNlcl94ZHBgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3c6IGB0YXBfc2VuZG1zZ2AgYW5kIHRoZW4gaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGBwYWNrZXRfc25kYCwgYHRwYWNrZXRfZmlsbF9za2JgLCBhbmQgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGFwX3NlbmRtc2dgIGlzIGFjdHVhbGx5IGFuIGV4cG9ydGVkIHN5bWJvbC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUgb3IgaWYgaXQncyBzdGF0aWMsIHdoaWNoIHdvdWxkIGxpbWl0IGl0cyBzY29wZS4gS25vd2luZyBpZiBpdCdzIGV4cG9ydGVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NDIuMzk5NDk3MTM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkzNTY1NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwNDU9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtMTExNy1cXG5kcml2ZXJzL25ldC90YXAuYzoxMTE4OnN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG5kcml2ZXJzL25ldC90YXAuYy0xMTE5LVxcdFxcdCAgICAgICBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB0YXBfc29ja2V0X29wcyA9IHtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTY2OlxcdC5zZW5kbXNnID0gdGFwX3NlbmRtc2csXFxuZHJpdmVycy9uZXQvdGFwLmMtMTE2Ny1cXHQucmVjdm1zZyA9IHRhcF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0Mjo0Mi42Mjg4NjAwMjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNDU0NjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgVGFwIERldmljZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGFwX3NlbmRtc2dgIGZ1bmN0aW9uIOKAkyBpdCdzIHN0YXRpYywgd2hpY2ggdXN1YWxseSBzdWdnZXN0cyBpdCdzIHNjb3BlZCB3aXRoaW4gdGhlIGB0YXAuY2AgZmlsZS4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQncyBiZWluZyB1c2VkIGFzIGEgYHByb3RvX29wc2AgY2FsbGJhY2ssIGFuZCB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdXNpbmcgdGhlIHJpZ2h0IGZ1bmN0aW9uLlxuXG5IbW0sIHNob3VsZCBJIGJlIHVzaW5nIGB0YXBfZ2V0X3VzZXJfeGRwYCBpbnN0ZWFkPyBUaGF0J3MgYWxzbyBzdGF0aWMsIGJ1dCBpcyB0aGF0IGEgYmV0dGVyIGZpdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNpdHVhdGlvbj8gVGhpcyBkZWNpc2lvbiBuZWVkcyBjYXJlZnVsIGNvbnNpZGVyYXRpb24uXG5cbkFoLCB3YWl0LCBob2xkIG9uLi4uIGB0YXBfZ2V0X3VzZXJfeGRwYCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IG1ha2luZyB0aGUgYmVzdCBjaG9pY2UsIGlzbid0IGl0P1xuXG5SaWdodCwgc28gY2FuIEkgYWN0dWFsbHkgdXNlIGB0YXBfc2VuZG1zZ2A/IFllcywgaXQncyBhIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS5cblxuSGFuZyBvbi4uLiB0aGVyZSdzIGFsc28gYHRhcF9nZXRfdXNlcmAgaW4gYHRhcC5jYC4gU28gbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBvZiB0aGUgZnVuY3Rpb25zIGluIGB0YXAuY2AgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdG8gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njc3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NDguNDYzNDA5MjU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1MjM0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX2dldF91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NDM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGFwX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy01NzEtLyogR2V0IHBhY2tldCBmcm9tIHVzZXIgc3BhY2UgYnVmZmVyICovXFxuZHJpdmVycy9uZXQvdGFwLmM6NTcyOnN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcXG5kcml2ZXJzL25ldC90YXAuYy01NzMtXFx0XFx0XFx0ICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IG5vYmxvY2spXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYz02OTE9c3RhdGljIHNzaXplX3QgdGFwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy02OTktXFxuZHJpdmVycy9uZXQvdGFwLmM6NzAwOlxcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgTlVMTCwgZnJvbSwgbm9ibG9jayk7XFxuZHJpdmVycy9uZXQvdGFwLmMtNzAxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jPTEwMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGFwX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxcbmRyaXZlcnMvbmV0L3RhcC5jOjEwNDU6c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTExOD1zdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVxcdFxcdFxcdHhkcCA9IFxcdTAwMjYoKHN0cnVjdCB4ZHBfYnVmZiAqKWN0bC1cXHUwMDNlcHRyKVtpXTtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlxcdFxcdFxcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMzQtXFxuZHJpdmVycy9uZXQvdGFwLmM6MTEzNTpcXHRyZXR1cm4gdGFwX2dldF91c2VyKHEsIGN0bCA/IGN0bC1cXHUwMDNlcHRyIDogTlVMTCwgXFx1MDAyNm0tXFx1MDAzZW1zZ19pdGVyLFxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMzYtXFx0XFx0XFx0ICAgIG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjQ4LjY3NDkzODI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQwMzI3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIENhbGwgUmVsYXRpb25zaGlwcyBpbiB0aGUgUGFja2V0IFByb2Nlc3NpbmcgUGF0aCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgY29kZSBhbmQgc2VlaW5nIGhvdyBkYXRhIGZsb3dzLiBJJ3ZlIG5vdGljZWQgdGhhdCBgdGFwX2dldF91c2VyX3hkcGAgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYHRhcF9zZW5kbXNnYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIEkgc2VlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgYmVpbmcgY2FsbGVkIGluIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gT2theSwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgYWJvdXQgdGhlc2UgcGFydHMgb2YgdGhlIGNvZGUuXG5cbk5vdyBJJ20gZm9jdXNpbmcgb24gdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIGVhY2ggb25lLiBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIGxpbWl0cyB0aGVpciB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgc291cmNlIGZpbGUuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmQuIGBwYWNrZXRfc25kYCBpcyBhbHNvIHN0YXRpYz8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSwgdGhhdCBhcmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgY2FsbGdyYXBoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjUzLjgxNTI2ODE5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTY1NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhY2tldF9zbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTI5PXN0YXRpYyB2b2lkIHRwYWNrZXRfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NDgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTQ5OnN0YXRpYyBpbnQgX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgc2l6ZV90IGxlbilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NTAte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTY0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU2NTpzdGF0aWMgaW50IHBhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqbGVuLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgaW50IHZuZXRfaGRyX3N6KVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NzpcXHRyZXQgPSBfX3BhY2tldF9zbmRfdm5ldF9wYXJzZSh2bmV0X2hkciwgKmxlbik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc4LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI2Njg9c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjczNS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3MzY6c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM3LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0OC1cXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg0OTpcXHRcXHRcXHRpZiAoX19wYWNrZXRfc25kX3ZuZXRfcGFyc2UoXFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODUwLVxcdFxcdFxcdFxcdHRwX2xlbiA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5Mzg9c3RhdGljIHN0cnVjdCBza19idWZmICpwYWNrZXRfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI5NjQ6c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NjUte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDIwLVxcdGlmICh2bmV0X2hkcl9zeikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzAyMTpcXHRcXHRlcnIgPSBwYWNrZXRfc25kX3ZuZXRfcGFyc2UobXNnLCBcXHUwMDI2bGVuLCBcXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMjItXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzEyMj1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyNy1cXHQvKiBSZWFkaW5nIHR4X3JpbmcucGdfdmVjIHdpdGhvdXQgaG9sZGluZyBwZ192ZWNfbG9jayBpcyByYWN5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEyODpcXHQgKiB0cGFja2V0X3NuZCgpIHdpbGwgcmVkbyB0aGUgY2hlY2sgc2FmZWx5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyOS1cXHQgKi9cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzAtXFx0aWYgKGRhdGFfcmFjZShwby1cXHUwMDNldHhfcmluZy5wZ192ZWMpKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzMTpcXHRcXHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzMzpcXHRyZXR1cm4gcGFja2V0X3NuZChzb2NrLCBtc2csIGxlbik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NTMuOTI1NDM3ODI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODkyMDYxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgU2VuZGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBwYWNrZXRfc2VuZG1zZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSBkYXRhIGhpdHMsIGZvciBib3RoIGBwYWNrZXRfc25kYCBhbmQgYHRwYWNrZXRfc25kYC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0J3MgYSBiaXQgb2RkLiBJIHRob3VnaHQgYHBhY2tldF9zZW5kbXNnYCB3YXMgc3RhdGljIHRvby4gVGhhdCdzIGEgcmVkIGZsYWcuIExldCBtZSBjbGFyaWZ5IC0gaXMgdGhlcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbiBpbiB0aGlzIGNoYWluPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyBwYWNrZXRzIGFyZSBhY3R1YWxseSB0cmFuc21pdHRlZC4gQmVzdCB0byBkb3VibGUtY2hlY2sgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGFib3V0IGBwYWNrZXRfc2VuZG1zZ2AuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbnRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBhbmQgY29uZmlybSBleGFjdGx5IGhvdyBpdCdzIGRlZmluZWQgYW5kIHVzZWQuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGxvd2VyLWxldmVsIHNlbmRpbmcgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NTguMjE0NjQ2NTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg4MjUxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTM1PXN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NjUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTY2OnN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTY3LVxcdFxcdFxcdCAgICAgICBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjc1OTpcXHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NjAtXFx0ICogd2UgbmVlZCB0byBjb25maXJtIGl0IHVuZGVyIHByb3RlY3Rpb24gb2YgcGdfdmVjX2xvY2suXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjQ9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjI6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTIzLXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDY2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3QgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODEtXFx0LnNodXRkb3duID1cXHRzb2NrX25vX3NodXRkb3duLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDY4MjpcXHQuc2VuZG1zZyA9XFx0cGFja2V0X3NlbmRtc2dfc3BrdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODMtXFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00Njg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDItXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cGFja2V0X2dldHNvY2tvcHQsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzAzOlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDQtXFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0Mjo1OC4zMjM0NzY3OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNzcxNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRW50cnkgUG9pbnRzIGZvciBOZXR3b3JrIERldmljZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaW5pdGlhbGx5LCB0aGV5IHNlZW0gc3RhdGljLCB3aGljaCBjb3VsZCBiZSBhbiBpc3N1ZSBpbiB0ZXJtcyBvZiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIHdhaXQsIHRoZXkncmUgYWN0dWFsbHkgYHByb3RvX29wc2AgY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5IGFyZSwgaW4gZmFjdCwgZW50cnkgcG9pbnRzLiBUaGF0J3MgZ29vZC4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBoZXJlIHNheSBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucywgaWYgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuU28sIGlmIGBwYWNrZXRfc2VuZG1zZ2AgaXMgc3RhdGljLCBjb3VsZCBpdCBiZSBpbmxpbmVkPyBObywgdGhhdCBjYW4ndCBiZSByaWdodDsgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBwYWNrZXRfb3BzLnNlbmRtc2dgLCBzbyBpdHMgYWRkcmVzcyBpcyB0YWtlbi4gVGh1cywgaXQncyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgYXQgbGVhc3Qgbm90IGNvbXBsZXRlbHkuIFN0aWxsLCBpZiBJICpjYW4qIGZpbmQgYSBub24tc3RhdGljIG9wdGlvbiwgdGhhdCdzIHRoZSBwcmVmZXJyZWQgcm91dGUuXG5cbkhtbSwgaXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQncyBhcHByb3ByaWF0ZT8gSSBrbm93IGBzb2NrX3NlbmRtc2dgIGlzIHRoZSBnZW5lcmljIG9uZSwgYnV0IHRoYXQncyBhICpob3QgcGF0aCrigJR0aGUgY29kZSBpcyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSwgc28gSSBzaG91bGQgYmUgY2FyZWZ1bCB0aGVyZS4gVGhhdCBtZWFucyBgcGFja2V0X3NlbmRtc2dgIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAgYXJlIGdvb2QgY2hvaWNlcy5cblxuTm93LCBsZXQncyBsb29rIGF0IGB0YXAuY2AuIEluIHRoaXMgY2FzZSwgYHRhcF9zZW5kbXNnYCBpcyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gQWgsIGJ1dCB3YWl0LCBgdGFwX3NlbmRtc2dgICppcyogc3RhdGljISBEYW1uLiBPa2F5LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUgaW4gdGhpcyBmaWxlPyBJIG5lZWQgdG8gY2hlY2sgYHRhcF9zZW5kbXNnYCBpbiB0aGUgYGRyaXZlcnMvbmV0L3RhcC5jYCBmaWxlIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MDQuNjUxMTk1Nzc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU3MzY3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwNDU9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtMTExNy1cXG5kcml2ZXJzL25ldC90YXAuYzoxMTE4OnN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG5kcml2ZXJzL25ldC90YXAuYy0xMTE5LVxcdFxcdCAgICAgICBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB0YXBfc29ja2V0X29wcyA9IHtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTY2OlxcdC5zZW5kbXNnID0gdGFwX3NlbmRtc2csXFxuZHJpdmVycy9uZXQvdGFwLmMtMTE2Ny1cXHQucmVjdm1zZyA9IHRhcF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MzowNC45MDY5NDkwOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MzAxOTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgdGFwX3NlbmRtc2dgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgdGFwX3NlbmRtc2dgIGlzIGluZGVlZCBhc3NpZ25lZCB0byBgdGFwX3NvY2tldF9vcHMuc2VuZG1zZ2AuIFRoaXMgbWVhbnMgaXQncyBub3QgYW4gaW5saW5lZCBmdW5jdGlvbjsgaXQgaGFzIGEgZGVkaWNhdGVkIHN5bWJvbCBhZGRyZXNzLCB3aGljaCBpcyB1c2VmdWwgZm9yIGFuYWx5c2lzLiBHb29kLiBUaGF0IGdpdmVzIG1lIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gd29yayB3aXRoOiBgdGFwX3NlbmRtc2dgIGl0c2VsZiwgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGBwYWNrZXRfc2VuZG1zZ19zcGt0YC5cblxuTm93LCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayByZWdhcmRpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX1RBUGAgaXMgZXNzZW50aWFsLCBhcyB0aGF0IGRpcmVjdGx5IGVuYWJsZXMgdGhlIGBkcml2ZXJzL25ldC90YXAuY2AgZHJpdmVyLCB3aGljaCBpcyBvdXIgdGFyZ2V0LiBTaW1pbGFybHksIGBDT05GSUdfUEFDS0VUYCBpcyBhbHNvIGEgbXVzdC1oYXZlIGJlY2F1c2UgaXQncyByZXF1aXJlZCBmb3IgdGhlIHBhY2tldCBzb2NrZXQgZnVuY3Rpb25hbGl0eSB0aGF0J3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMsIEknbGwgcXVpY2tseSBnbGFuY2Ugb3ZlciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBgQ09ORklHX1RBUGAgc2V0dGluZy4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MDkuODY5OTcxNzc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI5NTQwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zOTE9Y29uZmlnIFRVTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MTQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTU6Y29uZmlnIFRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDE2LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjEwLjA5MjkzMTQxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc3Mzk3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENPTkZJR19UQVBgLi4uIGl0J3MgYSB0cmlzdGF0ZSBvcHRpb24sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSBidWlsdC1pbiwgbW9kdWxhciwgb3Igbm90IGRlZmluZWQgYXQgYWxsLiBBbmQgaW50ZXJlc3RpbmdseSwgaXQgZG9lc24ndCBoYXZlIGl0cyBvd24gZXhwbGljaXQgcHJvbXB0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJdCdzIGVzc2VudGlhbGx5IGFuIFwiaW1wbGVtZW50YXRpb24gZGV0YWlsXCIgc28gdG8gc3BlYWsuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nICpob3cqIHRoaXMgb3B0aW9uIGdldHMgc2VsZWN0ZWQuIEZyb20gdGhlIGNvbnRleHQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQncyBwdWxsZWQgaW4gYXMgYSBkZXBlbmRlbmN5IGJ5IGJvdGggYENPTkZJR19NQUNWVEFQYCBhbmQgYENPTkZJR19JUFZUQVBgLiBTbywgaWYgZWl0aGVyIG9mIHRob3NlIG9wdGlvbnMgYXJlIGVuYWJsZWQgKGVpdGhlciBidWlsdC1pbiBvciBhcyBhIG1vZHVsZSksIHRoZSBrZXJuZWwgYnVpbGQgKmltcGxpY2l0bHkqIGJyaW5ncyBpbiBgQ09ORklHX1RBUGAuIEVzc2VudGlhbGx5LCBgVEFQYCBpcyBhIHN1cHBvcnRpbmcgc3RydWN0dXJlIGZvciB0aG9zZSB0d28gZmVhdHVyZXMuIEl0IHNlZW1zIHRoYXQgYFRBUGAgaXMgYSBsb3ctbGV2ZWwgYmFzZSBmb3IgdmlydHVhbGl6YXRpb24gbmV0d29yayBpbnRlcmZhY2VzLiBUaGlzIGV4cGxhaW5zIHdoeSB0aGVyZSdzIG5vIGRpcmVjdCBwcm9tcHQsIGl0cyBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQgXCJ1cHN0cmVhbVwiIGJ5IHRoZSBvcHRpb25zIHRoYXQgKnVzZSogaXQuIFRoaXMgaXMgZ29vZCBkZXNpZ24sIHJlZHVjaW5nIGNsdXR0ZXIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWVudS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MzoxNS4zNzAzMzIxNTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY0MzkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgVEFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODItXFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxODM6XFx0c2VsZWN0IFRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTg0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjE5LVxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjIwOlxcdHNlbGVjdCBUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyMS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjE1LjU3MDk4MTcxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5NDY1MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVuYWJsaW5nIE1BQ1ZUQVAgYW5kIEl0cyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRoZSBgQ09ORklHX1RBUGAgZnVuY3Rpb25hbGl0eSBjb21waWxlZC4gVGhlIGRvY3VtZW50YXRpb24gc3VnZ2VzdHMgdGhhdCBlbmFibGluZyBlaXRoZXIgYENPTkZJR19NQUNWVEFQYCBvciBgQ09ORklHX0lQVlRBUGAgd2lsbCBhY2hpZXZlIHRoaXMuIEkgdGhpbmsgYE1BQ1ZUQVBgIGlzIHRoZSBiZXR0ZXIgcm91dGUsIEknbGwgZ28gd2l0aCB0aGF0IGZvciBub3cuXG5cbldhaXQgYSBzZWNvbmQsIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZGVwZW5kZW5jaWVzLiBSaWdodCwgSSByZW1lbWJlciBub3csIGBNQUNWVEFQYCByZWxpZXMgb24gYm90aCBgTUFDVkxBTmAgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBJTkVUYCBzdGFjay4gSSBoYWQgZm9yZ290dGVuIHRvIGZhY3RvciB0aGF0IGluIGluaXRpYWxseS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlIGNlcnRhaW4uIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIG9yIEnigJlsbCBlbmNvdW50ZXIgYnVpbGQgaXNzdWVzLiBCZXR0ZXIgdG8gdmVyaWZ5IHRoaXMgbm93IHRoYW4gdG8gd2FzdGUgdGltZSBkZWJ1Z2dpbmcgbGF0ZXIuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgYE1BQ1ZUQVBgIGRlcGVuZGVuY2llcyBleHBsaWNpdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjE4Ljg0MDQ0OTY1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMzY3Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNWVEFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTE2NT1jb25maWcgTUFDVkxBTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNzgtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxNzk6Y29uZmlnIE1BQ1ZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cXHR0cmlzdGF0ZSBcXFwiTUFDLVZMQU4gYmFzZWQgdGFwIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MTkuMDQxODIzMTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2OTkyNzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb246IGBNQUNWVEFQYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gYW55dGhpbmcgaW52b2x2aW5nIGBNQUNWVEFQYCwgaXQncyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgYXJlIGluIHBsYWNlLiBJIGNhbid0IGJ1aWxkIGEgcm9idXN0IHNvbHV0aW9uIG9uIGEgc2hha3kgZm91bmRhdGlvbiwgYW5kIGBNQUNWVEFQYCBpcywgaW4gbXkgZXhwZXJpZW5jZSwgb25lIG9mIHRob3NlIHRoaW5ncyB0aGF0IGNhbiBzb21ldGltZXMgc2lsZW50bHkgdHJpcCB5b3UgdXAgaWYgaXRzIHByZXJlcXVpc2l0ZXMgYXJlbid0IG1ldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgZXZlcnl0aGluZyB3aGljaCBzdXBwb3J0cyB0aGlzLiBJIG5lZWQgdG8ga25vdyB3aGF0IGtlcm5lbCBtb2R1bGVzIGFyZSByZXF1aXJlZCwgd2hhdCB1c2VyLXNwYWNlIHV0aWxpdGllcyBhcmUgZGVwZW5kZWQgdXBvbiwgYW5kIGlkZWFsbHksIEkgc2hvdWxkIGtub3cgd2hpY2ggdmVyc2lvbnMgYXJlIGtub3duIHRvIHBsYXkgbmljZWx5IHRvZ2V0aGVyLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYXZvaWRpbmcgY29tcGlsZSBlcnJvcnM7IGl0J3MgYWJvdXQgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3VlcywgYW5kIGVuc3VyaW5nIEkgZG9uJ3Qgd2FzdGUgdGltZSB0cm91Ymxlc2hvb3RpbmcgcHJvYmxlbXMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gYXZvaWRlZCB3aXRoIGEgYml0IG9mIHVwZnJvbnQgZHVlIGRpbGlnZW5jZS4gQSBxdWljayBkZXBlbmRlbmN5IGFzc2Vzc21lbnQgaXMgYWx3YXlzIHdvcnRoIHRoZSBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MjIuODExNzUzNzUzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjYxODc2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qTUFDVkxBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0xNzk9Y29uZmlnIE1BQ1ZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cXHR0cmlzdGF0ZSBcXFwiTUFDLVZMQU4gYmFzZWQgdGFwIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIE1BQ1ZMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4Mi1cXHRkZXBlbmRzIG9uIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MjMuMDc3OTQ3NjE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTk0NzIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnM6XG5cbioqQnVpbGRpbmcgdGhlIFZpcnR1YWwgTmV0d29yayoqXG5cbkFscmlnaHQsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBuZXR3b3JrIHNldHVwLiBJdCBsb29rcyBsaWtlIEknbSBkZWFsaW5nIHdpdGggYE1BQ1ZUQVBgIGFuZCB0aGF0LCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBgTUFDVkxBTmAgYW5kIGBJTkVUYCB0byBnZXQgaXRzIGpvYiBkb25lLiBTbywgdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBicmluZyBpbiBgTUFDVkxBTmAgYW5kIHRoZW4gYE1BQ1ZUQVBgIGl0c2VsZi4gQW5kLCBmb3IgZ29vZCBtZWFzdXJlLCBJJ2xsIGFkZCBgUEFDS0VUYCB0byB0aGUgbGlzdC4gTm93LCBgUEFDS0VUYCB1c3VhbGx5IGRvZXNuJ3QgbmVlZCB0byBiZSBlbmFibGVkIGV4cGxpY2l0bHksIGl0J3MgdHlwaWNhbGx5IGJha2VkIGluIGJ5IGRlZmF1bHQsIGJ1dCBJJ20gYSBzdGlja2xlciBmb3IgZG91YmxlLWNoZWNraW5nIHRoZXNlIHRoaW5ncy4gSXQncyBhbHdheXMgYmVzdCB0byB2ZXJpZnkgdGhlIG9idmlvdXMgYW5kIGF2b2lkIGFueSB1bmV4cGVjdGVkIGdvdGNoYXMgZG93biB0aGUgbGluZS4gVGhhdCdzIHRoZSBwbGFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjI2Ljc3NzQyMzQzMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NDcwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBQ0tFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L0tjb25maWctNS1cXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXFxubmV0L3BhY2tldC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBzb2NrZXRcXFwiXFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWctMTgtXFxubmV0L3BhY2tldC9LY29uZmlnOjE5OmNvbmZpZyBQQUNLRVRfRElBR1xcbm5ldC9wYWNrZXQvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MzoyNi44MzIxNzU1NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1Mzg2MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBwb3RlbnRpYWwgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlIGZ1bGwgc2NvcGUgb2YgaXRzIGltcGFjdC4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpdCBsb29rcyBsaWtlIHdlIG5lZWQgdG8gYWRkIGBQQUNLRVRgIGFzIGEgdHJpc3RhdGUuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBsZXQncyBtYWtlIGEgbm90ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgVFVOYCBpcyBhbHNvIGFmZmVjdGVkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHRhcC5jYCwgYW5kIHRoYXQncyB1c2VkIGJ5IGBNQUNWVEFQYCBhbmQgYElQVlRBUGAuIEhvd2V2ZXIsIGBUVU5gIGxpdmVzIGluIGl0cyBvd24gYHR1bi5jYCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBpbmRlcGVuZGVudCwgbWVhbmluZyB3ZSdyZSBsaWtlbHkgZ29vZCBvbiB0aGF0IGZyb250IGFuZCBubyBmdXJ0aGVyIGFjdGlvbiBpcyByZXF1aXJlZCB0aGVyZS4gYE1BQ1ZUQVBgIGFuZCBgTUFDVkxBTmAgc2VlbSB1bmFmZmVjdGVkLlxuXG5GaW5hbGx5LCBzaW5jZSB0aGUgcGF0Y2ggdG91Y2hlcyBWTEFOIGhhbmRsaW5nLCBJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSBuZWVkIHRvIGFkanVzdCBhbnl0aGluZyByZWxhdGluZyB0byBgVkxBTl84MDIxUWAuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGdpdmVuIHRoZSBjaGFuZ2VzIHRvIHRoYXQgYXJlYS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBhZGRyZXNzZWQgaW4gdGhlIHVwZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MzMuMjg2MDQyNjM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA5MTAxNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvS2NvbmZpZy01LVxcbm5ldC84MDIxcS9LY29uZmlnOjY6Y29uZmlnIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0yMS1cXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXFxubmV0LzgwMjFxL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MzMuNTE2OTU3NjcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjUxMDEyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTEFOIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHVzaW5nIGBldGhfdHlwZV92bGFuYCBhbmQgYHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aGAuIFRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXkncmUgZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGVpdGhlciBvZiB0aGVzZSBkZXBlbmQgb24gdGhlIGBWTEFOXzgwMjFRYCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbi4gSWYgdGhleSBkbywgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB3aGF0ZXZlciBjaGFuZ2UgaXMgaW4gdGhpcyBwYXRjaCB3aXRoIHJlc3BlY3QgdG8gdGhhdCBkZXBlbmRlbmN5LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIDgwMi4xUSBzdGFuZGFyZC4gSXQgaXMgZXNzZW50aWFsIEkgdW5kZXJzdGFuZCBhbnkgaW1wbGljYXRpb25zIGZvciBzdGFuZGFyZCBWTEFOIHRhZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6NDAuNjgyMDYyOTA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUyNTAwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTY1OD1zdGF0aWMgaW5saW5lIF9fYmUxNiB2bGFuX2dldF9wcm90b2NvbChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNjYzLS8qIFRoaXMgdmVyc2lvbiBvZiBfX3ZsYW5fZ2V0X3Byb3RvY29sKCkgYWxzbyBwdWxscyBtYWMgaGVhZGVyIGluIHNrYi1cXHUwMDNlaGVhZCAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjY2NDpzdGF0aWMgaW5saW5lIF9fYmUxNiB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC02NjUtXFx0XFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB0eXBlLCBpbnQgKmRlcHRoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0Mzo0MS4wNzczMjQ0MzdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NTYzNzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgUGFja2V0IFRyYW5zbWlzc2lvbiBGb2N1cyoqXG5cbk9rYXksIHNvIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5saW5lLCB3aGljaCBtZWFucyB0aGV5ICpzaG91bGRuJ3QqIGRlcGVuZCBvbiBgVkxBTl84MDIxUWAgYmVpbmcgY29tcGlsZWQuIEhvd2V2ZXIsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaWYgSSB3YW50IHRvIHRlc3QgVkxBTi10YWdnZWQgcGFja2V0IGZ1bmN0aW9uYWxpdHksIEknbSBnb2luZyB0byB3YW50IHRoYXQgZmxhZyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gTGV0J3MgaW5jbHVkZSBpdC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBwYWNrZXQgdHJhbnNtaXNzaW9uOiBgdGFwX3NlbmRtc2dgLCBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdHBhY2tldF9zbmRgLlxuXG5XYWl0IGEgbWludXRlLCBpc24ndCBgdHBhY2tldF9zbmRgIGEgKnN0YXRpYyogZnVuY3Rpb24/IEJ1dCBJJ20gc2VlaW5nIGl0IGNhbGxlZCBmcm9tIGBwYWNrZXRfc2VuZG1zZ2AgYW5kLi4ub2gsIG5vLCBJIHRoaW5rIEkgd2FzIGdldHRpbmcgbWl4ZWQgdXAuIFJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tICpvbmx5KiBgcGFja2V0X3NlbmRtc2dgLiBUaGVuLi4uIGB0cGFja2V0X2ZpbGxfc2tiYC4uLiBpc24ndCB0aGF0IGZvciByZWNlcHRpb24sIG5vdCB0cmFuc21pc3Npb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6NDUuOTIyOTY1NDU3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MzIzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHBhY2tldF9maWxsX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1NjU9c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4Ny1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODg6c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTg5LVxcdFxcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODY4LVxcdFxcdH1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4Njk6XFx0XFx0dHBfbGVuID0gdHBhY2tldF9maWxsX3NrYihwbywgc2tiLCBwaCwgZGV2LCBkYXRhLCB0cF9sZW4sIHByb3RvLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg3MC1cXHRcXHRcXHRcXHRcXHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIFxcdTAwMjZzb2NrYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjQ2LjAzMTYwMzk2M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjE4NDk3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBhY2tldCBTb2NrZXQgU2VuZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYHRwYWNrZXRfZmlsbF9za2JgIGdldHMgY2FsbGVkIGJ5IGB0cGFja2V0X3NuZGAsIHdoaWNoIHRlbGxzIG1lIHRoYXQgYHRwYWNrZXRfc25kYCBpcyB0aGUgcHJpbWFyeSBzZW5kIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgcGFja2V0IHNvY2tldHMgdXRpbGl6aW5nIHJpbmcgYnVmZmVycy4gVGhlbiB0aGVyZSdzIGBwYWNrZXRfc25kYCB3aGljaCBsb29rcyB0byBiZSB0aGUgbWFpbiBvbmUgZm9yIHJlZ3VsYXIgcGFja2V0IHNvY2tldHMuIEkgc2VlIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCB0aGVyZSB0b28sIHdoaWNoIGlzIGZvciB0aGUsIG5vdyBvYnNvbGV0ZSwgYFNPQ0tfUEFDS0VUYCBmdW5jdGlvbmFsaXR5LCBhbmQgd2UndmUgZ290IGB0YXBfc2VuZG1zZ2AgZm9yIFRBUCBkZXZpY2VzLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGBwYWNrZXRfc25kYCBzdGF0aWM/IFllcCwgaXQgaXMuIEJ1dCwgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgcGFja2V0X3NlbmRtc2dgLiBBaCwgcmlnaHQsIGBwYWNrZXRfc2VuZG1zZ2AgZ2V0cyBhc3NpZ25lZCB0byBgcGFja2V0X29wcy5zZW5kbXNnYC4gT2theSwgc28gYHBhY2tldF9zZW5kbXNnYCBpcyB0aGUgcmVhbCBlbnRyeSBwb2ludC4gR290IGl0LiBTbyB0aGF0IG1lYW5zIEkgc2hvdWxkIGZvY3VzIG9uIGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuIFRob3NlIGFyZSB0aGUgb25lcyB0byB0YXJnZXQuXG5cbkp1c3Qgd2FudCB0byB2ZXJpZnkgd2hlcmUgdGhlc2UgYXJlIGxvY2F0ZWQuIGB0YXBfc2VuZG1zZ2AgaXMgaW4gYHRhcC5jYCwganVzdCBhcyBJJ2QgZXhwZWN0LiBgcGFja2V0X3NlbmRtc2dgIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAgYXJlIGJvdGggaW4gYGFmX3BhY2tldC5jYC4gUGVyZmVjdC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBpbXBvcnRhbnQgc2VuZC1yZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBrbm93IGFib3V0PyBMZXQncyBzZWUuLi4gSSBzZWUgYHRhcF9nZXRfdXNlcl94ZHBgIGlzIGNhbGxlZCBmcm9tIGB0YXBfc2VuZG1zZ2AuIE9rYXkuIEFuZCB0aGVuLCBJIHNlZSB0aGF0IGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgY2FsbGVkIGZyb20gYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9maWxsX3NrYmAsIGFuZCBgcGFja2V0X3NuZGAuIFNvIGlmIEkgZnV6eiB0aG9zZSB0aHJlZSwgaXQnbGwgY292ZXIgdGhvc2UgY2FsbCBwYXRocy4gU2VlbXMgbGlrZSB0aGF0IHdvdWxkIHByb3ZpZGUgcHJldHR5IGNvbXByZWhlbnNpdmUgY292ZXJhZ2UuXG5cbk5vdywgb25lIGxhc3QgdGhpbmc6IElzIGBwYWNrZXRfc2VuZG1zZ2AgdGhlICpvbmx5KiBlbnRyeSBwb2ludCBmb3IgYHBhY2tldF9wYXJzZV9oZWFkZXJzYD8gSG1tbS4uLiBpcyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGFsc28gY2FsbGVkIGZyb20gYHBhY2tldF9yY3Zfc3BrdGA/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBOb3BlLCBsb29rcyBsaWtlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgKm5vdCogY2FsbGVkIGZyb20gYHBhY2tldF9yY3Zfc3BrdGAuIEdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE9rYXksIHRoYXQncyBldmVyeXRoaW5nIEkgd2FzIGxvb2tpbmcgZm9yLiBOb3csIEkgaGF2ZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2VuZCBwYXRocyB0byB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzM0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjU0LjY1MDEwNTEyNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NjE5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3BhcnNlX2hlYWRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xODY5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzQtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTM1OnN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM2LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk2Nj1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDc4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjA3OTpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA4MC1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU4OD1zdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY2Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI2NjM6XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NjQtXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjQ9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5MC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwOTE6XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjU0LjczMDk3MTQxNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzIyNTY0NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIFRhZ2dpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgc2VuZCBwYXRocyBhcmUgdGhlIGtleS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGNvbWluZyBmcm9tIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgLCBhbmQgYHBhY2tldF9zbmRgLiBBbGwgc2VuZCBwYXRocywgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gVGhhdCBuYXJyb3dzIGl0IGRvd24gdG8gYHBhY2tldF9zZW5kbXNnYCwgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBhbmQgYHRhcF9zZW5kbXNnYC5cblxuVGhlIHBhdGNoIGlzIGFib3V0IGhvdyBWTEFOIHRhZ2dlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGR1cmluZyB0cmFuc21pc3Npb24sIHNwZWNpZmljYWxseSBmb3IgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCdzIGVzc2VudGlhbGx5IG1vZGlmeWluZyBgc2tiLVx1MDAzZXByb3RvY29sYCB0byByZWZsZWN0IHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgd2hpY2ggbWVhbnMgaXQgbmVlZHMgdG8gYmUgZnV6eiB0ZXN0ZWQgdGhvcm91Z2hseS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgd2l0aCBjcmFmdGVkIFZMQU4gcGFja2V0cy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIEkndmUgZ290IGBQQUNLRVRgLCBgTUFDVlRBUGAsIGBNQUNWTEFOYCwgYFRBUGAsIGFuZCBgVkxBTl84MDIxUWAuIEkga25vdyBgQ09ORklHX1RBUGAsIGBDT05GSUdfTUFDVlRBUGAsIGBDT05GSUdfUEFDS0VUYCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAgYWxsIGV4aXN0LCBzbyB0aGF0J3MgZ29vZC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLkkgYWxzbyBzZWUgYHRhcF9nZXRfdXNlcl94ZHBgIGJlaW5nIGNhbGxlZCBmcm9tIGB0YXBfc2VuZG1zZ2Agd2hlbiBYRFAgaXMgdXNlZC4gRG9lcyB0aGlzIHBhdGNoIGludGVyYWN0IHdpdGggWERQIGluIGFueSBzcGVjaWZpYyB3YXk/IEkgbmVlZCB0byBjaGVjayBgdGFwX3NlbmRtc2dgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggWERQIG5vdy4gVGhhdCBtaWdodCBhZmZlY3QgdGhlIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQ0OjA0LjQ1MzUzOTc3M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0Mzk1NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhcF9nZXRfdXNlcl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGFwX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxcbmRyaXZlcnMvbmV0L3RhcC5jOjEwNDU6c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTExOD1zdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVxcdFxcdFxcdHhkcCA9IFxcdTAwMjYoKHN0cnVjdCB4ZHBfYnVmZiAqKWN0bC1cXHUwMDNlcHRyKVtpXTtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlxcdFxcdFxcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDQ6MDQuNzA3OTUwNjU1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTcwNzQxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqWERQIGFuZCBUYXAgRHJpdmVyIFF1aXJrcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZWxhdGVkIHRvIFhEUCBzdXBwb3J0IGluIHRoZSBgdGFwYCBkcml2ZXIuIEkga25vdyBYRFAgZnVuY3Rpb25hbGl0eSBpcyBnZW5lcmFsbHkgYWNjZXNzaWJsZSBpZiBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQsIEknbSBhIGJpdCBwdXp6bGVkIHRoYXQgYHRhcF9nZXRfdXNlcl94ZHBgIGRvZXNuJ3QgKmFwcGVhciogdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGF0IGZlYXR1cmUgZmxhZy4gVGhhdCBzdHJpa2VzIG1lIGFzIGEgcG90ZW50aWFsIG92ZXJzaWdodCwgb3IgbWF5YmUgYSBkZXNpZ24gY2hvaWNlIEkgaGF2ZW4ndCBmdWxseSBncmFzcGVkIHlldC5cblxuVG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcywgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgZHJpdmVycy9uZXQvdGFwLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYHRhcF9nZXRfdXNlcl94ZHBgIGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZS4gVGhhdCdzIHdoZXJlIHRoZSBhbnN3ZXIgaXMgZ29pbmcgdG8gbGllOiB3aGV0aGVyIHRoZXJlJ3Mgc29tZSBpbXBsaWNpdCBkZXBlbmRlbmN5LCBzb21lIG90aGVyIGJ1aWxkIG9wdGlvbiBhdCBwbGF5LCBvciBpZiB0aGVyZSdzIGluZGVlZCBhIHBvdGVudGlhbCBpc3N1ZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQ0OjA5LjEyNTAyNzAwOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQwOlxcdFxcdC5wb2xsXFx0XFx0PSB0YXBfcG9sbCxcXG4xMDQxOlxcdFxcdC51bmxvY2tlZF9pb2N0bFxcdD0gdGFwX2lvY3RsLFxcbjEwNDI6XFx0XFx0LmNvbXBhdF9pb2N0bFxcdD0gY29tcGF0X3B0cl9pb2N0bCxcXG4xMDQzOlxcdH07XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdHN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4xMDQ2OlxcdHtcXG4xMDQ3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqZ3NvID0geGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQ7XFxuMTA0ODpcXHRcXHRpbnQgYnVmbGVuID0geGRwLVxcdTAwM2VmcmFtZV9zejtcXG4xMDQ5OlxcdFxcdGludCB2bmV0X2hkcl9sZW4gPSAwO1xcbjEwNTA6XFx0XFx0c3RydWN0IHRhcF9kZXYgKnRhcDtcXG4xMDUxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTA1MjpcXHRcXHRpbnQgZXJyLCBkZXB0aDtcXG4xMDUzOlxcdFxcbjEwNTQ6XFx0XFx0aWYgKHVubGlrZWx5KHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEgXFx1MDAzYyBFVEhfSExFTikpIHtcXG4xMDU1OlxcdFxcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKHhkcC1cXHUwMDNlZGF0YSkpO1xcbjEwNTY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDU3OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjEwNTg6XFx0XFx0fVxcbjEwNTk6XFx0XFxuMTA2MDpcXHRcXHRpZiAocS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVk5FVF9IRFIpXFxuMTA2MTpcXHRcXHRcXHR2bmV0X2hkcl9sZW4gPSBSRUFEX09OQ0UocS1cXHUwMDNldm5ldF9oZHJfc3opO1xcbjEwNjI6XFx0XFxuMTA2MzpcXHRcXHRza2IgPSBidWlsZF9za2IoeGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQsIGJ1Zmxlbik7XFxuMTA2NDpcXHRcXHRpZiAoIXNrYikge1xcbjEwNjU6XFx0XFx0XFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoeGRwLVxcdTAwM2VkYXRhKSk7XFxuMTA2NjpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjEwNjc6XFx0XFx0XFx0Z290byBlcnI7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgeGRwLVxcdTAwM2VkYXRhIC0geGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQpO1xcbjEwNzE6XFx0XFx0c2tiX3B1dChza2IsIHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgRVRIX0hMRU4pO1xcbjEwNzQ6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xMDc1OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG87XFxuMTA3NjpcXHRcXG4xMDc3OlxcdFxcdGlmICh2bmV0X2hkcl9sZW4pIHtcXG4xMDc4OlxcdFxcdFxcdGVyciA9IHR1bl92bmV0X2hkcl90b19za2IocS1cXHUwMDNlZmxhZ3MsIHNrYiwgZ3NvKTtcXG4xMDc5OlxcdFxcdFxcdGlmIChlcnIpXFxuMTA4MDpcXHRcXHRcXHRcXHRnb3RvIGVycl9rZnJlZTtcXG4xMDgxOlxcdFxcdH1cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cXG4xMDg0OlxcdFxcdGlmIChldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTA4NTpcXHRcXHRcXHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLFxcbjEwODY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRlcHRoKTtcXG4xMDg3OlxcdFxcbjEwODg6XFx0XFx0XFx0aWYgKHByb3RvICE9IDApIHtcXG4xMDg5OlxcdFxcdFxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQ0OjA5LjEyNTEyMDMzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYxNDcwOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIFBhY2tldCBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgY2hhbmdlICphbHdheXMqIGdldHMgY29tcGlsZWQgaW4uIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSByYW5nZSBvZiBuZXR3b3JrIGludGVyZmFjZXM6IGBQQUNLRVRgLCBgTUFDVlRBUGAsIGBNQUNWTEFOYCwgYFRBUGAsIGFuZCBgVkxBTl84MDIxUWAuIFRoZXNlIGFyZSB0aGUga2V5IGNvbnRleHRzLlxuXG5NeSBmb2N1cyBpcyBvbiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHRyYW5zbWl0IHBhdGhzIGZvciBgVEFQYCBkZXZpY2VzIGFuZCBgQUZfUEFDS0VUYCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIFZMQU4gdGFnZ2VkIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdXBkYXRpbmcgYHNrYi1cdTAwM2Vwcm90b2NvbGAgdG8gcmVmbGVjdCB0aGUgKmlubmVyKiBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzIGhlcmU6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgYWN0dWFsIHNlbmRpbmcgb2YgcGFja2V0cyBoYXBwZW5zLCBhbmQsIGdpdmVuIHRoZSBwYXRjaCdzIHNjb3BlLCB0aGV5J3JlIHRoZSBwcmltZSBzdXNwZWN0cyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBiZWhhdmlvciBtYWtlcyBtZSB3YW50IHRvIGZ1enogdGhlc2UuIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBkaWxpZ2VudDsgdGhlcmUgY291bGQgYmUgcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlbiBwcm9jZXNzaW5nIGNyYWZ0ZWQgVkxBTiBwYWNrZXRzLlxuXG5SaWdodCwgSSdtIGdvaW5nIHRvIHNldCBzb21lIHJlc3VsdHMsIGxldCdzIGNhbGwgaXQuIFRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg1NiwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0NDoxNC4zODY1OTQyNTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAwNTAwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiLFxuICAgIFwiTUFDVlRBUFwiLFxuICAgIFwiTUFDVkxBTlwiLFxuICAgIFwiVEFQXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFja2V0X3NlbmRtc2dcIixcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInRhcF9zZW5kbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZMQU4gdGFnZ2VkIHBhY2tldHMgaW4gdGhlIHRyYW5zbWl0IHBhdGhzIG9mIFRBUCBkZXZpY2VzIGFuZCBBRl9QQUNLRVQgc29ja2V0cy4gSXQgdXBkYXRlcyB0aGUgc2tiLVxcdTAwM2Vwcm90b2NvbCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJNQUNWTEFOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwidGFwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXFx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfwsst[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 11:22:45 +0000 UTC FinishedAt: 2026-08-05 11:44:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "MACVTAP", "MACVLAN", "TAP", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "MACVTAP", "MACVLAN", "TAP", "VLAN_8021Q" ], "series_id": "56f00092-824c-4022-8d10-c4fbf3cbd3cd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "packet_sendmsg", "packet_sendmsg_spkt", "tap_sendmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtNQUNWVEFQJiMzNDssCiAgICAmIzM0O01BQ1ZMQU4mIzM0OywKICAgICYjMzQ7VEFQJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWNrZXRfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc2VuZG1zZ19zcGt0JiMzNDssCiAgICAmIzM0O3RhcF9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWTEFOIHRhZ2dlZCBwYWNrZXRzIGluIHRoZSB0cmFuc21pdCBwYXRocyBvZiBUQVAgZGV2aWNlcyBhbmQgQUZfUEFDS0VUIHNvY2tldHMuIEl0IHVwZGF0ZXMgdGhlIHNrYi1cdTAwM2Vwcm90b2NvbCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgd2hlbiBwcm9jZXNzaW5nIGNyYWZ0ZWQgVkxBTiBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzRmNGVmMTQ5MDAwYTM1OTYyNzIwODllYzI1MWNjODQyODhjZGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTE6NDI6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwLmMgYi9kcml2ZXJzL25ldC90YXAuY1xuaW5kZXggZmFlMTE1OTE1YzhlZi4uYWZjYzQ5MTliZDA0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3RhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90YXAuY1xuQEAgLTEwODEsOSAmIzQzOzEwODEsMTUgQEAgc3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIFx0fVxuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbi1cdGlmIChldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sLCBcdTAwMjZkZXB0aCkgIT0gMClcbi1cdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcbiYjNDM7XHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4mIzQzO1x0XHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZGVwdGgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcm90byAhPSAwKSB7XG4mIzQzO1x0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4mIzQzO1x0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHRhcCA9IHJjdV9kZXJlZmVyZW5jZShxLVx1MDAzZXRhcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbmluZGV4IDBlMTM1NWJlODlmNjQuLmE2MmQ0NDUwNDdjMGUgMTAwNjQ0XG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5AQCAtMTk0NSw5ICYjNDM7MTk0NSwxNSBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbiBcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXHUwMDI2XHUwMDI2XG4tXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4tXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4mIzQzO1x0ICAgIGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKSkge1xuJiM0MztcdFx0X19iZTE2IHByb3RvID0gdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVx1MDAzZXByb3RvY29sLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmRlcHRoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJvdG8gIT0gMCkge1xuJiM0MztcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuJiM0MztcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDssCiAgICAmIzM0O01BQ1ZUQVAmIzM0OywKICAgICYjMzQ7TUFDVkxBTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dGFwX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZMQU4gdGFnZ2VkIHBhY2tldHMgaW4gdGhlIHRyYW5zbWl0IHBhdGhzIG9mIFRBUCBkZXZpY2VzIGFuZCBBRl9QQUNLRVQgc29ja2V0cy4gSXQgdXBkYXRlcyB0aGUgc2tiLVx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNGY0ZWYxNDkwMDBhMzU5NjI3MjA4OWVjMjUxY2M4NDI4OGNkZWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxMTo0MjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RhcC5jIGIvZHJpdmVycy9uZXQvdGFwLmMKaW5kZXggZmFlMTE1OTE1YzhlZi4uYWZjYzQ5MTliZDA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdGFwLmMKQEAgLTEwODEsOSAmIzQzOzEwODEsMTUgQEAgc3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCX0KIAogCS8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovCi0JaWYgKGV0aF90eXBlX3ZsYW4oc2tiLSZndDtwcm90b2NvbCkgJmFtcDsmYW1wOwotCSAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItJmd0O3Byb3RvY29sLCAmYW1wO2RlcHRoKSAhPSAwKQotCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpOwomIzQzOwlpZiAoZXRoX3R5cGVfdmxhbihza2ItJmd0O3Byb3RvY29sKSkgewomIzQzOwkJX19iZTE2IHByb3RvID0gdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLSZndDtwcm90b2NvbCwKJiM0MzsJCQkJCQkJICAgJmFtcDtkZXB0aCk7CiYjNDM7CiYjNDM7CQlpZiAocHJvdG8gIT0gMCkgewomIzQzOwkJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7CiYjNDM7CQkJc2tiLSZndDtwcm90b2NvbCA9IHByb3RvOwomIzQzOwkJfQomIzQzOwl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGFwID0gcmN1X2RlcmVmZXJlbmNlKHEtJmd0O3RhcCk7CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAwZTEzNTViZTg5ZjY0Li5hNjJkNDQ1MDQ3YzBlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTE5NDUsOSAmIzQzOzE5NDUsMTUgQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaykKIAogCS8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovCiAJaWYgKGxpa2VseShza2ItJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIpICZhbXA7JmFtcDsKLQkgICAgZXRoX3R5cGVfdmxhbihza2ItJmd0O3Byb3RvY29sKSAmYW1wOyZhbXA7Ci0JICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi0mZ3Q7cHJvdG9jb2wsICZhbXA7ZGVwdGgpICE9IDApCi0JCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7CiYjNDM7CSAgICBldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiYjNDM7CQlfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItJmd0O3Byb3RvY29sLAomIzQzOwkJCQkJCQkgICAmYW1wO2RlcHRoKTsKJiM0MzsKJiM0MzsJCWlmIChwcm90byAhPSAwKSB7CiYjNDM7CQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTsKJiM0MzsJCQlza2ItJmd0O3Byb3RvY29sID0gcHJvdG87CiYjNDM7CQl9CiYjNDM7CX0KIAogCXNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVEFQIGFuZCBBRl9QQUNLRVQgVkxBTiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC90YXAuY2AgYW5kIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gSW50ZXJlc3RpbmcsIGl0JiMzOTtzIHRvdWNoaW5nIGJvdGggVEFQIGFuZCBBRl9QQUNLRVQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFpbWVkIGF0IGEgYnJvYWRlciB1c2UgY2FzZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHRhcF9nZXRfdXNlcl94ZHBgIGFuZCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIGhvdyBWTEFOLXRhZ2dlZCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQuCgpJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgdXBkYXRlcyBgc2tiLSZndDtwcm90b2NvbGAgdG8gdGhlIGlubmVyIHByb3RvY29sIGFmdGVyIGEgY2FsbCB0byBgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoYC4gU28sIGl0JiMzOTtzIGFib3V0IGNvcnJlY3RseSBpZGVudGlmeWluZyB0aGUgZW5jYXBzdWxhdGVkIHByb3RvY29sIHdpdGhpbiBhIFZMQU4gdGFnLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaDsgVkxBTnMgY2FuIG5lc3QsIHNvIGdldHRpbmcgdGhlICpyaWdodCogcHJvdG9jb2wgaXMgY3J1Y2lhbCBmb3IgYW55IGhpZ2hlci1sZXZlbCBwcm9jZXNzaW5nLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IGhpdC4gSSBrbm93IGB0YXBfZ2V0X3VzZXJfeGRwYCBpcyBpbiBgZHJpdmVycy9uZXQvdGFwLmNgLCB0aGF0IG9uZSYjMzk7cyBlYXN5IGVub3VnaCB0byBmaW5kLiBBbmQsIHllYWgsIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCB0aGF0JiMzOTtzIHdoYXQgSSB3b3VsZCBleHBlY3QuIEdvb2QuCgpSaWdodCwgYHRhcF9nZXRfdXNlcl94ZHBgIGlzIGNsZWFybHkgY2FsbGVkIHdoZW4geW91JiMzOTtyZSBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCBhIFRBUCBpbnRlcmZhY2UgKndpdGgqIFhEUCBlbmFibGVkLiBBbmQgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBnb2luZyB0byBiZSB1c2VkIHdpdGggQUZfUEFDS0VUIHNvY2tldHMuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlczsgdGhpcyBpcyBnb2luZyB0byBhZmZlY3QgWERQIHNldHVwcyBhbmQgQUZfUEFDS0VUIHNvY2tldCB1c2Vycy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVxdWlyZWQgY29uZmlncy4gRm9yIGBkcml2ZXJzL25ldC90YXAuY2AsIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBuZWVkcyBgQ09ORklHX01BQ1ZUQVBgIG9yIGBDT05GSUdfVFVOYCB0byBiZSBlbmFibGVkLCBidXQgbGV0JiMzOTtzIGJlIHN1cmUuIFdhaXQsIGB0YXAuY2AgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYENPTkZJR19UQVBgIG9yIGBDT05GSUdfTUFDVlRBUGAsIHNvLCBsZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBmb3IgdGhpcyBwYXRjaCB0byBldmVuIHRha2UgZWZmZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX01BQ1ZMQU4pICYjNDM7PSBtYWN2bGFuLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19NQUNWVEFQKSAmIzQzOz0gbWFjdnRhcC5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfTUlJKSAmIzQzOz0gbWlpLm9cbi0tXG5kcml2ZXJzL25ldC9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfVFVOKSAmIzQzOz0gdHVuLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19UQVApICYjNDM7PSB0YXAub1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMzQtb2JqLSQoQ09ORklHX1ZFVEgpICYjNDM7PSB2ZXRoLm9cbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWTEFOKSAmIzQzOz0gaXB2bGFuLm9cbmRyaXZlcnMvbmV0L2lwdmxhbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JUFZUQVApICYjNDM7PSBpcHZ0YXAub1xuZHJpdmVycy9uZXQvaXB2bGFuL01ha2VmaWxlLTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXB3MngwMC9saWJpcHdfcnguYy0zLSAqIE9yaWdpbmFsIGNvZGUgYmFzZWQgSG9zdCBBUCAoc29mdHdhcmUgd2lyZWxlc3MgTEFOIGFjY2VzcyBwb2ludCkgZHJpdmVyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jOjQ6ICogZm9yIEludGVyc2lsIFByaXNtMi8yLjUvMyAtIGhvc3RhcC5vIG1vZHVsZSwgY29tbW9uIHJvdXRpbmVzXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jLTUtICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBvciBtb2R1bGUsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGZvciBgQ09ORklHX1RBUGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIGRlbHZpbmcgaW50byB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1BBQ0tFVGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBkZXBlbmRlbmN5IGNoYWluLiBHb3R0YSBlbnN1cmUgdGhvc2UgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIGFyZSBiYWtlZCBpbiBzbyBldmVyeXRoaW5nIGZ1bmN0aW9ucyBjb3JyZWN0bHkuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLCBsZXNzIEkgcHVsbCBteSBoYWlyIG91dCBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9wYWNrZXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9NYWtlZmlsZS01LVxubmV0L3BhY2tldC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QQUNLRVQpICYjNDM7PSBhZl9wYWNrZXQub1xubmV0L3BhY2tldC9NYWtlZmlsZS03LW9iai0kKENPTkZJR19QQUNLRVRfRElBRykgJiM0Mzs9IGFmX3BhY2tldF9kaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBhY2tldCBQYXJzaW5nIGFuZCBYRFAgVXNlciBTcGFjZSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRpdmUgaW50byBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGFuZCBhbHNvIHRha2UgYSBsb29rIGF0IGB0YXBfZ2V0X3VzZXJfeGRwYC4gSSBrbm93IGJvdGggb2YgdGhlc2UgYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW4gYSBzeXN0ZW0gaW52b2x2aW5nIG5ldHdvcmsgdHJhZmZpYyBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIFhEUC4gVGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbiBmb3IgaW50ZXJwcmV0aW5nIHRoZSByYXcgZGF0YSBjb21pbmcgaW4sIG1ha2luZyBzdXJlIHdlIGhhdmUgYWxsIHRoZSBpbmZvIHdlIG5lZWQgZnJvbSB0aGUgcGFja2V0IGhlYWRlcnMgdG8gaGFuZGxlIGl0IGNvcnJlY3RseS4gVGhlbiwgdGhlIGB0YXBfZ2V0X3VzZXJfeGRwYCBmdW5jdGlvbiBtdXN0IGJlIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdGFwIGRldmljZSBhbmQgdGhlIHVzZXItc3BhY2UgWERQIHByb2dyYW0gLSBnZXR0aW5nIGl0IHRvIHRhbGsgdG8gZWFjaCBvdGhlciBpcyBwcm9iYWJseSB0aGUga2V5IHRvIG9wdGltaXppbmcgdGhlIHBhY2tldCBmbG93LCBzbywgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoYXQgcHJvY2VzcyBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhlYWRlcnMgYXJlIHBhcnNlZCBpbiByZWxhdGlvbiB0byB0aGUgWERQIHByb2dyYW0gYW5kIHRoZSB0YXAgZGV2aWNlLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNlbnRyYWwgdG8gYW55IGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbi4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfcGFyc2VfaGVhZGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTkzNTpzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM2LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5NjY9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwNzgtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIwNzk6XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDgwLVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU4OD1zdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NjItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI2NjM6XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjY0LVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2ND1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5MC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzA5MTpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgQUZfUEFDS0VUIFNlbmQgUGF0aHMgYW5kIFhEUCBJbnRlZ3JhdGlvbioqCgpSaWdodCwgc28gYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gSG1tLCB0aG9zZSBhbGwgc2NyZWFtICYjMzQ7QUZfUEFDS0VUIHNlbmQgcGF0aHMmIzM0OyB0byBtZSwgb2YgY291cnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBhbmQgaG93IHRoZSBoZWFkZXIgcGFyc2luZyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHNlbmRpbmcgcGFja2V0cyB0aHJvdWdoIHRoZSBBRl9QQUNLRVQgc29ja2V0IGZhbWlseS4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpLgoKSSYjMzk7ZCBiZXR0ZXIgdGFrZSBhIGxvb2sgYXQgYHRhcF9nZXRfdXNlcl94ZHBgIHRvIHNlZSBob3cgWERQIGlzIGJlaW5nIGxldmVyYWdlZCB3aXRoaW4gdGhpcyBlbnRpcmUgZmxvdy4gV2hlcmUgZG9lcyBpdCBpbnRlZ3JhdGU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGhlYWRlciBwYXJzaW5nIGluIHJlbGF0aW9uIHRvIGFueSBYRFAtYmFzZWQgcHJvY2Vzc2luZyBvciBmaWx0ZXJpbmc/IEkmIzM5O20gY3VyaW91cyBpZiB0aGUgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBwcmVwYXJpbmcgcGFja2V0cyBmb3IgWERQLCBvciBob3cgaXQgYWZmZWN0cyBhbnkgWERQLWJhc2VkIHRyYWZmaWMgc3RlZXJpbmcuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IHRoZSB1c2Vyc3BhY2UgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIEFGX1BBQ0tFVCBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwX2dldF91c2VyX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz0xMDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhcF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDQtXG5kcml2ZXJzL25ldC90YXAuYzoxMDQ1OnN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTExMTg9c3RhdGljIGludCB0YXBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTExMjktXHRcdFx0eGRwID0gXHUwMDI2KChzdHJ1Y3QgeGRwX2J1ZmYgKiljdGwtXHUwMDNlcHRyKVtpXTtcbmRyaXZlcnMvbmV0L3RhcC5jOjExMzA6XHRcdFx0dGFwX2dldF91c2VyX3hkcChxLCB4ZHApO1xuZHJpdmVycy9uZXQvdGFwLmMtMTEzMS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTg2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRFAgUGFja2V0IFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcGFja2V0cyBhcmUgc2VudCB0aHJvdWdoIHRoZSBUQVAgZGV2aWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGFwX3NlbmRtc2dgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBoZXJlLCBnaXZlbiBpdHMgY2FsbCB0byBgdGFwX2dldF91c2VyX3hkcGAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdzogYHRhcF9zZW5kbXNnYCBhbmQgdGhlbiBpdHMgcmVsYXRlZCBmdW5jdGlvbnMgYHBhY2tldF9zbmRgLCBgdHBhY2tldF9maWxsX3NrYmAsIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGB0YXBfc2VuZG1zZ2AgaXMgYWN0dWFsbHkgYW4gZXhwb3J0ZWQgc3ltYm9sLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIG9yIGlmIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggd291bGQgbGltaXQgaXRzIHNjb3BlLiBLbm93aW5nIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXBfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz0xMDQ1PXN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTE3LVxuZHJpdmVycy9uZXQvdGFwLmM6MTExODpzdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG5kcml2ZXJzL25ldC90YXAuYy0xMTE5LVx0XHQgICAgICAgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHRhcF9zb2NrZXRfb3BzID0ge1xuZHJpdmVycy9uZXQvdGFwLmM6MTE2NjpcdC5zZW5kbXNnID0gdGFwX3NlbmRtc2csXG5kcml2ZXJzL25ldC90YXAuYy0xMTY3LVx0LnJlY3Ztc2cgPSB0YXBfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBUYXAgRGV2aWNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRhcF9zZW5kbXNnYCBmdW5jdGlvbiDigJMgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCB1c3VhbGx5IHN1Z2dlc3RzIGl0JiMzOTtzIHNjb3BlZCB3aXRoaW4gdGhlIGB0YXAuY2AgZmlsZS4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQmIzM5O3MgYmVpbmcgdXNlZCBhcyBhIGBwcm90b19vcHNgIGNhbGxiYWNrLCBhbmQgdGhhdCBuZWVkcyBjYXJlZnVsIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgcmlnaHQgZnVuY3Rpb24uCgpIbW0sIHNob3VsZCBJIGJlIHVzaW5nIGB0YXBfZ2V0X3VzZXJfeGRwYCBpbnN0ZWFkPyBUaGF0JiMzOTtzIGFsc28gc3RhdGljLCBidXQgaXMgdGhhdCBhIGJldHRlciBmaXQgZm9yIHRoaXMgcGFydGljdWxhciBzaXR1YXRpb24/IFRoaXMgZGVjaXNpb24gbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLgoKQWgsIHdhaXQsIGhvbGQgb24uLi4gYHRhcF9nZXRfdXNlcl94ZHBgIGlzICphbHNvKiBzdGF0aWMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgbWFraW5nIHRoZSBiZXN0IGNob2ljZSwgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHNvIGNhbiBJIGFjdHVhbGx5IHVzZSBgdGFwX3NlbmRtc2dgPyBZZXMsIGl0JiMzOTtzIGEgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4KCkhhbmcgb24uLi4gdGhlcmUmIzM5O3MgYWxzbyBgdGFwX2dldF91c2VyYCBpbiBgdGFwLmNgLiBTbyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZSBmdW5jdGlvbnMgaW4gYHRhcC5jYCBpcyB0aGUgY29ycmVjdCBmdW5jdGlvbiB0byB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NDM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGFwX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNTcxLS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xuZHJpdmVycy9uZXQvdGFwLmM6NTcyOnN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3My1cdFx0XHQgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbm9ibG9jaylcbi0tXG5kcml2ZXJzL25ldC90YXAuYz02OTE9c3RhdGljIHNzaXplX3QgdGFwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNjk5LVxuZHJpdmVycy9uZXQvdGFwLmM6NzAwOlx0cmV0dXJuIHRhcF9nZXRfdXNlcihxLCBOVUxMLCBmcm9tLCBub2Jsb2NrKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTcwMS19XG4tLVxuZHJpdmVycy9uZXQvdGFwLmM9MTAzND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxuZHJpdmVycy9uZXQvdGFwLmM6MTA0NTpzdGF0aWMgaW50IHRhcF9nZXRfdXNlcl94ZHAoc3RydWN0IHRhcF9xdWV1ZSAqcSwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ2LXtcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMTE4PXN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVx0XHRcdHhkcCA9IFx1MDAyNigoc3RydWN0IHhkcF9idWZmICopY3RsLVx1MDAzZXB0cilbaV07XG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlx0XHRcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTExMzEtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTM0LVxuZHJpdmVycy9uZXQvdGFwLmM6MTEzNTpcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgY3RsID8gY3RsLVx1MDAzZXB0ciA6IE5VTEwsIFx1MDAyNm0tXHUwMDNlbXNnX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYy0xMTM2LVx0XHRcdCAgICBtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgRnVuY3Rpb24gQ2FsbCBSZWxhdGlvbnNoaXBzIGluIHRoZSBQYWNrZXQgUHJvY2Vzc2luZyBQYXRoKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvZGUgYW5kIHNlZWluZyBob3cgZGF0YSBmbG93cy4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGB0YXBfZ2V0X3VzZXJfeGRwYCBnZXRzIGNhbGxlZCBmcm9tIHdpdGhpbiBgdGFwX3NlbmRtc2dgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIEkgc2VlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgYmVpbmcgY2FsbGVkIGluIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gT2theSwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgYWJvdXQgdGhlc2UgcGFydHMgb2YgdGhlIGNvZGUuCgpOb3cgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgZWFjaCBvbmUuIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIHZpc2liaWxpdHkgd2l0aGluIHRoZSBzb3VyY2UgZmlsZS4gV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gYHBhY2tldF9zbmRgIGlzIGFsc28gc3RhdGljPyBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlLCB0aGF0IGFyZSBjYWxsZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjYWxsZ3JhcGggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTI5PXN0YXRpYyB2b2lkIHRwYWNrZXRfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTQ4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTQ5OnN0YXRpYyBpbnQgX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU1MC17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTY0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTY1OnN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NjYtXHRcdFx0XHQgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgaW50IHZuZXRfaGRyX3N6KVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3Ni1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NzpcdHJldCA9IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHZuZXRfaGRyLCAqbGVuKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3OC1cdGlmIChyZXQpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjY4PXN0YXRpYyBpbnQgdHBhY2tldF9wYXJzZV9oZWFkZXIoc3RydWN0IHBhY2tldF9zb2NrICpwbywgdm9pZCAqZnJhbWUsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzM2OnN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM3LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NDgtXHRcdFx0bWVtY3B5KFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODQ5Olx0XHRcdGlmIChfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShcdTAwMjZ2bmV0X2hkciwgdHBfbGVuKSkge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODUwLVx0XHRcdFx0dHBfbGVuID0gLUVJTlZBTDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5Mzg9c3RhdGljIHN0cnVjdCBza19idWZmICpwYWNrZXRfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI5NjQ6c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2NS17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDIwLVx0aWYgKHZuZXRfaGRyX3N6KSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMjE6XHRcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFx1MDAyNmxlbiwgXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAyMi1cdFx0aWYgKGVycilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTMxMjI9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTI3LVx0LyogUmVhZGluZyB0eF9yaW5nLnBnX3ZlYyB3aXRob3V0IGhvbGRpbmcgcGdfdmVjX2xvY2sgaXMgcmFjeS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEyODpcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMjktXHQgKi9cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMC1cdGlmIChkYXRhX3JhY2UocG8tXHUwMDNldHhfcmluZy5wZ192ZWMpKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTMxOlx0XHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMzM6XHRyZXR1cm4gcGFja2V0X3NuZChzb2NrLCBtc2csIGxlbik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgU2VuZGluZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHBhY2tldF9zZW5kbXNnYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgdGhlIGRhdGEgaGl0cywgZm9yIGJvdGggYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgLiBXYWl0IGEgbWludXRlLi4uIHRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIHRob3VnaHQgYHBhY2tldF9zZW5kbXNnYCB3YXMgc3RhdGljIHRvby4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBMZXQgbWUgY2xhcmlmeSAtIGlzIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gaW4gdGhpcyBjaGFpbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgcGFja2V0cyBhcmUgYWN0dWFsbHkgdHJhbnNtaXR0ZWQuIEJlc3QgdG8gZG91YmxlLWNoZWNrIG15IGluaXRpYWwgYXNzdW1wdGlvbiBhYm91dCBgcGFja2V0X3NlbmRtc2dgLiBUaW1lIHRvIGdvIGRpZ2dpbmcgaW50byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgYW5kIGNvbmZpcm0gZXhhY3RseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZC4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGxvd2VyLWxldmVsIHNlbmRpbmcgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkzNT1zdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk2NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTk2NjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTY3LVx0XHRcdCAgICAgICBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjczNj1zdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NTgtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NTk6XHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc2MC1cdCAqIHdlIG5lZWQgdG8gY29uZmlybSBpdCB1bmRlciBwcm90ZWN0aW9uIG9mIHBnX3ZlY19sb2NrLlxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2ND1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEyMjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMy17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODEtXHQuc2h1dGRvd24gPVx0c29ja19ub19zaHV0ZG93bixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDY4MjpcdC5zZW5kbXNnID1cdHBhY2tldF9zZW5kbXNnX3Nwa3QsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODMtXHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ2ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDItXHQuZ2V0c29ja29wdF9pdGVyID1cdHBhY2tldF9nZXRzb2Nrb3B0LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzAzOlx0LnNlbmRtc2cgPVx0cGFja2V0X3NlbmRtc2csXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDQtXHQucmVjdm1zZyA9XHRwYWNrZXRfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRW50cnkgUG9pbnRzIGZvciBOZXR3b3JrIERldmljZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpbml0aWFsbHksIHRoZXkgc2VlbSBzdGF0aWMsIHdoaWNoIGNvdWxkIGJlIGFuIGlzc3VlIGluIHRlcm1zIG9mIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdCwgdGhleSYjMzk7cmUgYWN0dWFsbHkgYHByb3RvX29wc2AgY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5IGFyZSwgaW4gZmFjdCwgZW50cnkgcG9pbnRzLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgdGhlIGluc3RydWN0aW9ucyBJIGhhdmUgaGVyZSBzYXkgSSBzaG91bGQgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMsIGlmIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKU28sIGlmIGBwYWNrZXRfc2VuZG1zZ2AgaXMgc3RhdGljLCBjb3VsZCBpdCBiZSBpbmxpbmVkPyBObywgdGhhdCBjYW4mIzM5O3QgYmUgcmlnaHQ7IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYHBhY2tldF9vcHMuc2VuZG1zZ2AsIHNvIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaHVzLCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgYXQgbGVhc3Qgbm90IGNvbXBsZXRlbHkuIFN0aWxsLCBpZiBJICpjYW4qIGZpbmQgYSBub24tc3RhdGljIG9wdGlvbiwgdGhhdCYjMzk7cyB0aGUgcHJlZmVycmVkIHJvdXRlLgoKSG1tLCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBhcHByb3ByaWF0ZT8gSSBrbm93IGBzb2NrX3NlbmRtc2dgIGlzIHRoZSBnZW5lcmljIG9uZSwgYnV0IHRoYXQmIzM5O3MgYSAqaG90IHBhdGgq4oCUdGhlIGNvZGUgaXMgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UsIHNvIEkgc2hvdWxkIGJlIGNhcmVmdWwgdGhlcmUuIFRoYXQgbWVhbnMgYHBhY2tldF9zZW5kbXNnYCBhbmQgYHBhY2tldF9zZW5kbXNnX3Nwa3RgIGFyZSBnb29kIGNob2ljZXMuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGB0YXAuY2AuIEluIHRoaXMgY2FzZSwgYHRhcF9zZW5kbXNnYCBpcyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gQWgsIGJ1dCB3YWl0LCBgdGFwX3NlbmRtc2dgICppcyogc3RhdGljISBEYW1uLiBPa2F5LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUgaW4gdGhpcyBmaWxlPyBJIG5lZWQgdG8gY2hlY2sgYHRhcF9zZW5kbXNnYCBpbiB0aGUgYGRyaXZlcnMvbmV0L3RhcC5jYCBmaWxlIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcF9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RhcC5jPTEwNDU9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTExMTctXG5kcml2ZXJzL25ldC90YXAuYzoxMTE4OnN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMTktXHRcdCAgICAgICBzaXplX3QgdG90YWxfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdGFwX3NvY2tldF9vcHMgPSB7XG5kcml2ZXJzL25ldC90YXAuYzoxMTY2Olx0LnNlbmRtc2cgPSB0YXBfc2VuZG1zZyxcbmRyaXZlcnMvbmV0L3RhcC5jLTExNjctXHQucmVjdm1zZyA9IHRhcF9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB0YXBfc2VuZG1zZ2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRhcF9zZW5kbXNnYCBpcyBpbmRlZWQgYXNzaWduZWQgdG8gYHRhcF9zb2NrZXRfb3BzLnNlbmRtc2dgLiBUaGlzIG1lYW5zIGl0JiMzOTtzIG5vdCBhbiBpbmxpbmVkIGZ1bmN0aW9uOyBpdCBoYXMgYSBkZWRpY2F0ZWQgc3ltYm9sIGFkZHJlc3MsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgYW5hbHlzaXMuIEdvb2QuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byB3b3JrIHdpdGg6IGB0YXBfc2VuZG1zZ2AgaXRzZWxmLCBgcGFja2V0X3NlbmRtc2dgLCBhbmQgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLgoKTm93LCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgcmVnYXJkaW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19UQVBgIGlzIGVzc2VudGlhbCwgYXMgdGhhdCBkaXJlY3RseSBlbmFibGVzIHRoZSBgZHJpdmVycy9uZXQvdGFwLmNgIGRyaXZlciwgd2hpY2ggaXMgb3VyIHRhcmdldC4gU2ltaWxhcmx5LCBgQ09ORklHX1BBQ0tFVGAgaXMgYWxzbyBhIG11c3QtaGF2ZSBiZWNhdXNlIGl0JiMzOTtzIHJlcXVpcmVkIGZvciB0aGUgcGFja2V0IHNvY2tldCBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cywgSSYjMzk7bGwgcXVpY2tseSBnbGFuY2Ugb3ZlciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBgQ09ORklHX1RBUGAgc2V0dGluZy4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzkxPWNvbmZpZyBUVU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQxNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE1OmNvbmZpZyBUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctNDE2LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgQ09ORklHX1RBUGAuLi4gaXQmIzM5O3MgYSB0cmlzdGF0ZSBvcHRpb24sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSBidWlsdC1pbiwgbW9kdWxhciwgb3Igbm90IGRlZmluZWQgYXQgYWxsLiBBbmQgaW50ZXJlc3RpbmdseSwgaXQgZG9lc24mIzM5O3QgaGF2ZSBpdHMgb3duIGV4cGxpY2l0IHByb21wdCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYW4gJiMzNDtpbXBsZW1lbnRhdGlvbiBkZXRhaWwmIzM0OyBzbyB0byBzcGVhay4gTm93LCB0aGUga2V5IGlzIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhpcyBvcHRpb24gZ2V0cyBzZWxlY3RlZC4gRnJvbSB0aGUgY29udGV4dCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgcHVsbGVkIGluIGFzIGEgZGVwZW5kZW5jeSBieSBib3RoIGBDT05GSUdfTUFDVlRBUGAgYW5kIGBDT05GSUdfSVBWVEFQYC4gU28sIGlmIGVpdGhlciBvZiB0aG9zZSBvcHRpb25zIGFyZSBlbmFibGVkIChlaXRoZXIgYnVpbHQtaW4gb3IgYXMgYSBtb2R1bGUpLCB0aGUga2VybmVsIGJ1aWxkICppbXBsaWNpdGx5KiBicmluZ3MgaW4gYENPTkZJR19UQVBgLiBFc3NlbnRpYWxseSwgYFRBUGAgaXMgYSBzdXBwb3J0aW5nIHN0cnVjdHVyZSBmb3IgdGhvc2UgdHdvIGZlYXR1cmVzLiBJdCBzZWVtcyB0aGF0IGBUQVBgIGlzIGEgbG93LWxldmVsIGJhc2UgZm9yIHZpcnR1YWxpemF0aW9uIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBleHBsYWlucyB3aHkgdGhlcmUmIzM5O3Mgbm8gZGlyZWN0IHByb21wdCwgaXRzIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCAmIzM0O3Vwc3RyZWFtJiMzNDsgYnkgdGhlIG9wdGlvbnMgdGhhdCAqdXNlKiBpdC4gVGhpcyBpcyBnb29kIGRlc2lnbiwgcmVkdWNpbmcgY2x1dHRlciBpbiB0aGUgY29uZmlndXJhdGlvbiBtZW51LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgVEFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODItXHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgzOlx0c2VsZWN0IFRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMTY9Y29uZmlnIElQVlRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjE5LVx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnOjIyMDpcdHNlbGVjdCBUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctMjIxLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIE1BQ1ZUQVAgYW5kIEl0cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGUgYENPTkZJR19UQVBgIGZ1bmN0aW9uYWxpdHkgY29tcGlsZWQuIFRoZSBkb2N1bWVudGF0aW9uIHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgZWl0aGVyIGBDT05GSUdfTUFDVlRBUGAgb3IgYENPTkZJR19JUFZUQVBgIHdpbGwgYWNoaWV2ZSB0aGlzLiBJIHRoaW5rIGBNQUNWVEFQYCBpcyB0aGUgYmV0dGVyIHJvdXRlLCBJJiMzOTtsbCBnbyB3aXRoIHRoYXQgZm9yIG5vdy4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZGVwZW5kZW5jaWVzLiBSaWdodCwgSSByZW1lbWJlciBub3csIGBNQUNWVEFQYCByZWxpZXMgb24gYm90aCBgTUFDVkxBTmAgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBJTkVUYCBzdGFjay4gSSBoYWQgZm9yZ290dGVuIHRvIGZhY3RvciB0aGF0IGluIGluaXRpYWxseS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlIGNlcnRhaW4uIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvciBJ4oCZbGwgZW5jb3VudGVyIGJ1aWxkIGlzc3Vlcy4gQmV0dGVyIHRvIHZlcmlmeSB0aGlzIG5vdyB0aGFuIHRvIHdhc3RlIHRpbWUgZGVidWdnaW5nIGxhdGVyLiBMZXQgbWUganVzdCBjb25maXJtIHRob3NlIGBNQUNWVEFQYCBkZXBlbmRlbmNpZXMgZXhwbGljaXRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQ1ZUQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xNjU9Y29uZmlnIE1BQ1ZMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTc5OmNvbmZpZyBNQUNWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cdHRyaXN0YXRlIFwmIzM0O01BQy1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb246IGBNQUNWVEFQYCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGludm9sdmluZyBgTUFDVlRBUGAsIGl0JiMzOTtzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgbmVjZXNzYXJ5IHBpZWNlcyBhcmUgaW4gcGxhY2UuIEkgY2FuJiMzOTt0IGJ1aWxkIGEgcm9idXN0IHNvbHV0aW9uIG9uIGEgc2hha3kgZm91bmRhdGlvbiwgYW5kIGBNQUNWVEFQYCBpcywgaW4gbXkgZXhwZXJpZW5jZSwgb25lIG9mIHRob3NlIHRoaW5ncyB0aGF0IGNhbiBzb21ldGltZXMgc2lsZW50bHkgdHJpcCB5b3UgdXAgaWYgaXRzIHByZXJlcXVpc2l0ZXMgYXJlbiYjMzk7dCBtZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGV2ZXJ5dGhpbmcgd2hpY2ggc3VwcG9ydHMgdGhpcy4gSSBuZWVkIHRvIGtub3cgd2hhdCBrZXJuZWwgbW9kdWxlcyBhcmUgcmVxdWlyZWQsIHdoYXQgdXNlci1zcGFjZSB1dGlsaXRpZXMgYXJlIGRlcGVuZGVkIHVwb24sIGFuZCBpZGVhbGx5LCBJIHNob3VsZCBrbm93IHdoaWNoIHZlcnNpb25zIGFyZSBrbm93biB0byBwbGF5IG5pY2VseSB0b2dldGhlci4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBhdm9pZGluZyBjb21waWxlIGVycm9yczsgaXQmIzM5O3MgYWJvdXQgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3VlcywgYW5kIGVuc3VyaW5nIEkgZG9uJiMzOTt0IHdhc3RlIHRpbWUgdHJvdWJsZXNob290aW5nIHByb2JsZW1zIHRoYXQgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQgd2l0aCBhIGJpdCBvZiB1cGZyb250IGR1ZSBkaWxpZ2VuY2UuIEEgcXVpY2sgZGVwZW5kZW5jeSBhc3Nlc3NtZW50IGlzIGFsd2F5cyB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipNQUNWTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTc5PWNvbmZpZyBNQUNWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cdHRyaXN0YXRlIFwmIzM0O01BQy1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBNQUNWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4Mi1cdGRlcGVuZHMgb24gSU5FVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbmV0d29ya2luZyBjb25maWd1cmF0aW9uczoKCioqQnVpbGRpbmcgdGhlIFZpcnR1YWwgTmV0d29yayoqCgpBbHJpZ2h0LCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbmV0d29yayBzZXR1cC4gSXQgbG9va3MgbGlrZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBgTUFDVlRBUGAgYW5kIHRoYXQsIG9mIGNvdXJzZSwgcmVsaWVzIG9uIGBNQUNWTEFOYCBhbmQgYElORVRgIHRvIGdldCBpdHMgam9iIGRvbmUuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGJyaW5nIGluIGBNQUNWTEFOYCBhbmQgdGhlbiBgTUFDVlRBUGAgaXRzZWxmLiBBbmQsIGZvciBnb29kIG1lYXN1cmUsIEkmIzM5O2xsIGFkZCBgUEFDS0VUYCB0byB0aGUgbGlzdC4gTm93LCBgUEFDS0VUYCB1c3VhbGx5IGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgZW5hYmxlZCBleHBsaWNpdGx5LCBpdCYjMzk7cyB0eXBpY2FsbHkgYmFrZWQgaW4gYnkgZGVmYXVsdCwgYnV0IEkmIzM5O20gYSBzdGlja2xlciBmb3IgZG91YmxlLWNoZWNraW5nIHRoZXNlIHRoaW5ncy4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gdmVyaWZ5IHRoZSBvYnZpb3VzIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCBnb3RjaGFzIGRvd24gdGhlIGxpbmUuIFRoYXQmIzM5O3MgdGhlIHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUNLRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L0tjb25maWctNS1cbm5ldC9wYWNrZXQvS2NvbmZpZzo2OmNvbmZpZyBQQUNLRVRcbm5ldC9wYWNrZXQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IHNvY2tldFwmIzM0O1xuLS1cbm5ldC9wYWNrZXQvS2NvbmZpZy0xOC1cbm5ldC9wYWNrZXQvS2NvbmZpZzoxOTpjb25maWcgUEFDS0VUX0RJQUdcbm5ldC9wYWNrZXQvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldDogc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcG90ZW50aWFsIGNoYW5nZXMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIHRoZSBmdWxsIHNjb3BlIG9mIGl0cyBpbXBhY3QuIEZpcnN0IHRoaW5ncyBmaXJzdDogaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIGFkZCBgUEFDS0VUYCBhcyBhIHRyaXN0YXRlLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGxldCYjMzk7cyBtYWtlIGEgbm90ZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYFRVTmAgaXMgYWxzbyBhZmZlY3RlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGB0YXAuY2AsIGFuZCB0aGF0JiMzOTtzIHVzZWQgYnkgYE1BQ1ZUQVBgIGFuZCBgSVBWVEFQYC4gSG93ZXZlciwgYFRVTmAgbGl2ZXMgaW4gaXRzIG93biBgdHVuLmNgIGRyaXZlciwgc28gaXQgc2hvdWxkIGJlIGluZGVwZW5kZW50LCBtZWFuaW5nIHdlJiMzOTtyZSBsaWtlbHkgZ29vZCBvbiB0aGF0IGZyb250IGFuZCBubyBmdXJ0aGVyIGFjdGlvbiBpcyByZXF1aXJlZCB0aGVyZS4gYE1BQ1ZUQVBgIGFuZCBgTUFDVkxBTmAgc2VlbSB1bmFmZmVjdGVkLgoKRmluYWxseSwgc2luY2UgdGhlIHBhdGNoIHRvdWNoZXMgVkxBTiBoYW5kbGluZywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgbmVlZCB0byBhZGp1c3QgYW55dGhpbmcgcmVsYXRpbmcgdG8gYFZMQU5fODAyMVFgLiBCZXN0IHRvIGJlIHRob3JvdWdoLCBnaXZlbiB0aGUgY2hhbmdlcyB0byB0aGF0IGFyZWEuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhZGRyZXNzZWQgaW4gdGhlIHVwZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvODAyMXEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWTEFOIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHVzaW5nIGBldGhfdHlwZV92bGFuYCBhbmQgYHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aGAuIFRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaGAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBlaXRoZXIgb2YgdGhlc2UgZGVwZW5kIG9uIHRoZSBgVkxBTl84MDIxUWAgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24uIElmIHRoZXkgZG8sIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2Ygd2hhdGV2ZXIgY2hhbmdlIGlzIGluIHRoaXMgcGF0Y2ggd2l0aCByZXNwZWN0IHRvIHRoYXQgZGVwZW5kZW5jeS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYnJlYWsgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgODAyLjFRIHN0YW5kYXJkLiBJdCBpcyBlc3NlbnRpYWwgSSB1bmRlcnN0YW5kIGFueSBpbXBsaWNhdGlvbnMgZm9yIHN0YW5kYXJkIFZMQU4gdGFnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9NjU4PXN0YXRpYyBpbmxpbmUgX19iZTE2IHZsYW5fZ2V0X3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNjYzLS8qIFRoaXMgdmVyc2lvbiBvZiBfX3ZsYW5fZ2V0X3Byb3RvY29sKCkgYWxzbyBwdWxscyBtYWMgaGVhZGVyIGluIHNrYi1cdTAwM2VoZWFkICovXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo2NjQ6c3RhdGljIGlubGluZSBfX2JlMTYgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC02NjUtXHRcdFx0XHRcdFx0IF9fYmUxNiB0eXBlLCBpbnQgKmRlcHRoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgUGFja2V0IFRyYW5zbWlzc2lvbiBGb2N1cyoqCgpPa2F5LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIGlubGluZSwgd2hpY2ggbWVhbnMgdGhleSAqc2hvdWxkbiYjMzk7dCogZGVwZW5kIG9uIGBWTEFOXzgwMjFRYCBiZWluZyBjb21waWxlZC4gSG93ZXZlciwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaWYgSSB3YW50IHRvIHRlc3QgVkxBTi10YWdnZWQgcGFja2V0IGZ1bmN0aW9uYWxpdHksIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0aGF0IGZsYWcgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIExldCYjMzk7cyBpbmNsdWRlIGl0LgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gcGFja2V0IHRyYW5zbWlzc2lvbjogYHRhcF9zZW5kbXNnYCwgYHBhY2tldF9zZW5kbXNnYCwgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBhbmQgYHRwYWNrZXRfc25kYC4KCldhaXQgYSBtaW51dGUsIGlzbiYjMzk7dCBgdHBhY2tldF9zbmRgIGEgKnN0YXRpYyogZnVuY3Rpb24/IEJ1dCBJJiMzOTttIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgcGFja2V0X3NlbmRtc2dgIGFuZC4uLm9oLCBubywgSSB0aGluayBJIHdhcyBnZXR0aW5nIG1peGVkIHVwLiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gKm9ubHkqIGBwYWNrZXRfc2VuZG1zZ2AuIFRoZW4uLi4gYHRwYWNrZXRfZmlsbF9za2JgLi4uIGlzbiYjMzk7dCB0aGF0IGZvciByZWNlcHRpb24sIG5vdCB0cmFuc21pc3Npb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHBhY2tldF9maWxsX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU2NT1zdGF0aWMgaW50IHBhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqbGVuLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4Ny1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU4ODpzdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4OS1cdFx0dm9pZCAqZnJhbWUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIGludCB0cF9sZW4sXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg2OC1cdFx0fVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODY5Olx0XHR0cF9sZW4gPSB0cGFja2V0X2ZpbGxfc2tiKHBvLCBza2IsIHBoLCBkZXYsIGRhdGEsIHRwX2xlbiwgcHJvdG8sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NzAtXHRcdFx0XHRcdCAgYWRkciwgaGxlbiwgY29weWxlbiwgXHUwMDI2c29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMzNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQYWNrZXQgU29ja2V0IFNlbmQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYHRwYWNrZXRfZmlsbF9za2JgIGdldHMgY2FsbGVkIGJ5IGB0cGFja2V0X3NuZGAsIHdoaWNoIHRlbGxzIG1lIHRoYXQgYHRwYWNrZXRfc25kYCBpcyB0aGUgcHJpbWFyeSBzZW5kIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgcGFja2V0IHNvY2tldHMgdXRpbGl6aW5nIHJpbmcgYnVmZmVycy4gVGhlbiB0aGVyZSYjMzk7cyBgcGFja2V0X3NuZGAgd2hpY2ggbG9va3MgdG8gYmUgdGhlIG1haW4gb25lIGZvciByZWd1bGFyIHBhY2tldCBzb2NrZXRzLiBJIHNlZSBgcGFja2V0X3NlbmRtc2dfc3BrdGAgdGhlcmUgdG9vLCB3aGljaCBpcyBmb3IgdGhlLCBub3cgb2Jzb2xldGUsIGBTT0NLX1BBQ0tFVGAgZnVuY3Rpb25hbGl0eSwgYW5kIHdlJiMzOTt2ZSBnb3QgYHRhcF9zZW5kbXNnYCBmb3IgVEFQIGRldmljZXMuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGBwYWNrZXRfc25kYCBzdGF0aWM/IFllcCwgaXQgaXMuIEJ1dCwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHBhY2tldF9zZW5kbXNnYC4gQWgsIHJpZ2h0LCBgcGFja2V0X3NlbmRtc2dgIGdldHMgYXNzaWduZWQgdG8gYHBhY2tldF9vcHMuc2VuZG1zZ2AuIE9rYXksIHNvIGBwYWNrZXRfc2VuZG1zZ2AgaXMgdGhlIHJlYWwgZW50cnkgcG9pbnQuIEdvdCBpdC4gU28gdGhhdCBtZWFucyBJIHNob3VsZCBmb2N1cyBvbiBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdGFwX3NlbmRtc2dgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdG8gdGFyZ2V0LgoKSnVzdCB3YW50IHRvIHZlcmlmeSB3aGVyZSB0aGVzZSBhcmUgbG9jYXRlZC4gYHRhcF9zZW5kbXNnYCBpcyBpbiBgdGFwLmNgLCBqdXN0IGFzIEkmIzM5O2QgZXhwZWN0LiBgcGFja2V0X3NlbmRtc2dgIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAgYXJlIGJvdGggaW4gYGFmX3BhY2tldC5jYC4gUGVyZmVjdC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IHNlbmQtcmVsYXRlZCBmdW5jdGlvbnMgSSBzaG91bGQga25vdyBhYm91dD8gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZSBgdGFwX2dldF91c2VyX3hkcGAgaXMgY2FsbGVkIGZyb20gYHRhcF9zZW5kbXNnYC4gT2theS4gQW5kIHRoZW4sIEkgc2VlIHRoYXQgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBjYWxsZWQgZnJvbSBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gU28gaWYgSSBmdXp6IHRob3NlIHRocmVlLCBpdCYjMzk7bGwgY292ZXIgdGhvc2UgY2FsbCBwYXRocy4gU2VlbXMgbGlrZSB0aGF0IHdvdWxkIHByb3ZpZGUgcHJldHR5IGNvbXByZWhlbnNpdmUgY292ZXJhZ2UuCgpOb3csIG9uZSBsYXN0IHRoaW5nOiBJcyBgcGFja2V0X3NlbmRtc2dgIHRoZSAqb25seSogZW50cnkgcG9pbnQgZm9yIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2A/IEhtbW0uLi4gaXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBhbHNvIGNhbGxlZCBmcm9tIGBwYWNrZXRfcmN2X3Nwa3RgPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gTm9wZSwgbG9va3MgbGlrZSBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGlzICpub3QqIGNhbGxlZCBmcm9tIGBwYWNrZXRfcmN2X3Nwa3RgLiBHb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBPa2F5LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcgSSB3YXMgbG9va2luZyBmb3IuIE5vdywgSSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZW5kIHBhdGhzIHRvIHRhcmdldCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3BhcnNlX2hlYWRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4Njk9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzQtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzU6c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNi17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTY2PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDc4LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMDc5Olx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA4MC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1ODg9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjYyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjYzOlx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY2NC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjQ9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwOTAtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwOTE6XHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDkyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDczMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkxBTiBUYWdnaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgc2VuZCBwYXRocyBhcmUgdGhlIGtleS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGNvbWluZyBmcm9tIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgLCBhbmQgYHBhY2tldF9zbmRgLiBBbGwgc2VuZCBwYXRocywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIFRoYXQgbmFycm93cyBpdCBkb3duIHRvIGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuCgpUaGUgcGF0Y2ggaXMgYWJvdXQgaG93IFZMQU4gdGFnZ2VkIHBhY2tldHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiwgc3BlY2lmaWNhbGx5IGZvciBUQVAgZGV2aWNlcyBhbmQgQUZfUEFDS0VUIHNvY2tldHMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IG1vZGlmeWluZyBgc2tiLSZndDtwcm90b2NvbGAgdG8gcmVmbGVjdCB0aGUgaW5uZXIgcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHdoaWNoIG1lYW5zIGl0IG5lZWRzIHRvIGJlIGZ1enogdGVzdGVkIHRob3JvdWdobHkuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdpdGggY3JhZnRlZCBWTEFOIHBhY2tldHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlncy4gSSYjMzk7dmUgZ290IGBQQUNLRVRgLCBgTUFDVlRBUGAsIGBNQUNWTEFOYCwgYFRBUGAsIGFuZCBgVkxBTl84MDIxUWAuIEkga25vdyBgQ09ORklHX1RBUGAsIGBDT05GSUdfTUFDVlRBUGAsIGBDT05GSUdfUEFDS0VUYCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAgYWxsIGV4aXN0LCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uSSBhbHNvIHNlZSBgdGFwX2dldF91c2VyX3hkcGAgYmVpbmcgY2FsbGVkIGZyb20gYHRhcF9zZW5kbXNnYCB3aGVuIFhEUCBpcyB1c2VkLiBEb2VzIHRoaXMgcGF0Y2ggaW50ZXJhY3Qgd2l0aCBYRFAgaW4gYW55IHNwZWNpZmljIHdheT8gSSBuZWVkIHRvIGNoZWNrIGB0YXBfc2VuZG1zZ2AgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBYRFAgbm93LiBUaGF0IG1pZ2h0IGFmZmVjdCB0aGUgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwX2dldF91c2VyX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz0xMDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhcF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDQtXG5kcml2ZXJzL25ldC90YXAuYzoxMDQ1OnN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTExMTg9c3RhdGljIGludCB0YXBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTExMjktXHRcdFx0eGRwID0gXHUwMDI2KChzdHJ1Y3QgeGRwX2J1ZmYgKiljdGwtXHUwMDNlcHRyKVtpXTtcbmRyaXZlcnMvbmV0L3RhcC5jOjExMzA6XHRcdFx0dGFwX2dldF91c2VyX3hkcChxLCB4ZHApO1xuZHJpdmVycy9uZXQvdGFwLmMtMTEzMS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKlhEUCBhbmQgVGFwIERyaXZlciBRdWlya3MqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcmVsYXRlZCB0byBYRFAgc3VwcG9ydCBpbiB0aGUgYHRhcGAgZHJpdmVyLiBJIGtub3cgWERQIGZ1bmN0aW9uYWxpdHkgaXMgZ2VuZXJhbGx5IGFjY2Vzc2libGUgaWYgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0LCBJJiMzOTttIGEgYml0IHB1enpsZWQgdGhhdCBgdGFwX2dldF91c2VyX3hkcGAgZG9lc24mIzM5O3QgKmFwcGVhciogdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGF0IGZlYXR1cmUgZmxhZy4gVGhhdCBzdHJpa2VzIG1lIGFzIGEgcG90ZW50aWFsIG92ZXJzaWdodCwgb3IgbWF5YmUgYSBkZXNpZ24gY2hvaWNlIEkgaGF2ZW4mIzM5O3QgZnVsbHkgZ3Jhc3BlZCB5ZXQuCgpUbyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBteSBzdXNwaWNpb24uIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBkcml2ZXJzL25ldC90YXAuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBgdGFwX2dldF91c2VyX3hkcGAgZnVuY3Rpb24gYW5kIGl0cyBzdXJyb3VuZGluZyBjb2RlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhbnN3ZXIgaXMgZ29pbmcgdG8gbGllOiB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgaW1wbGljaXQgZGVwZW5kZW5jeSwgc29tZSBvdGhlciBidWlsZCBvcHRpb24gYXQgcGxheSwgb3IgaWYgdGhlcmUmIzM5O3MgaW5kZWVkIGEgcG90ZW50aWFsIGlzc3VlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHRcdC5wb2xsXHRcdD0gdGFwX3BvbGwsXG4xMDQxOlx0XHQudW5sb2NrZWRfaW9jdGxcdD0gdGFwX2lvY3RsLFxuMTA0MjpcdFx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuMTA0MzpcdH07XG4xMDQ0Olx0XG4xMDQ1Olx0c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuMTA0NjpcdHtcbjEwNDc6XHRcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqZ3NvID0geGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydDtcbjEwNDg6XHRcdGludCBidWZsZW4gPSB4ZHAtXHUwMDNlZnJhbWVfc3o7XG4xMDQ5Olx0XHRpbnQgdm5ldF9oZHJfbGVuID0gMDtcbjEwNTA6XHRcdHN0cnVjdCB0YXBfZGV2ICp0YXA7XG4xMDUxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTA1MjpcdFx0aW50IGVyciwgZGVwdGg7XG4xMDUzOlx0XG4xMDU0Olx0XHRpZiAodW5saWtlbHkoeGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGEgXHUwMDNjIEVUSF9ITEVOKSkge1xuMTA1NTpcdFx0XHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZSh4ZHAtXHUwMDNlZGF0YSkpO1xuMTA1NjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTA1NzpcdFx0XHRnb3RvIGVycjtcbjEwNTg6XHRcdH1cbjEwNTk6XHRcbjEwNjA6XHRcdGlmIChxLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVk5FVF9IRFIpXG4xMDYxOlx0XHRcdHZuZXRfaGRyX2xlbiA9IFJFQURfT05DRShxLVx1MDAzZXZuZXRfaGRyX3N6KTtcbjEwNjI6XHRcbjEwNjM6XHRcdHNrYiA9IGJ1aWxkX3NrYih4ZHAtXHUwMDNlZGF0YV9oYXJkX3N0YXJ0LCBidWZsZW4pO1xuMTA2NDpcdFx0aWYgKCFza2IpIHtcbjEwNjU6XHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoeGRwLVx1MDAzZWRhdGEpKTtcbjEwNjY6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjEwNjc6XHRcdFx0Z290byBlcnI7XG4xMDY4Olx0XHR9XG4xMDY5Olx0XG4xMDcwOlx0XHRza2JfcmVzZXJ2ZShza2IsIHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydCk7XG4xMDcxOlx0XHRza2JfcHV0KHNrYiwgeGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGEpO1xuMTA3MjpcdFxuMTA3MzpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIEVUSF9ITEVOKTtcbjEwNzQ6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xMDc1Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfaGRyKHNrYiktXHUwMDNlaF9wcm90bztcbjEwNzY6XHRcbjEwNzc6XHRcdGlmICh2bmV0X2hkcl9sZW4pIHtcbjEwNzg6XHRcdFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVx1MDAzZWZsYWdzLCBza2IsIGdzbyk7XG4xMDc5Olx0XHRcdGlmIChlcnIpXG4xMDgwOlx0XHRcdFx0Z290byBlcnJfa2ZyZWU7XG4xMDgxOlx0XHR9XG4xMDgyOlx0XG4xMDgzOlx0XHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xuMTA4NDpcdFx0aWYgKGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKSkge1xuMTA4NTpcdFx0XHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsXG4xMDg2Olx0XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZkZXB0aCk7XG4xMDg3Olx0XG4xMDg4Olx0XHRcdGlmIChwcm90byAhPSAwKSB7XG4xMDg5Olx0XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NTYKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIFBhY2tldCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSAqYWx3YXlzKiBnZXRzIGNvbXBpbGVkIGluLiBMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHJhbmdlIG9mIG5ldHdvcmsgaW50ZXJmYWNlczogYFBBQ0tFVGAsIGBNQUNWVEFQYCwgYE1BQ1ZMQU5gLCBgVEFQYCwgYW5kIGBWTEFOXzgwMjFRYC4gVGhlc2UgYXJlIHRoZSBrZXkgY29udGV4dHMuCgpNeSBmb2N1cyBpcyBvbiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHRyYW5zbWl0IHBhdGhzIGZvciBgVEFQYCBkZXZpY2VzIGFuZCBgQUZfUEFDS0VUYCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIFZMQU4gdGFnZ2VkIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdXBkYXRpbmcgYHNrYi0mZ3Q7cHJvdG9jb2xgIHRvIHJlZmxlY3QgdGhlICppbm5lciogcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzIGhlcmU6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgYWN0dWFsIHNlbmRpbmcgb2YgcGFja2V0cyBoYXBwZW5zLCBhbmQsIGdpdmVuIHRoZSBwYXRjaCYjMzk7cyBzY29wZSwgdGhleSYjMzk7cmUgdGhlIHByaW1lIHN1c3BlY3RzIGZvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2UgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJlaGF2aW9yIG1ha2VzIG1lIHdhbnQgdG8gZnV6eiB0aGVzZS4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IGRpbGlnZW50OyB0aGVyZSBjb3VsZCBiZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuCgpSaWdodCwgSSYjMzk7bSBnb2luZyB0byBzZXQgc29tZSByZXN1bHRzLCBsZXQmIzM5O3MgY2FsbCBpdC4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUNLRVQmIzM0OywKICAgICYjMzQ7TUFDVlRBUCYjMzQ7LAogICAgJiMzNDtNQUNWTEFOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDt0YXBfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXHUwMDNlcHJvdG9jb2wgdG8gdGhlIGlubmVyIHByb3RvY29sIHdoZW4gYSBWTEFOIHRhZyBpcyBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDssCiAgICAmIzM0O01BQ1ZUQVAmIzM0OywKICAgICYjMzQ7TUFDVkxBTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3BhY2tldF9zZW5kbXNnX3Nwa3QmIzM0OywKICAgICYjMzQ7dGFwX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZMQU4gdGFnZ2VkIHBhY2tldHMgaW4gdGhlIHRyYW5zbWl0IHBhdGhzIG9mIFRBUCBkZXZpY2VzIGFuZCBBRl9QQUNLRVQgc29ja2V0cy4gSXQgdXBkYXRlcyB0aGUgc2tiLVx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MjoxNi4zMTI2MTg0NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMTQwMzc4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJNQUNWTEFOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwidGFwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXFx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MTYuMzEyNjI2NjU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk0NzE4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNGY0ZWYxNDkwMDBhMzU5NjI3MjA4OWVjMjUxY2M4NDI4OGNkZWY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTE6NDI6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwLmMgYi9kcml2ZXJzL25ldC90YXAuY1xcbmluZGV4IGZhZTExNTkxNWM4ZWYuLmFmY2M0OTE5YmQwNDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdGFwLmNcXG4rKysgYi9kcml2ZXJzL25ldC90YXAuY1xcbkBAIC0xMDgxLDkgKzEwODEsMTUgQEAgc3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbi1cXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVxcdTAwM2Vwcm90b2NvbCwgXFx1MDAyNmRlcHRoKSAhPSAwKVxcbi1cXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbitcXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSkge1xcbitcXHRcXHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGVwdGgpO1xcbitcXG4rXFx0XFx0aWYgKHByb3RvICE9IDApIHtcXG4rXFx0XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0dGFwID0gcmN1X2RlcmVmZXJlbmNlKHEtXFx1MDAzZXRhcCk7XFxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuaW5kZXggMGUxMzU1YmU4OWY2NC4uYTYyZDQ0NTA0N2MwZSAxMDA2NDRcXG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbkBAIC0xOTQ1LDkgKzE5NDUsMTUgQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFxuIFxcdC8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovXFxuIFxcdGlmIChsaWtlbHkoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLVxcdTAwM2Vwcm90b2NvbCwgXFx1MDAyNmRlcHRoKSAhPSAwKVxcbi1cXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbitcXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKSkge1xcbitcXHRcXHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGVwdGgpO1xcbitcXG4rXFx0XFx0aWYgKHByb3RvICE9IDApIHtcXG4rXFx0XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MTYuODEzMDQzOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTc3MTM2MDM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJNQUNWTEFOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwidGFwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXFx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzRmNGVmMTQ5MDAwYTM1OTYyNzIwODllYzI1MWNjODQyODhjZGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTE6NDI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YXAuYyBiL2RyaXZlcnMvbmV0L3RhcC5jXG5pbmRleCBmYWUxMTU5MTVjOGVmLi5hZmNjNDkxOWJkMDQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdGFwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3RhcC5jXG5AQCAtMTA4MSw5ICsxMDgxLDE1IEBAIHN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdH1cbiBcbiBcdC8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovXG4tXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4tXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4rXHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4rXHRcdF9fYmUxNiBwcm90byA9IHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCxcbitcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmRlcHRoKTtcbitcbitcdFx0aWYgKHByb3RvICE9IDApIHtcbitcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuK1x0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0YXAgPSByY3VfZGVyZWZlcmVuY2UocS1cdTAwM2V0YXApO1xuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAwZTEzNTViZTg5ZjY0Li5hNjJkNDQ1MDQ3YzBlIDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5NDUsOSArMTk0NSwxNSBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbiBcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXHUwMDI2XHUwMDI2XG4tXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4tXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4rXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4rXHRcdF9fYmUxNiBwcm90byA9IHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCxcbitcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmRlcHRoKTtcbitcbitcdFx0aWYgKHByb3RvICE9IDApIHtcbitcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuK1x0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjE2LjgxMzA0NjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg3OTc4NDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBUQVAgYW5kIEFGX1BBQ0tFVCBWTEFOIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3RhcC5jYCBhbmQgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBJbnRlcmVzdGluZywgaXQncyB0b3VjaGluZyBib3RoIFRBUCBhbmQgQUZfUEFDS0VULCBzbyBpdCdzIHByb2JhYmx5IGFpbWVkIGF0IGEgYnJvYWRlciB1c2UgY2FzZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYHRhcF9nZXRfdXNlcl94ZHBgIGFuZCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIHJlbGF0ZWQgdG8gaG93IFZMQU4tdGFnZ2VkIHBhY2tldHMgYXJlIHByb2Nlc3NlZC5cblxuSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHVwZGF0ZXMgYHNrYi1cdTAwM2Vwcm90b2NvbGAgdG8gdGhlIGlubmVyIHByb3RvY29sIGFmdGVyIGEgY2FsbCB0byBgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoYC4gU28sIGl0J3MgYWJvdXQgY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2wgd2l0aGluIGEgVkxBTiB0YWcuIFRoYXQncyBhIGdvb2QgYXBwcm9hY2g7IFZMQU5zIGNhbiBuZXN0LCBzbyBnZXR0aW5nIHRoZSAqcmlnaHQqIHByb3RvY29sIGlzIGNydWNpYWwgZm9yIGFueSBoaWdoZXItbGV2ZWwgcHJvY2Vzc2luZy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgaGl0LiBJIGtub3cgYHRhcF9nZXRfdXNlcl94ZHBgIGlzIGluIGBkcml2ZXJzL25ldC90YXAuY2AsIHRoYXQgb25lJ3MgZWFzeSBlbm91Z2ggdG8gZmluZC4gQW5kLCB5ZWFoLCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGlzIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgdGhhdCdzIHdoYXQgSSB3b3VsZCBleHBlY3QuIEdvb2QuXG5cblJpZ2h0LCBgdGFwX2dldF91c2VyX3hkcGAgaXMgY2xlYXJseSBjYWxsZWQgd2hlbiB5b3UncmUgc2VuZGluZyBwYWNrZXRzIHRocm91Z2ggYSBUQVAgaW50ZXJmYWNlICp3aXRoKiBYRFAgZW5hYmxlZC4gQW5kIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgZ29pbmcgdG8gYmUgdXNlZCB3aXRoIEFGX1BBQ0tFVCBzb2NrZXRzLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNoYW5nZXM7IHRoaXMgaXMgZ29pbmcgdG8gYWZmZWN0IFhEUCBzZXR1cHMgYW5kIEFGX1BBQ0tFVCBzb2NrZXQgdXNlcnMuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZXF1aXJlZCBjb25maWdzLiBGb3IgYGRyaXZlcnMvbmV0L3RhcC5jYCwgSSdtIGFzc3VtaW5nIHRoYXQgaXQgbmVlZHMgYENPTkZJR19NQUNWVEFQYCBvciBgQ09ORklHX1RVTmAgdG8gYmUgZW5hYmxlZCwgYnV0IGxldCdzIGJlIHN1cmUuIFdhaXQsIGB0YXAuY2AgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYENPTkZJR19UQVBgIG9yIGBDT05GSUdfTUFDVlRBUGAsIHNvLCBsZXQgbWUgcXVpY2tseSBnbyBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBmb3IgdGhpcyBwYXRjaCB0byBldmVuIHRha2UgZWZmZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MjMuNjkyODM0Njg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzA5OTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19NQUNWTEFOKSArPSBtYWN2bGFuLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTUFDVlRBUCkgKz0gbWFjdnRhcC5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19UVU4pICs9IHR1bi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1RBUCkgKz0gdGFwLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfVkVUSCkgKz0gdmV0aC5vXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWTEFOKSArPSBpcHZsYW4ub1xcbmRyaXZlcnMvbmV0L2lwdmxhbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JUFZUQVApICs9IGlwdnRhcC5vXFxuZHJpdmVycy9uZXQvaXB2bGFuL01ha2VmaWxlLTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jLTMtICogT3JpZ2luYWwgY29kZSBiYXNlZCBIb3N0IEFQIChzb2Z0d2FyZSB3aXJlbGVzcyBMQU4gYWNjZXNzIHBvaW50KSBkcml2ZXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pcHcyeDAwL2xpYmlwd19yeC5jOjQ6ICogZm9yIEludGVyc2lsIFByaXNtMi8yLjUvMyAtIGhvc3RhcC5vIG1vZHVsZSwgY29tbW9uIHJvdXRpbmVzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXB3MngwMC9saWJpcHdfcnguYy01LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjIzLjk2OTk0MTM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDMwMTYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIG9yIG1vZHVsZSwgYW5kIGl0J3MgY2FsbGluZyBmb3IgYENPTkZJR19UQVBgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIGRlbHZpbmcgaW50byB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1BBQ0tFVGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYSBkZXBlbmRlbmN5IGNoYWluLiBHb3R0YSBlbnN1cmUgdGhvc2UgY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIGFyZSBiYWtlZCBpbiBzbyBldmVyeXRoaW5nIGZ1bmN0aW9ucyBjb3JyZWN0bHkuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLCBsZXNzIEkgcHVsbCBteSBoYWlyIG91dCBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjI3LjQ3Mjk1OTg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDA2NTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9wYWNrZXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9NYWtlZmlsZS01LVxcbm5ldC9wYWNrZXQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUEFDS0VUKSArPSBhZl9wYWNrZXQub1xcbm5ldC9wYWNrZXQvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfUEFDS0VUX0RJQUcpICs9IGFmX3BhY2tldF9kaWFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MjcuNzEzMDMwNzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5ODYyMTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBhY2tldCBQYXJzaW5nIGFuZCBYRFAgVXNlciBTcGFjZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGFuZCBhbHNvIHRha2UgYSBsb29rIGF0IGB0YXBfZ2V0X3VzZXJfeGRwYC4gSSBrbm93IGJvdGggb2YgdGhlc2UgYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW4gYSBzeXN0ZW0gaW52b2x2aW5nIG5ldHdvcmsgdHJhZmZpYyBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIFhEUC4gVGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbiBmb3IgaW50ZXJwcmV0aW5nIHRoZSByYXcgZGF0YSBjb21pbmcgaW4sIG1ha2luZyBzdXJlIHdlIGhhdmUgYWxsIHRoZSBpbmZvIHdlIG5lZWQgZnJvbSB0aGUgcGFja2V0IGhlYWRlcnMgdG8gaGFuZGxlIGl0IGNvcnJlY3RseS4gVGhlbiwgdGhlIGB0YXBfZ2V0X3VzZXJfeGRwYCBmdW5jdGlvbiBtdXN0IGJlIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdGFwIGRldmljZSBhbmQgdGhlIHVzZXItc3BhY2UgWERQIHByb2dyYW0gLSBnZXR0aW5nIGl0IHRvIHRhbGsgdG8gZWFjaCBvdGhlciBpcyBwcm9iYWJseSB0aGUga2V5IHRvIG9wdGltaXppbmcgdGhlIHBhY2tldCBmbG93LCBzbywgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoYXQgcHJvY2VzcyBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhlYWRlcnMgYXJlIHBhcnNlZCBpbiByZWxhdGlvbiB0byB0aGUgWERQIHByb2dyYW0gYW5kIHRoZSB0YXAgZGV2aWNlLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNlbnRyYWwgdG8gYW55IGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29yayBhcHBsaWNhdGlvbi4gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MzMuNzExNjU0NTA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ5MTg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfcGFyc2VfaGVhZGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4Njk9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzU6c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTY2PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwNzgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMDc5OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDgwLVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTg4PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjYyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY2MzpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY2NC1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2ND1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDkwLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzA5MTpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MzMuODE0MTUwOTEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzODE0OTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBBRl9QQUNLRVQgU2VuZCBQYXRocyBhbmQgWERQIEludGVncmF0aW9uKipcblxuUmlnaHQsIHNvIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gSG1tLCB0aG9zZSBhbGwgc2NyZWFtIFwiQUZfUEFDS0VUIHNlbmQgcGF0aHNcIiB0byBtZSwgb2YgY291cnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBhbmQgaG93IHRoZSBoZWFkZXIgcGFyc2luZyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHNlbmRpbmcgcGFja2V0cyB0aHJvdWdoIHRoZSBBRl9QQUNLRVQgc29ja2V0IGZhbWlseS4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpLlxuXG5JJ2QgYmV0dGVyIHRha2UgYSBsb29rIGF0IGB0YXBfZ2V0X3VzZXJfeGRwYCB0byBzZWUgaG93IFhEUCBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoaXMgZW50aXJlIGZsb3cuIFdoZXJlIGRvZXMgaXQgaW50ZWdyYXRlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBoZWFkZXIgcGFyc2luZyBpbiByZWxhdGlvbiB0byBhbnkgWERQLWJhc2VkIHByb2Nlc3Npbmcgb3IgZmlsdGVyaW5nPyBJJ20gY3VyaW91cyBpZiB0aGUgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBwcmVwYXJpbmcgcGFja2V0cyBmb3IgWERQLCBvciBob3cgaXQgYWZmZWN0cyBhbnkgWERQLWJhc2VkIHRyYWZmaWMgc3RlZXJpbmcuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IHRoZSB1c2Vyc3BhY2UgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIEFGX1BBQ0tFVCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjM3LjM1MjMwNDgyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2Njc5Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhcF9nZXRfdXNlcl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGFwX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxcbmRyaXZlcnMvbmV0L3RhcC5jOjEwNDU6c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTExOD1zdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVxcdFxcdFxcdHhkcCA9IFxcdTAwMjYoKHN0cnVjdCB4ZHBfYnVmZiAqKWN0bC1cXHUwMDNlcHRyKVtpXTtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlxcdFxcdFxcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6MzcuODM4OTkwNTQ4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjA1MDM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRFAgUGFja2V0IFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHBhY2tldHMgYXJlIHNlbnQgdGhyb3VnaCB0aGUgVEFQIGRldmljZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRhcF9zZW5kbXNnYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgaGVyZSwgZ2l2ZW4gaXRzIGNhbGwgdG8gYHRhcF9nZXRfdXNlcl94ZHBgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3c6IGB0YXBfc2VuZG1zZ2AgYW5kIHRoZW4gaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGBwYWNrZXRfc25kYCwgYHRwYWNrZXRfZmlsbF9za2JgLCBhbmQgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGFwX3NlbmRtc2dgIGlzIGFjdHVhbGx5IGFuIGV4cG9ydGVkIHN5bWJvbC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUgb3IgaWYgaXQncyBzdGF0aWMsIHdoaWNoIHdvdWxkIGxpbWl0IGl0cyBzY29wZS4gS25vd2luZyBpZiBpdCdzIGV4cG9ydGVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NDIuMzk5NDk3MTM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkzNTY1NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwNDU9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtMTExNy1cXG5kcml2ZXJzL25ldC90YXAuYzoxMTE4OnN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG5kcml2ZXJzL25ldC90YXAuYy0xMTE5LVxcdFxcdCAgICAgICBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB0YXBfc29ja2V0X29wcyA9IHtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTY2OlxcdC5zZW5kbXNnID0gdGFwX3NlbmRtc2csXFxuZHJpdmVycy9uZXQvdGFwLmMtMTE2Ny1cXHQucmVjdm1zZyA9IHRhcF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0Mjo0Mi42Mjg4NjAwMjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNDU0NjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgVGFwIERldmljZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGFwX3NlbmRtc2dgIGZ1bmN0aW9uIOKAkyBpdCdzIHN0YXRpYywgd2hpY2ggdXN1YWxseSBzdWdnZXN0cyBpdCdzIHNjb3BlZCB3aXRoaW4gdGhlIGB0YXAuY2AgZmlsZS4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQncyBiZWluZyB1c2VkIGFzIGEgYHByb3RvX29wc2AgY2FsbGJhY2ssIGFuZCB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdXNpbmcgdGhlIHJpZ2h0IGZ1bmN0aW9uLlxuXG5IbW0sIHNob3VsZCBJIGJlIHVzaW5nIGB0YXBfZ2V0X3VzZXJfeGRwYCBpbnN0ZWFkPyBUaGF0J3MgYWxzbyBzdGF0aWMsIGJ1dCBpcyB0aGF0IGEgYmV0dGVyIGZpdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNpdHVhdGlvbj8gVGhpcyBkZWNpc2lvbiBuZWVkcyBjYXJlZnVsIGNvbnNpZGVyYXRpb24uXG5cbkFoLCB3YWl0LCBob2xkIG9uLi4uIGB0YXBfZ2V0X3VzZXJfeGRwYCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IG1ha2luZyB0aGUgYmVzdCBjaG9pY2UsIGlzbid0IGl0P1xuXG5SaWdodCwgc28gY2FuIEkgYWN0dWFsbHkgdXNlIGB0YXBfc2VuZG1zZ2A/IFllcywgaXQncyBhIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS5cblxuSGFuZyBvbi4uLiB0aGVyZSdzIGFsc28gYHRhcF9nZXRfdXNlcmAgaW4gYHRhcC5jYC4gU28gbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSBvZiB0aGUgZnVuY3Rpb25zIGluIGB0YXAuY2AgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdG8gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njc3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NDguNDYzNDA5MjU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1MjM0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX2dldF91c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NDM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGFwX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy01NzEtLyogR2V0IHBhY2tldCBmcm9tIHVzZXIgc3BhY2UgYnVmZmVyICovXFxuZHJpdmVycy9uZXQvdGFwLmM6NTcyOnN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcXG5kcml2ZXJzL25ldC90YXAuYy01NzMtXFx0XFx0XFx0ICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IG5vYmxvY2spXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYz02OTE9c3RhdGljIHNzaXplX3QgdGFwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy02OTktXFxuZHJpdmVycy9uZXQvdGFwLmM6NzAwOlxcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgTlVMTCwgZnJvbSwgbm9ibG9jayk7XFxuZHJpdmVycy9uZXQvdGFwLmMtNzAxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jPTEwMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGFwX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxcbmRyaXZlcnMvbmV0L3RhcC5jOjEwNDU6c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTExOD1zdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVxcdFxcdFxcdHhkcCA9IFxcdTAwMjYoKHN0cnVjdCB4ZHBfYnVmZiAqKWN0bC1cXHUwMDNlcHRyKVtpXTtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlxcdFxcdFxcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMzQtXFxuZHJpdmVycy9uZXQvdGFwLmM6MTEzNTpcXHRyZXR1cm4gdGFwX2dldF91c2VyKHEsIGN0bCA/IGN0bC1cXHUwMDNlcHRyIDogTlVMTCwgXFx1MDAyNm0tXFx1MDAzZW1zZ19pdGVyLFxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMzYtXFx0XFx0XFx0ICAgIG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjQ4LjY3NDkzODI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQwMzI3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIENhbGwgUmVsYXRpb25zaGlwcyBpbiB0aGUgUGFja2V0IFByb2Nlc3NpbmcgUGF0aCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgY29kZSBhbmQgc2VlaW5nIGhvdyBkYXRhIGZsb3dzLiBJJ3ZlIG5vdGljZWQgdGhhdCBgdGFwX2dldF91c2VyX3hkcGAgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYHRhcF9zZW5kbXNnYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIEkgc2VlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgYmVpbmcgY2FsbGVkIGluIHNldmVyYWwgcGxhY2VzOiBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gT2theSwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgYWJvdXQgdGhlc2UgcGFydHMgb2YgdGhlIGNvZGUuXG5cbk5vdyBJJ20gZm9jdXNpbmcgb24gdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIGVhY2ggb25lLiBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIGxpbWl0cyB0aGVpciB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgc291cmNlIGZpbGUuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmQuIGBwYWNrZXRfc25kYCBpcyBhbHNvIHN0YXRpYz8gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSwgdGhhdCBhcmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgY2FsbGdyYXBoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQyOjUzLjgxNTI2ODE5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTY1NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhY2tldF9zbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNTI5PXN0YXRpYyB2b2lkIHRwYWNrZXRfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NDgtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTQ5OnN0YXRpYyBpbnQgX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgc2l6ZV90IGxlbilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NTAte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTY0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU2NTpzdGF0aWMgaW50IHBhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqbGVuLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkciwgaW50IHZuZXRfaGRyX3N6KVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NzpcXHRyZXQgPSBfX3BhY2tldF9zbmRfdm5ldF9wYXJzZSh2bmV0X2hkciwgKmxlbik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc4LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI2Njg9c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjczNS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3MzY6c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM3LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0OC1cXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg0OTpcXHRcXHRcXHRpZiAoX19wYWNrZXRfc25kX3ZuZXRfcGFyc2UoXFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODUwLVxcdFxcdFxcdFxcdHRwX2xlbiA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5Mzg9c3RhdGljIHN0cnVjdCBza19idWZmICpwYWNrZXRfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI5NjQ6c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5NjUte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDIwLVxcdGlmICh2bmV0X2hkcl9zeikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzAyMTpcXHRcXHRlcnIgPSBwYWNrZXRfc25kX3ZuZXRfcGFyc2UobXNnLCBcXHUwMDI2bGVuLCBcXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMjItXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzEyMj1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyNy1cXHQvKiBSZWFkaW5nIHR4X3JpbmcucGdfdmVjIHdpdGhvdXQgaG9sZGluZyBwZ192ZWNfbG9jayBpcyByYWN5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEyODpcXHQgKiB0cGFja2V0X3NuZCgpIHdpbGwgcmVkbyB0aGUgY2hlY2sgc2FmZWx5Llxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyOS1cXHQgKi9cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzAtXFx0aWYgKGRhdGFfcmFjZShwby1cXHUwMDNldHhfcmluZy5wZ192ZWMpKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzMTpcXHRcXHRyZXR1cm4gdHBhY2tldF9zbmQocG8sIG1zZyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMyLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzMzpcXHRyZXR1cm4gcGFja2V0X3NuZChzb2NrLCBtc2csIGxlbik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NTMuOTI1NDM3ODI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODkyMDYxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgU2VuZGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBwYWNrZXRfc2VuZG1zZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSBkYXRhIGhpdHMsIGZvciBib3RoIGBwYWNrZXRfc25kYCBhbmQgYHRwYWNrZXRfc25kYC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0J3MgYSBiaXQgb2RkLiBJIHRob3VnaHQgYHBhY2tldF9zZW5kbXNnYCB3YXMgc3RhdGljIHRvby4gVGhhdCdzIGEgcmVkIGZsYWcuIExldCBtZSBjbGFyaWZ5IC0gaXMgdGhlcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbiBpbiB0aGlzIGNoYWluPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyBwYWNrZXRzIGFyZSBhY3R1YWxseSB0cmFuc21pdHRlZC4gQmVzdCB0byBkb3VibGUtY2hlY2sgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGFib3V0IGBwYWNrZXRfc2VuZG1zZ2AuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbnRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBhbmQgY29uZmlybSBleGFjdGx5IGhvdyBpdCdzIGRlZmluZWQgYW5kIHVzZWQuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGxvd2VyLWxldmVsIHNlbmRpbmcgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDI6NTguMjE0NjQ2NTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg4MjUxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTM1PXN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NjUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTY2OnN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTY3LVxcdFxcdFxcdCAgICAgICBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjc1OTpcXHQvKiBwYWNrZXRfc2VuZG1zZygpIGNoZWNrIG9uIHR4X3JpbmcucGdfdmVjIHdhcyBsb2NrbGVzcyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NjAtXFx0ICogd2UgbmVlZCB0byBjb25maXJtIGl0IHVuZGVyIHByb3RlY3Rpb24gb2YgcGdfdmVjX2xvY2suXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjQ9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEyMS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMjI6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTIzLXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDY2OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3QgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODEtXFx0LnNodXRkb3duID1cXHRzb2NrX25vX3NodXRkb3duLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDY4MjpcXHQuc2VuZG1zZyA9XFx0cGFja2V0X3NlbmRtc2dfc3BrdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODMtXFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00Njg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDItXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cGFja2V0X2dldHNvY2tvcHQsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzAzOlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ3MDQtXFx0LnJlY3Ztc2cgPVxcdHBhY2tldF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0Mjo1OC4zMjM0NzY3OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNzcxNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRW50cnkgUG9pbnRzIGZvciBOZXR3b3JrIERldmljZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaW5pdGlhbGx5LCB0aGV5IHNlZW0gc3RhdGljLCB3aGljaCBjb3VsZCBiZSBhbiBpc3N1ZSBpbiB0ZXJtcyBvZiBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIHdhaXQsIHRoZXkncmUgYWN0dWFsbHkgYHByb3RvX29wc2AgY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5IGFyZSwgaW4gZmFjdCwgZW50cnkgcG9pbnRzLiBUaGF0J3MgZ29vZC4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBoZXJlIHNheSBJIHNob3VsZCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucywgaWYgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuU28sIGlmIGBwYWNrZXRfc2VuZG1zZ2AgaXMgc3RhdGljLCBjb3VsZCBpdCBiZSBpbmxpbmVkPyBObywgdGhhdCBjYW4ndCBiZSByaWdodDsgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBwYWNrZXRfb3BzLnNlbmRtc2dgLCBzbyBpdHMgYWRkcmVzcyBpcyB0YWtlbi4gVGh1cywgaXQncyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgYXQgbGVhc3Qgbm90IGNvbXBsZXRlbHkuIFN0aWxsLCBpZiBJICpjYW4qIGZpbmQgYSBub24tc3RhdGljIG9wdGlvbiwgdGhhdCdzIHRoZSBwcmVmZXJyZWQgcm91dGUuXG5cbkhtbSwgaXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQncyBhcHByb3ByaWF0ZT8gSSBrbm93IGBzb2NrX3NlbmRtc2dgIGlzIHRoZSBnZW5lcmljIG9uZSwgYnV0IHRoYXQncyBhICpob3QgcGF0aCrigJR0aGUgY29kZSBpcyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSwgc28gSSBzaG91bGQgYmUgY2FyZWZ1bCB0aGVyZS4gVGhhdCBtZWFucyBgcGFja2V0X3NlbmRtc2dgIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAgYXJlIGdvb2QgY2hvaWNlcy5cblxuTm93LCBsZXQncyBsb29rIGF0IGB0YXAuY2AuIEluIHRoaXMgY2FzZSwgYHRhcF9zZW5kbXNnYCBpcyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gQWgsIGJ1dCB3YWl0LCBgdGFwX3NlbmRtc2dgICppcyogc3RhdGljISBEYW1uLiBPa2F5LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUgaW4gdGhpcyBmaWxlPyBJIG5lZWQgdG8gY2hlY2sgYHRhcF9zZW5kbXNnYCBpbiB0aGUgYGRyaXZlcnMvbmV0L3RhcC5jYCBmaWxlIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MDQuNjUxMTk1Nzc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU3MzY3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwNDU9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtMTExNy1cXG5kcml2ZXJzL25ldC90YXAuYzoxMTE4OnN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG5kcml2ZXJzL25ldC90YXAuYy0xMTE5LVxcdFxcdCAgICAgICBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB0YXBfc29ja2V0X29wcyA9IHtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTY2OlxcdC5zZW5kbXNnID0gdGFwX3NlbmRtc2csXFxuZHJpdmVycy9uZXQvdGFwLmMtMTE2Ny1cXHQucmVjdm1zZyA9IHRhcF9yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MzowNC45MDY5NDkwOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MzAxOTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgdGFwX3NlbmRtc2dgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgdGFwX3NlbmRtc2dgIGlzIGluZGVlZCBhc3NpZ25lZCB0byBgdGFwX3NvY2tldF9vcHMuc2VuZG1zZ2AuIFRoaXMgbWVhbnMgaXQncyBub3QgYW4gaW5saW5lZCBmdW5jdGlvbjsgaXQgaGFzIGEgZGVkaWNhdGVkIHN5bWJvbCBhZGRyZXNzLCB3aGljaCBpcyB1c2VmdWwgZm9yIGFuYWx5c2lzLiBHb29kLiBUaGF0IGdpdmVzIG1lIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gd29yayB3aXRoOiBgdGFwX3NlbmRtc2dgIGl0c2VsZiwgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGBwYWNrZXRfc2VuZG1zZ19zcGt0YC5cblxuTm93LCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayByZWdhcmRpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX1RBUGAgaXMgZXNzZW50aWFsLCBhcyB0aGF0IGRpcmVjdGx5IGVuYWJsZXMgdGhlIGBkcml2ZXJzL25ldC90YXAuY2AgZHJpdmVyLCB3aGljaCBpcyBvdXIgdGFyZ2V0LiBTaW1pbGFybHksIGBDT05GSUdfUEFDS0VUYCBpcyBhbHNvIGEgbXVzdC1oYXZlIGJlY2F1c2UgaXQncyByZXF1aXJlZCBmb3IgdGhlIHBhY2tldCBzb2NrZXQgZnVuY3Rpb25hbGl0eSB0aGF0J3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMsIEknbGwgcXVpY2tseSBnbGFuY2Ugb3ZlciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBgQ09ORklHX1RBUGAgc2V0dGluZy4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MDkuODY5OTcxNzc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI5NTQwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zOTE9Y29uZmlnIFRVTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MTQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTU6Y29uZmlnIFRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDE2LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjEwLjA5MjkzMTQxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc3Mzk3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENPTkZJR19UQVBgLi4uIGl0J3MgYSB0cmlzdGF0ZSBvcHRpb24sIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSBidWlsdC1pbiwgbW9kdWxhciwgb3Igbm90IGRlZmluZWQgYXQgYWxsLiBBbmQgaW50ZXJlc3RpbmdseSwgaXQgZG9lc24ndCBoYXZlIGl0cyBvd24gZXhwbGljaXQgcHJvbXB0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJdCdzIGVzc2VudGlhbGx5IGFuIFwiaW1wbGVtZW50YXRpb24gZGV0YWlsXCIgc28gdG8gc3BlYWsuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nICpob3cqIHRoaXMgb3B0aW9uIGdldHMgc2VsZWN0ZWQuIEZyb20gdGhlIGNvbnRleHQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQncyBwdWxsZWQgaW4gYXMgYSBkZXBlbmRlbmN5IGJ5IGJvdGggYENPTkZJR19NQUNWVEFQYCBhbmQgYENPTkZJR19JUFZUQVBgLiBTbywgaWYgZWl0aGVyIG9mIHRob3NlIG9wdGlvbnMgYXJlIGVuYWJsZWQgKGVpdGhlciBidWlsdC1pbiBvciBhcyBhIG1vZHVsZSksIHRoZSBrZXJuZWwgYnVpbGQgKmltcGxpY2l0bHkqIGJyaW5ncyBpbiBgQ09ORklHX1RBUGAuIEVzc2VudGlhbGx5LCBgVEFQYCBpcyBhIHN1cHBvcnRpbmcgc3RydWN0dXJlIGZvciB0aG9zZSB0d28gZmVhdHVyZXMuIEl0IHNlZW1zIHRoYXQgYFRBUGAgaXMgYSBsb3ctbGV2ZWwgYmFzZSBmb3IgdmlydHVhbGl6YXRpb24gbmV0d29yayBpbnRlcmZhY2VzLiBUaGlzIGV4cGxhaW5zIHdoeSB0aGVyZSdzIG5vIGRpcmVjdCBwcm9tcHQsIGl0cyBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQgXCJ1cHN0cmVhbVwiIGJ5IHRoZSBvcHRpb25zIHRoYXQgKnVzZSogaXQuIFRoaXMgaXMgZ29vZCBkZXNpZ24sIHJlZHVjaW5nIGNsdXR0ZXIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWVudS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MzoxNS4zNzAzMzIxNTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY0MzkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgVEFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODItXFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxODM6XFx0c2VsZWN0IFRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTg0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjE5LVxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjIwOlxcdHNlbGVjdCBUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyMS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjE1LjU3MDk4MTcxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5NDY1MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVuYWJsaW5nIE1BQ1ZUQVAgYW5kIEl0cyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRoZSBgQ09ORklHX1RBUGAgZnVuY3Rpb25hbGl0eSBjb21waWxlZC4gVGhlIGRvY3VtZW50YXRpb24gc3VnZ2VzdHMgdGhhdCBlbmFibGluZyBlaXRoZXIgYENPTkZJR19NQUNWVEFQYCBvciBgQ09ORklHX0lQVlRBUGAgd2lsbCBhY2hpZXZlIHRoaXMuIEkgdGhpbmsgYE1BQ1ZUQVBgIGlzIHRoZSBiZXR0ZXIgcm91dGUsIEknbGwgZ28gd2l0aCB0aGF0IGZvciBub3cuXG5cbldhaXQgYSBzZWNvbmQsIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZGVwZW5kZW5jaWVzLiBSaWdodCwgSSByZW1lbWJlciBub3csIGBNQUNWVEFQYCByZWxpZXMgb24gYm90aCBgTUFDVkxBTmAgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBJTkVUYCBzdGFjay4gSSBoYWQgZm9yZ290dGVuIHRvIGZhY3RvciB0aGF0IGluIGluaXRpYWxseS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlIGNlcnRhaW4uIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIG9yIEnigJlsbCBlbmNvdW50ZXIgYnVpbGQgaXNzdWVzLiBCZXR0ZXIgdG8gdmVyaWZ5IHRoaXMgbm93IHRoYW4gdG8gd2FzdGUgdGltZSBkZWJ1Z2dpbmcgbGF0ZXIuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgYE1BQ1ZUQVBgIGRlcGVuZGVuY2llcyBleHBsaWNpdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjE4Ljg0MDQ0OTY1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMzY3Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNWVEFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTE2NT1jb25maWcgTUFDVkxBTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNzgtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxNzk6Y29uZmlnIE1BQ1ZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cXHR0cmlzdGF0ZSBcXFwiTUFDLVZMQU4gYmFzZWQgdGFwIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MTkuMDQxODIzMTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2OTkyNzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb246IGBNQUNWVEFQYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gYW55dGhpbmcgaW52b2x2aW5nIGBNQUNWVEFQYCwgaXQncyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgYXJlIGluIHBsYWNlLiBJIGNhbid0IGJ1aWxkIGEgcm9idXN0IHNvbHV0aW9uIG9uIGEgc2hha3kgZm91bmRhdGlvbiwgYW5kIGBNQUNWVEFQYCBpcywgaW4gbXkgZXhwZXJpZW5jZSwgb25lIG9mIHRob3NlIHRoaW5ncyB0aGF0IGNhbiBzb21ldGltZXMgc2lsZW50bHkgdHJpcCB5b3UgdXAgaWYgaXRzIHByZXJlcXVpc2l0ZXMgYXJlbid0IG1ldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgZXZlcnl0aGluZyB3aGljaCBzdXBwb3J0cyB0aGlzLiBJIG5lZWQgdG8ga25vdyB3aGF0IGtlcm5lbCBtb2R1bGVzIGFyZSByZXF1aXJlZCwgd2hhdCB1c2VyLXNwYWNlIHV0aWxpdGllcyBhcmUgZGVwZW5kZWQgdXBvbiwgYW5kIGlkZWFsbHksIEkgc2hvdWxkIGtub3cgd2hpY2ggdmVyc2lvbnMgYXJlIGtub3duIHRvIHBsYXkgbmljZWx5IHRvZ2V0aGVyLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYXZvaWRpbmcgY29tcGlsZSBlcnJvcnM7IGl0J3MgYWJvdXQgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3VlcywgYW5kIGVuc3VyaW5nIEkgZG9uJ3Qgd2FzdGUgdGltZSB0cm91Ymxlc2hvb3RpbmcgcHJvYmxlbXMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gYXZvaWRlZCB3aXRoIGEgYml0IG9mIHVwZnJvbnQgZHVlIGRpbGlnZW5jZS4gQSBxdWljayBkZXBlbmRlbmN5IGFzc2Vzc21lbnQgaXMgYWx3YXlzIHdvcnRoIHRoZSBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MjIuODExNzUzNzUzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjYxODc2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qTUFDVkxBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0xNzk9Y29uZmlnIE1BQ1ZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cXHR0cmlzdGF0ZSBcXFwiTUFDLVZMQU4gYmFzZWQgdGFwIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIE1BQ1ZMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4Mi1cXHRkZXBlbmRzIG9uIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MjMuMDc3OTQ3NjE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTk0NzIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnM6XG5cbioqQnVpbGRpbmcgdGhlIFZpcnR1YWwgTmV0d29yayoqXG5cbkFscmlnaHQsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBuZXR3b3JrIHNldHVwLiBJdCBsb29rcyBsaWtlIEknbSBkZWFsaW5nIHdpdGggYE1BQ1ZUQVBgIGFuZCB0aGF0LCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBgTUFDVkxBTmAgYW5kIGBJTkVUYCB0byBnZXQgaXRzIGpvYiBkb25lLiBTbywgdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBicmluZyBpbiBgTUFDVkxBTmAgYW5kIHRoZW4gYE1BQ1ZUQVBgIGl0c2VsZi4gQW5kLCBmb3IgZ29vZCBtZWFzdXJlLCBJJ2xsIGFkZCBgUEFDS0VUYCB0byB0aGUgbGlzdC4gTm93LCBgUEFDS0VUYCB1c3VhbGx5IGRvZXNuJ3QgbmVlZCB0byBiZSBlbmFibGVkIGV4cGxpY2l0bHksIGl0J3MgdHlwaWNhbGx5IGJha2VkIGluIGJ5IGRlZmF1bHQsIGJ1dCBJJ20gYSBzdGlja2xlciBmb3IgZG91YmxlLWNoZWNraW5nIHRoZXNlIHRoaW5ncy4gSXQncyBhbHdheXMgYmVzdCB0byB2ZXJpZnkgdGhlIG9idmlvdXMgYW5kIGF2b2lkIGFueSB1bmV4cGVjdGVkIGdvdGNoYXMgZG93biB0aGUgbGluZS4gVGhhdCdzIHRoZSBwbGFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjI2Ljc3NzQyMzQzMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NDcwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBQ0tFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L0tjb25maWctNS1cXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXFxubmV0L3BhY2tldC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBzb2NrZXRcXFwiXFxuLS1cXG5uZXQvcGFja2V0L0tjb25maWctMTgtXFxubmV0L3BhY2tldC9LY29uZmlnOjE5OmNvbmZpZyBQQUNLRVRfRElBR1xcbm5ldC9wYWNrZXQvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0MzoyNi44MzIxNzU1NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1Mzg2MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBwb3RlbnRpYWwgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlIGZ1bGwgc2NvcGUgb2YgaXRzIGltcGFjdC4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpdCBsb29rcyBsaWtlIHdlIG5lZWQgdG8gYWRkIGBQQUNLRVRgIGFzIGEgdHJpc3RhdGUuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBsZXQncyBtYWtlIGEgbm90ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgVFVOYCBpcyBhbHNvIGFmZmVjdGVkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHRhcC5jYCwgYW5kIHRoYXQncyB1c2VkIGJ5IGBNQUNWVEFQYCBhbmQgYElQVlRBUGAuIEhvd2V2ZXIsIGBUVU5gIGxpdmVzIGluIGl0cyBvd24gYHR1bi5jYCBkcml2ZXIsIHNvIGl0IHNob3VsZCBiZSBpbmRlcGVuZGVudCwgbWVhbmluZyB3ZSdyZSBsaWtlbHkgZ29vZCBvbiB0aGF0IGZyb250IGFuZCBubyBmdXJ0aGVyIGFjdGlvbiBpcyByZXF1aXJlZCB0aGVyZS4gYE1BQ1ZUQVBgIGFuZCBgTUFDVkxBTmAgc2VlbSB1bmFmZmVjdGVkLlxuXG5GaW5hbGx5LCBzaW5jZSB0aGUgcGF0Y2ggdG91Y2hlcyBWTEFOIGhhbmRsaW5nLCBJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSBuZWVkIHRvIGFkanVzdCBhbnl0aGluZyByZWxhdGluZyB0byBgVkxBTl84MDIxUWAuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGdpdmVuIHRoZSBjaGFuZ2VzIHRvIHRoYXQgYXJlYS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBhZGRyZXNzZWQgaW4gdGhlIHVwZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MzMuMjg2MDQyNjM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA5MTAxNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvS2NvbmZpZy01LVxcbm5ldC84MDIxcS9LY29uZmlnOjY6Y29uZmlnIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0yMS1cXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXFxubmV0LzgwMjFxL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6MzMuNTE2OTU3NjcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjUxMDEyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWTEFOIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHVzaW5nIGBldGhfdHlwZV92bGFuYCBhbmQgYHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aGAuIFRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXkncmUgZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbGludXgvaWZfdmxhbi5oYC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGVpdGhlciBvZiB0aGVzZSBkZXBlbmQgb24gdGhlIGBWTEFOXzgwMjFRYCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbi4gSWYgdGhleSBkbywgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB3aGF0ZXZlciBjaGFuZ2UgaXMgaW4gdGhpcyBwYXRjaCB3aXRoIHJlc3BlY3QgdG8gdGhhdCBkZXBlbmRlbmN5LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIDgwMi4xUSBzdGFuZGFyZC4gSXQgaXMgZXNzZW50aWFsIEkgdW5kZXJzdGFuZCBhbnkgaW1wbGljYXRpb25zIGZvciBzdGFuZGFyZCBWTEFOIHRhZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6NDAuNjgyMDYyOTA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUyNTAwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTY1OD1zdGF0aWMgaW5saW5lIF9fYmUxNiB2bGFuX2dldF9wcm90b2NvbChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNjYzLS8qIFRoaXMgdmVyc2lvbiBvZiBfX3ZsYW5fZ2V0X3Byb3RvY29sKCkgYWxzbyBwdWxscyBtYWMgaGVhZGVyIGluIHNrYi1cXHUwMDNlaGVhZCAqL1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjY2NDpzdGF0aWMgaW5saW5lIF9fYmUxNiB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC02NjUtXFx0XFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB0eXBlLCBpbnQgKmRlcHRoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0Mzo0MS4wNzczMjQ0MzdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NTYzNzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgUGFja2V0IFRyYW5zbWlzc2lvbiBGb2N1cyoqXG5cbk9rYXksIHNvIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5saW5lLCB3aGljaCBtZWFucyB0aGV5ICpzaG91bGRuJ3QqIGRlcGVuZCBvbiBgVkxBTl84MDIxUWAgYmVpbmcgY29tcGlsZWQuIEhvd2V2ZXIsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaWYgSSB3YW50IHRvIHRlc3QgVkxBTi10YWdnZWQgcGFja2V0IGZ1bmN0aW9uYWxpdHksIEknbSBnb2luZyB0byB3YW50IHRoYXQgZmxhZyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gTGV0J3MgaW5jbHVkZSBpdC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBwYWNrZXQgdHJhbnNtaXNzaW9uOiBgdGFwX3NlbmRtc2dgLCBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdHBhY2tldF9zbmRgLlxuXG5XYWl0IGEgbWludXRlLCBpc24ndCBgdHBhY2tldF9zbmRgIGEgKnN0YXRpYyogZnVuY3Rpb24/IEJ1dCBJJ20gc2VlaW5nIGl0IGNhbGxlZCBmcm9tIGBwYWNrZXRfc2VuZG1zZ2AgYW5kLi4ub2gsIG5vLCBJIHRoaW5rIEkgd2FzIGdldHRpbmcgbWl4ZWQgdXAuIFJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tICpvbmx5KiBgcGFja2V0X3NlbmRtc2dgLiBUaGVuLi4uIGB0cGFja2V0X2ZpbGxfc2tiYC4uLiBpc24ndCB0aGF0IGZvciByZWNlcHRpb24sIG5vdCB0cmFuc21pc3Npb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDM6NDUuOTIyOTY1NDU3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MzIzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHBhY2tldF9maWxsX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1NjU9c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4Ny1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODg6c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTg5LVxcdFxcdHZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgdHBfbGVuLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODY4LVxcdFxcdH1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4Njk6XFx0XFx0dHBfbGVuID0gdHBhY2tldF9maWxsX3NrYihwbywgc2tiLCBwaCwgZGV2LCBkYXRhLCB0cF9sZW4sIHByb3RvLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg3MC1cXHRcXHRcXHRcXHRcXHQgIGFkZHIsIGhsZW4sIGNvcHlsZW4sIFxcdTAwMjZzb2NrYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjQ2LjAzMTYwMzk2M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjE4NDk3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBhY2tldCBTb2NrZXQgU2VuZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYHRwYWNrZXRfZmlsbF9za2JgIGdldHMgY2FsbGVkIGJ5IGB0cGFja2V0X3NuZGAsIHdoaWNoIHRlbGxzIG1lIHRoYXQgYHRwYWNrZXRfc25kYCBpcyB0aGUgcHJpbWFyeSBzZW5kIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgcGFja2V0IHNvY2tldHMgdXRpbGl6aW5nIHJpbmcgYnVmZmVycy4gVGhlbiB0aGVyZSdzIGBwYWNrZXRfc25kYCB3aGljaCBsb29rcyB0byBiZSB0aGUgbWFpbiBvbmUgZm9yIHJlZ3VsYXIgcGFja2V0IHNvY2tldHMuIEkgc2VlIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCB0aGVyZSB0b28sIHdoaWNoIGlzIGZvciB0aGUsIG5vdyBvYnNvbGV0ZSwgYFNPQ0tfUEFDS0VUYCBmdW5jdGlvbmFsaXR5LCBhbmQgd2UndmUgZ290IGB0YXBfc2VuZG1zZ2AgZm9yIFRBUCBkZXZpY2VzLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGBwYWNrZXRfc25kYCBzdGF0aWM/IFllcCwgaXQgaXMuIEJ1dCwgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgcGFja2V0X3NlbmRtc2dgLiBBaCwgcmlnaHQsIGBwYWNrZXRfc2VuZG1zZ2AgZ2V0cyBhc3NpZ25lZCB0byBgcGFja2V0X29wcy5zZW5kbXNnYC4gT2theSwgc28gYHBhY2tldF9zZW5kbXNnYCBpcyB0aGUgcmVhbCBlbnRyeSBwb2ludC4gR290IGl0LiBTbyB0aGF0IG1lYW5zIEkgc2hvdWxkIGZvY3VzIG9uIGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuIFRob3NlIGFyZSB0aGUgb25lcyB0byB0YXJnZXQuXG5cbkp1c3Qgd2FudCB0byB2ZXJpZnkgd2hlcmUgdGhlc2UgYXJlIGxvY2F0ZWQuIGB0YXBfc2VuZG1zZ2AgaXMgaW4gYHRhcC5jYCwganVzdCBhcyBJJ2QgZXhwZWN0LiBgcGFja2V0X3NlbmRtc2dgIGFuZCBgcGFja2V0X3NlbmRtc2dfc3BrdGAgYXJlIGJvdGggaW4gYGFmX3BhY2tldC5jYC4gUGVyZmVjdC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBpbXBvcnRhbnQgc2VuZC1yZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBrbm93IGFib3V0PyBMZXQncyBzZWUuLi4gSSBzZWUgYHRhcF9nZXRfdXNlcl94ZHBgIGlzIGNhbGxlZCBmcm9tIGB0YXBfc2VuZG1zZ2AuIE9rYXkuIEFuZCB0aGVuLCBJIHNlZSB0aGF0IGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgY2FsbGVkIGZyb20gYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9maWxsX3NrYmAsIGFuZCBgcGFja2V0X3NuZGAuIFNvIGlmIEkgZnV6eiB0aG9zZSB0aHJlZSwgaXQnbGwgY292ZXIgdGhvc2UgY2FsbCBwYXRocy4gU2VlbXMgbGlrZSB0aGF0IHdvdWxkIHByb3ZpZGUgcHJldHR5IGNvbXByZWhlbnNpdmUgY292ZXJhZ2UuXG5cbk5vdywgb25lIGxhc3QgdGhpbmc6IElzIGBwYWNrZXRfc2VuZG1zZ2AgdGhlICpvbmx5KiBlbnRyeSBwb2ludCBmb3IgYHBhY2tldF9wYXJzZV9oZWFkZXJzYD8gSG1tbS4uLiBpcyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGFsc28gY2FsbGVkIGZyb20gYHBhY2tldF9yY3Zfc3BrdGA/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBOb3BlLCBsb29rcyBsaWtlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgKm5vdCogY2FsbGVkIGZyb20gYHBhY2tldF9yY3Zfc3BrdGAuIEdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE9rYXksIHRoYXQncyBldmVyeXRoaW5nIEkgd2FzIGxvb2tpbmcgZm9yLiBOb3csIEkgaGF2ZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2VuZCBwYXRocyB0byB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzM0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjU0LjY1MDEwNTEyNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NjE5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3BhcnNlX2hlYWRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xODY5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzQtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTM1OnN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM2LXtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk2Nj1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDc4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjA3OTpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA4MC1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU4OD1zdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY2Mi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI2NjM6XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2NjQtXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjQ9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5MC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwOTE6XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQzOjU0LjczMDk3MTQxNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzIyNTY0NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIFRhZ2dpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgc2VuZCBwYXRocyBhcmUgdGhlIGtleS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGNvbWluZyBmcm9tIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgLCBhbmQgYHBhY2tldF9zbmRgLiBBbGwgc2VuZCBwYXRocywgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gVGhhdCBuYXJyb3dzIGl0IGRvd24gdG8gYHBhY2tldF9zZW5kbXNnYCwgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBhbmQgYHRhcF9zZW5kbXNnYC5cblxuVGhlIHBhdGNoIGlzIGFib3V0IGhvdyBWTEFOIHRhZ2dlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGR1cmluZyB0cmFuc21pc3Npb24sIHNwZWNpZmljYWxseSBmb3IgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCdzIGVzc2VudGlhbGx5IG1vZGlmeWluZyBgc2tiLVx1MDAzZXByb3RvY29sYCB0byByZWZsZWN0IHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgd2hpY2ggbWVhbnMgaXQgbmVlZHMgdG8gYmUgZnV6eiB0ZXN0ZWQgdGhvcm91Z2hseS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgd2l0aCBjcmFmdGVkIFZMQU4gcGFja2V0cy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIEkndmUgZ290IGBQQUNLRVRgLCBgTUFDVlRBUGAsIGBNQUNWTEFOYCwgYFRBUGAsIGFuZCBgVkxBTl84MDIxUWAuIEkga25vdyBgQ09ORklHX1RBUGAsIGBDT05GSUdfTUFDVlRBUGAsIGBDT05GSUdfUEFDS0VUYCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAgYWxsIGV4aXN0LCBzbyB0aGF0J3MgZ29vZC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLkkgYWxzbyBzZWUgYHRhcF9nZXRfdXNlcl94ZHBgIGJlaW5nIGNhbGxlZCBmcm9tIGB0YXBfc2VuZG1zZ2Agd2hlbiBYRFAgaXMgdXNlZC4gRG9lcyB0aGlzIHBhdGNoIGludGVyYWN0IHdpdGggWERQIGluIGFueSBzcGVjaWZpYyB3YXk/IEkgbmVlZCB0byBjaGVjayBgdGFwX3NlbmRtc2dgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggWERQIG5vdy4gVGhhdCBtaWdodCBhZmZlY3QgdGhlIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQ0OjA0LjQ1MzUzOTc3M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0Mzk1NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhcF9nZXRfdXNlcl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTEwMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGFwX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ0LVxcbmRyaXZlcnMvbmV0L3RhcC5jOjEwNDU6c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTExOD1zdGF0aWMgaW50IHRhcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy0xMTI5LVxcdFxcdFxcdHhkcCA9IFxcdTAwMjYoKHN0cnVjdCB4ZHBfYnVmZiAqKWN0bC1cXHUwMDNlcHRyKVtpXTtcXG5kcml2ZXJzL25ldC90YXAuYzoxMTMwOlxcdFxcdFxcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTE6NDQ6MDQuNzA3OTUwNjU1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTcwNzQxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqWERQIGFuZCBUYXAgRHJpdmVyIFF1aXJrcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZWxhdGVkIHRvIFhEUCBzdXBwb3J0IGluIHRoZSBgdGFwYCBkcml2ZXIuIEkga25vdyBYRFAgZnVuY3Rpb25hbGl0eSBpcyBnZW5lcmFsbHkgYWNjZXNzaWJsZSBpZiBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQsIEknbSBhIGJpdCBwdXp6bGVkIHRoYXQgYHRhcF9nZXRfdXNlcl94ZHBgIGRvZXNuJ3QgKmFwcGVhciogdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGF0IGZlYXR1cmUgZmxhZy4gVGhhdCBzdHJpa2VzIG1lIGFzIGEgcG90ZW50aWFsIG92ZXJzaWdodCwgb3IgbWF5YmUgYSBkZXNpZ24gY2hvaWNlIEkgaGF2ZW4ndCBmdWxseSBncmFzcGVkIHlldC5cblxuVG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcywgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgZHJpdmVycy9uZXQvdGFwLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYHRhcF9nZXRfdXNlcl94ZHBgIGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZS4gVGhhdCdzIHdoZXJlIHRoZSBhbnN3ZXIgaXMgZ29pbmcgdG8gbGllOiB3aGV0aGVyIHRoZXJlJ3Mgc29tZSBpbXBsaWNpdCBkZXBlbmRlbmN5LCBzb21lIG90aGVyIGJ1aWxkIG9wdGlvbiBhdCBwbGF5LCBvciBpZiB0aGVyZSdzIGluZGVlZCBhIHBvdGVudGlhbCBpc3N1ZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQ0OjA5LjEyNTAyNzAwOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQwOlxcdFxcdC5wb2xsXFx0XFx0PSB0YXBfcG9sbCxcXG4xMDQxOlxcdFxcdC51bmxvY2tlZF9pb2N0bFxcdD0gdGFwX2lvY3RsLFxcbjEwNDI6XFx0XFx0LmNvbXBhdF9pb2N0bFxcdD0gY29tcGF0X3B0cl9pb2N0bCxcXG4xMDQzOlxcdH07XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdHN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4xMDQ2OlxcdHtcXG4xMDQ3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqZ3NvID0geGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQ7XFxuMTA0ODpcXHRcXHRpbnQgYnVmbGVuID0geGRwLVxcdTAwM2VmcmFtZV9zejtcXG4xMDQ5OlxcdFxcdGludCB2bmV0X2hkcl9sZW4gPSAwO1xcbjEwNTA6XFx0XFx0c3RydWN0IHRhcF9kZXYgKnRhcDtcXG4xMDUxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTA1MjpcXHRcXHRpbnQgZXJyLCBkZXB0aDtcXG4xMDUzOlxcdFxcbjEwNTQ6XFx0XFx0aWYgKHVubGlrZWx5KHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEgXFx1MDAzYyBFVEhfSExFTikpIHtcXG4xMDU1OlxcdFxcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKHhkcC1cXHUwMDNlZGF0YSkpO1xcbjEwNTY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDU3OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjEwNTg6XFx0XFx0fVxcbjEwNTk6XFx0XFxuMTA2MDpcXHRcXHRpZiAocS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVk5FVF9IRFIpXFxuMTA2MTpcXHRcXHRcXHR2bmV0X2hkcl9sZW4gPSBSRUFEX09OQ0UocS1cXHUwMDNldm5ldF9oZHJfc3opO1xcbjEwNjI6XFx0XFxuMTA2MzpcXHRcXHRza2IgPSBidWlsZF9za2IoeGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQsIGJ1Zmxlbik7XFxuMTA2NDpcXHRcXHRpZiAoIXNrYikge1xcbjEwNjU6XFx0XFx0XFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoeGRwLVxcdTAwM2VkYXRhKSk7XFxuMTA2NjpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjEwNjc6XFx0XFx0XFx0Z290byBlcnI7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgeGRwLVxcdTAwM2VkYXRhIC0geGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQpO1xcbjEwNzE6XFx0XFx0c2tiX3B1dChza2IsIHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgRVRIX0hMRU4pO1xcbjEwNzQ6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xMDc1OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG87XFxuMTA3NjpcXHRcXG4xMDc3OlxcdFxcdGlmICh2bmV0X2hkcl9sZW4pIHtcXG4xMDc4OlxcdFxcdFxcdGVyciA9IHR1bl92bmV0X2hkcl90b19za2IocS1cXHUwMDNlZmxhZ3MsIHNrYiwgZ3NvKTtcXG4xMDc5OlxcdFxcdFxcdGlmIChlcnIpXFxuMTA4MDpcXHRcXHRcXHRcXHRnb3RvIGVycl9rZnJlZTtcXG4xMDgxOlxcdFxcdH1cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cXG4xMDg0OlxcdFxcdGlmIChldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTA4NTpcXHRcXHRcXHRfX2JlMTYgcHJvdG8gPSB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLFxcbjEwODY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRlcHRoKTtcXG4xMDg3OlxcdFxcbjEwODg6XFx0XFx0XFx0aWYgKHByb3RvICE9IDApIHtcXG4xMDg5OlxcdFxcdFxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDExOjQ0OjA5LjEyNTEyMDMzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYxNDcwOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIFBhY2tldCBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgY2hhbmdlICphbHdheXMqIGdldHMgY29tcGlsZWQgaW4uIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSByYW5nZSBvZiBuZXR3b3JrIGludGVyZmFjZXM6IGBQQUNLRVRgLCBgTUFDVlRBUGAsIGBNQUNWTEFOYCwgYFRBUGAsIGFuZCBgVkxBTl84MDIxUWAuIFRoZXNlIGFyZSB0aGUga2V5IGNvbnRleHRzLlxuXG5NeSBmb2N1cyBpcyBvbiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHRyYW5zbWl0IHBhdGhzIGZvciBgVEFQYCBkZXZpY2VzIGFuZCBgQUZfUEFDS0VUYCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIFZMQU4gdGFnZ2VkIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdXBkYXRpbmcgYHNrYi1cdTAwM2Vwcm90b2NvbGAgdG8gcmVmbGVjdCB0aGUgKmlubmVyKiBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzIGhlcmU6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYW5kIGB0YXBfc2VuZG1zZ2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgYWN0dWFsIHNlbmRpbmcgb2YgcGFja2V0cyBoYXBwZW5zLCBhbmQsIGdpdmVuIHRoZSBwYXRjaCdzIHNjb3BlLCB0aGV5J3JlIHRoZSBwcmltZSBzdXNwZWN0cyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBiZWhhdmlvciBtYWtlcyBtZSB3YW50IHRvIGZ1enogdGhlc2UuIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBkaWxpZ2VudDsgdGhlcmUgY291bGQgYmUgcmVncmVzc2lvbnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlbiBwcm9jZXNzaW5nIGNyYWZ0ZWQgVkxBTiBwYWNrZXRzLlxuXG5SaWdodCwgSSdtIGdvaW5nIHRvIHNldCBzb21lIHJlc3VsdHMsIGxldCdzIGNhbGwgaXQuIFRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg1NiwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMTo0NDoxNC4zODY1OTQyNTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAwNTAwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiLFxuICAgIFwiTUFDVlRBUFwiLFxuICAgIFwiTUFDVkxBTlwiLFxuICAgIFwiVEFQXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFja2V0X3NlbmRtc2dcIixcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInRhcF9zZW5kbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZMQU4gdGFnZ2VkIHBhY2tldHMgaW4gdGhlIHRyYW5zbWl0IHBhdGhzIG9mIFRBUCBkZXZpY2VzIGFuZCBBRl9QQUNLRVQgc29ja2V0cy4gSXQgdXBkYXRlcyB0aGUgc2tiLVxcdTAwM2Vwcm90b2NvbCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgd2hlbiBhIFZMQU4gdGFnIGlzIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB3aGVuIHByb2Nlc3NpbmcgY3JhZnRlZCBWTEFOIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJNQUNWTEFOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwidGFwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdnZWQgcGFja2V0cyBpbiB0aGUgdHJhbnNtaXQgcGF0aHMgb2YgVEFQIGRldmljZXMgYW5kIEFGX1BBQ0tFVCBzb2NrZXRzLiBJdCB1cGRhdGVzIHRoZSBza2ItXFx1MDAzZXByb3RvY29sIHRvIHRoZSBpbm5lciBwcm90b2NvbCB3aGVuIGEgVkxBTiB0YWcgaXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjcmFmdGVkIFZMQU4gcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfwsst[1] Phase: Succeeded StartedAt: 2026-08-05 11:44:26 +0000 UTC FinishedAt: 2026-08-05 11:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 11:44:26 +0000 UTC FinishedAt: 2026-08-05 11:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2] Phase: Succeeded StartedAt: 2026-08-05 11:44:26 +0000 UTC FinishedAt: 2026-08-05 15:34:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 11:44:26 +0000 UTC FinishedAt: 2026-08-05 15:34:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 11:44:26 +0000 UTC FinishedAt: 2026-08-05 11:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 11:44:26 +0000 UTC FinishedAt: 2026-08-05 11:44:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowfwsst/series-workflowfwsst-convert-artifact-1113898927/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 11:44:36 +0000 UTC FinishedAt: 2026-08-05 12:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 11:44:36 +0000 UTC FinishedAt: 2026-08-05 12:04:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0d81af14-3c1c-451a-8d64-34846110a357,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-workflowfwsst/series-workflowfwsst-convert-artifact-1113898927/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": "721aa2ab-5fdb-49f5-b206-61c1e3a6019c", "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-workflowfwsst/series-workflowfwsst-build-action-3834791285/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 11:44:36 +0000 UTC FinishedAt: 2026-08-05 12:04:39 +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:*0d81af14-3c1c-451a-8d64-34846110a357,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-workflowfwsst/series-workflowfwsst-convert-artifact-1113898927/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": "721aa2ab-5fdb-49f5-b206-61c1e3a6019c", "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-workflowfwsst/series-workflowfwsst-build-action-3834791285/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 12:04:49 +0000 UTC FinishedAt: 2026-08-05 12:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 12:04:49 +0000 UTC FinishedAt: 2026-08-05 12:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 12:04:49 +0000 UTC FinishedAt: 2026-08-05 12:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 12:04:49 +0000 UTC FinishedAt: 2026-08-05 12:04:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowfwsst/series-workflowfwsst-convert-artifact-3209753598/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 12:04:59 +0000 UTC FinishedAt: 2026-08-05 12:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 12:04:59 +0000 UTC FinishedAt: 2026-08-05 12:06:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*721aa2ab-5fdb-49f5-b206-61c1e3a6019c,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-workflowfwsst/series-workflowfwsst-build-action-3834791285/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-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 12:07:03 +0000 UTC FinishedAt: 2026-08-05 12:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 12:07:03 +0000 UTC FinishedAt: 2026-08-05 12:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 12:07:03 +0000 UTC FinishedAt: 2026-08-05 12:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 12:07:03 +0000 UTC FinishedAt: 2026-08-05 12:28:31 +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:*0d81af14-3c1c-451a-8d64-34846110a357,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-workflowfwsst/series-workflowfwsst-convert-artifact-3209753598/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": "8bb099bf-187f-44d3-8085-5780b7fde35a", "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-workflowfwsst/series-workflowfwsst-build-action-2009579602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 12:07:03 +0000 UTC FinishedAt: 2026-08-05 12:28:24 +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:*0d81af14-3c1c-451a-8d64-34846110a357,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-workflowfwsst/series-workflowfwsst-convert-artifact-3209753598/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": "8bb099bf-187f-44d3-8085-5780b7fde35a", "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-workflowfwsst/series-workflowfwsst-build-action-2009579602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 12:28:31 +0000 UTC FinishedAt: 2026-08-05 12:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 12:28:31 +0000 UTC FinishedAt: 2026-08-05 12:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 12:28:31 +0000 UTC FinishedAt: 2026-08-05 12:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 12:28:31 +0000 UTC FinishedAt: 2026-08-05 12:30:42 +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:*8bb099bf-187f-44d3-8085-5780b7fde35a,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-workflowfwsst/series-workflowfwsst-build-action-2009579602/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-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 12:30:53 +0000 UTC FinishedAt: 2026-08-05 15:34:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 12:30:53 +0000 UTC FinishedAt: 2026-08-05 15:34:30 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"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:*721aa2ab-5fdb-49f5-b206-61c1e3a6019c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bb099bf-187f-44d3-8085-5780b7fde35a,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-workflowfwsst/series-workflowfwsst-build-action-3834791285/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-workflowfwsst/series-workflowfwsst-build-action-2009579602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 12:30:53 +0000 UTC FinishedAt: 2026-08-05 12:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 12:30:53 +0000 UTC FinishedAt: 2026-08-05 12:30:59 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"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-workflowfwsst/series-workflowfwsst-convert-artifact-527702275/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 12:30:53 +0000 UTC FinishedAt: 2026-08-05 12:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 12:30:53 +0000 UTC FinishedAt: 2026-08-05 12:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 12:30:53 +0000 UTC FinishedAt: 2026-08-05 12:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 12:31:04 +0000 UTC FinishedAt: 2026-08-05 15:34:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfwsst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","tap_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","MACVTAP","MACVLAN","TAP","VLAN_8021Q"],"series_id":"56f00092-824c-4022-8d10-c4fbf3cbd3cd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 12:31:04 +0000 UTC FinishedAt: 2026-08-05 15:34:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*721aa2ab-5fdb-49f5-b206-61c1e3a6019c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bb099bf-187f-44d3-8085-5780b7fde35a,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-workflowfwsst/series-workflowfwsst-build-action-3834791285/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-workflowfwsst/series-workflowfwsst-build-action-2009579602/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-workflowfwsst/series-workflowfwsst-convert-artifact-527702275/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,}